path: root/tests
AgeCommit message (Collapse)AuthorFiles
2020-05-17Fix deadlock at wy_vlogSergey Poznyakoff2
* src/stat.c: New file. * src/wydawca.c (wy_log): Don't touch statistic counters. This causes deadlock when wy_v?log is called from statistic-reporting module. * src/wydawca.h (wydawca_stat_log): Remove proto. * src/gpg.c: Increase WY_STAT_ERRORS explicitly. * src/triplet.c: Likewise. * src/verify.c: Likewise. * tests/ Fix expected output. * tests/ Likewise.
2020-04-29Change replace handlingSergey Poznyakoff5
* src/wydawca.h (struct wy_triplet): New member: replace_allowed * src/directive.c (process_directives): Set trp->replace_allowed depending on the directive file version and the "replace" directive. * src/diskio.c (backup_copy): Use trp->replace_allowed * tests/ Add new tests. * tests/ Include new tests. * tests/ New test. * tests/ New test. * tests/ New test.
2020-04-29Skip tests if running as a privileged userSergey Poznyakoff1
2020-04-27Use BSD queue macros to implement queues and linked lists.Sergey Poznyakoff1
2020-04-26Add missing descriptions to the test programsSergey Poznyakoff4
2020-04-25Keep statistic items in global array. Use special thread for periodic reportingSergey Poznyakoff6
* src/config.c: New configuration statement stat-report-interval * src/directive.c * src/timer.c: Rewrite statistic counters and functions (wydawca_stat_log,wydawca_stat_init,wydawca_stat_update) (wydawca_stat_notify,wydawca_stat_add): New functions. (wy_thr_stat): New thread (statistics reporter. * src/triplet.c: Remove per-thread statistic counters. * src/wydawca.c (wy_main): Use new statistic calls. Force statistic logging at the end of the run. * src/wydawca.h (DEFAULT_STAT_REPORT_INTERVAL): New constant. (stat_report_interval): New extern. (wy_get_stat_array, wy_get_stat_slot) (wy_get_stat_counter): Remove. (wydawca_stat_log,wydawca_stat_init,wydawca_stat_update) (wydawca_stat_notify,wydawca_stat_add) (wydawca_stat_incr): New protos. (stat_mask_p,logstats,wydawca_stats_export) (wydawca_stats_update): Remove protos.
2020-04-24Fix the gpg2 version requirement. Document changes to the testsuiteSergey Poznyakoff2
2020-04-23Add test caseSergey Poznyakoff1
2020-04-23Rewrite the testsuite.Sergey Poznyakoff45
Use gpg2 to create the keys, and sign files as necessary. * NEWS: Update. * doc/wydawca.texi: Update. * Detect the presence of GPG version 2. * src/cmdline.opt (--single-process): Remove. * src/config.c: Remove the "single-process" statement. * src/triplet.c (triplet_enqueue): Fix eventual NULL dereference. (wy_triplet_wait): Update the WY_STAT_INCOMPLETE_TRIPLETS counter. * src/wydawca.c (single_process_option): Remove global. * src/wydawca.h (single_process): Remove global. * tests/.gitignore: Update. * tests/ Update. * tests/ Rewrite. * tests/chargen.c: New auxiliary tool * tests/dist/file: Remove. * tests/dist/file.directive.asc: Remove. * tests/dist/file.sig: Remove. * tests/dist/file12f.directive.asc: Remove. * tests/dist/file12t.directive.asc: Reemove. * tests/dist/rmsymlink.directive.asc: Remove. * tests/dist/symlink.directive.asc: Remove. * tests/etc/notify.cfin: Rename to tests/etc/ * tests/etc/ Update. * tests/etc/ New file. * tests/etc/ New file. * tests/etc/project: New file. * tests/etc/pubring.asc: Remove. * tests/etc/secring.asc: Remove. * tests/etc/wydawca.cfin: Remove. * tests/*.at: Rewrite.
2020-04-23Fix make distcheckSergey Poznyakoff2
* tests/ Fix GNUPGHOME to point to the directory in the build tree. * tests/etc/ Augment DISTCLEANFILES
2020-04-22Avoid double-checking of the directive files. Fix triplet expiration.Sergey Poznyakoff1
* doc/wydawca.texi: Document the default value for file-sweep-time. * src/config.c (parse_single_statmask): Remove the invert pointer. (parse_statmask): Reflect the above. (config_finish): Ensure safe value for file_sweep_time. * src/triplet.c (register_file): Initialize the directive_verified member. (triplet_expired_p): No special handling for ttl==0. * src/verify.c (verify_directive_file): Cache the result in trp->directive_verified. * src/wydawca.c (file_sweep_time): Initialize to DEFAULT_FILE_SWEEP_TIME. * src/wydawca.h (DEFAULT_FILE_SWEEP_TIME): New constant. (DIRECTIVE_UNCHECKED,DIRECTIVE_GOOD) (DIRECTIVE_BAD): New constants. (struct wy_triplet): New member: directive_verified. * tests/cwdrepl.c: Fix a prematurely closed comment.
2020-04-20Add missing copyright statementsSergey Poznyakoff3
2020-04-20Add tests for legacy upload notification interfaceSergey Poznyakoff12
* src/net.c (handle_connection): Ignore user/comment. * tests/.gitignore: Add wyclt. * tests/wyclt.c: New file. * tests/ (TESTSUITE_AT): Add new tests. * tests/ New test. * tests/ New test. * tests/ New test. * tests/ (AT_WYDAWCA_DAEMON): Change arguments. (AT_WYDAWCA_INOTIFY_DAEMON): New macro. Include new tests.
2020-04-20Rewrite the timer support.Sergey Poznyakoff1
Timers are kept in a thread-specific array variable. Spool timers are referenced in expansion strings by their fully qualified names, e.g. ${timer:spool:release:system}. * NEWS: Update. * doc/wydawca.texi: Document new syntax for the spool timer variables. * src/directive.c * src/wydawca.h (struct spool): New member: timer_id. * tests/ Filter out certain messages, that can appear * src/process.c (spool_count): New global. (register_spool): Build spool list in the same order as listed in the configuration file. (spool_timer_id): New function. * src/timer.c: Rewrite using array of struct timer_slot, instead of the hash table. * src/triplet.c (try_timer_var): Rewrite. * src/wydawca.c (stderr_printer): Protect stderr by a mutex. in unpredictable order.
2020-04-18Fix statistics gathering. Display stats at the end of the run in cron mode.Sergey Poznyakoff3
* src/directive.c (process_directives): Raise the 'destroying' flag prior to removing the directive file, in order to avoid the removal being caught by the watcher thread. * src/timer.c (wydawca_stats_export, wydawca_stats_update): New functions. * src/triplet.c (triplet_list_lock,triplet_list_unlock): Check for NULL pointer. (remove_triplet_unlocked): Set the 'destroying' flag. (triplet_remove_file): Do nothing if the 'destroying' flag is set. (wy_thr_triplet): Call logstats only in the daemon mode. Otherwise call wydawca_stats_update. * src/wydawca.c (wy_main): Call wydawca_stats_export at the beginning. Call logstats before exiting, unless in daemon mode. * src/wydawca.h (struct wy_triplet): New member: destroying. (wydawca_stats_export,wydawca_stats_update): New protos. * tests/ Update. * tests/ Update. * tests/ Update.
2020-04-18Remove spool lockingSergey Poznyakoff1
* NEWS: Document changes. * doc/wydawca.texi: Document changes. * src/ Remove lock.c * src/lock.c: Delete. * src/config.c: Remove the locking statement. * tests/etc/wydawca.cfin: Likewise. * src/wydawca.c: Check pidfile before startup, unless in dry-run mode. * src/wydawca.h: Remove prototypes of locking functions * src/process.c (scan_spool_unlocked): Merge into scan_spool. * src/timer.c (struct timer_slot): Use reference counter instead of timer state
2020-04-16Rewrite as a multi-threaded program.Sergey Poznyakoff9
* NEWS: Update. * Version 3.1.95 * src/ (wydawca_SOURCES): Remove job.c (LDADD): Link with libpthread. * src/job.c: Remove. * src/config.c: Remove the wakeup-interval statement. * src/net.c (wydawca_listener): Rewrite as a thread function wy_thr_listen. * src/timer.c (timer_get): Use thread-specific storage. (timer_get_count): Remove. * src/triplet.c: Rewrite using multi-thread model. * src/wydawca.c: Likewise. * src/wydawca.h: Update. * tests/ Update expected output. * tests/ Likewise. * tests/ Likewise. * tests/ Likewise. * tests/ Likewise. * tests/ Likewise. * tests/ Likewise. * tests/ Likewise. * tests/ Likewise. `
2020-04-15Use job scheduler when processing all spools.alpha-3.1.90Sergey Poznyakoff2
* src/job.c (job_printable): Improve job identification. (wydawca_scanner): Don't log statistics in single process mode. (job_queue_wait): New function. * src/net.c (wydawca_listener): Move the call to job_init to main. * src/process.c (scan_spool_unlocked): Enqueue the triplet. Don't call spool_commit_triplets * src/triplet.c (remove_triplet): Omit checks in dry-run mode. (triplet_processor,spool_commit_triplets) (count_collected_triplets): Remove. * src/wydawca.c (main): Call job_queue_wait if not daemon. * tests/ Update expected output. * tests/ Likewise.
2020-04-15Rewrite GPGME supportSergey Poznyakoff5
* src/ Remove pushd.c * src/gpg.c: Rewrite. * src/pushd.c: Remove. * src/triplet.c (remove_triplet): Release the gpgme context. * src/wydawca.h: Include gpgme.h (struct wy_triplet): New member: gpgme_ctx; (triplet_gpgme_ctx_release): New proto. * tests/pushck.c: Remove. * tests/ Remove. * tests/ Remove pushck * tests/.gitignore: Likewise. * tests/ Remove pushdir test.
2020-04-15When processing spool requests, handle each completed triplet in spool.Sergey Poznyakoff4
Previously wydawca used to take optional second parameter - a list of submitter UIDs. If given this list, it would process only those triplets that had been uploaded by one of these UIDs. This proved to be unnecessary. The same change is applied to the notification protocol. Only the spool name is required. The second word in the request (user name) is now silently ignored. * src/wydawca.h (struct wy_triplet): Remove const qualifier from the spool member. Remove jq_prev and jq_next pointers. (struct job_spool_id): Remove. (job_schedule_spool): Change signature. * src/job.c (struct job): Replace job_spool with a pointer to spool. (triplet_jq_unlink,jq_clear): Remove. (job_printable): Change formatting of JOB_SPOOL jobs. (job_locate): Update. (wydawca_scanner): Update. * src/net.c (handle_connection): Ignore second word in the request. * src/process.c (spool_add_new_file): Change signature. UIDs are no longer needed. Return a pointer to the affected triplet. (scan_spool): Change signature. * src/triplet.c (register_file): Return pointer to the affected triplet. (check_triplet_state): Remove the noauth parameter. (triplet_enqueue): New function. (triplet_commit): New function. (spool_commit_triplets): Remove the tplist parameter. Process all complete triplets in the spool. (link_processable_triplets): Remove. * src/verify.c (verify_directive_file): Remove the noauth parameter. * src/watcher.c (process_event): Enqueue created triplets. * src/wydawca.c (main): Don't take any UID arguments. * tests/ The version statement is printed once. Update the expected output. * tests/ Likewise. * tests/ Likewise. * tests/ Likewise.
2020-04-14testsuite: pass exactly 1 argument to the readlink utilitySergey Poznyakoff3
2020-04-14testsuite: test whether unattended uploads are processed at daemon start upSergey Poznyakoff6
2020-04-13Rewrite diskio function so as not to assume any particular cwdSergey Poznyakoff12
* src/backup.c (get_backup_suffix) (find_backup_file_name): Get directory descriptor as first argument. * src/diskio.c: Rewrite using *at() functions. * src/gpg.c (rmdir_r): Silently skip ENOENT. (verify_detached_signature): push_dir/pop_dir. * src/triplet.c: Don't change to spool->source_dir. Underlying functions don't assume any specific cwd. * src/wydawca.h (find_backup_file_name) (create_hierarchy): Change signatures. All uses changed. * tests/ Add new tests. * tests/ Likewise. (AT_WYDAWCA_DAEMON): Take additional argument. * tests/ New test. * tests/ New test. * tests/ New test. * tests/ New test. * tests/ New test. * tests/dist/rmsymlink.directive.asc: New directive file. * tests/dist/symlink.directive.asc: New directive file.
2020-04-13Fix triplet processing in daemon mode.Sergey Poznyakoff20
* src/watcher.c (fopenat_ro): New function. * src/verify.c (fill_project_name): Use fopenat_ro. * src/gpg.c (recursive_rmdir): return silently if the directory does not exist. (verify_directive_signature): Use fopenat_ro. * src/job.c: Change state definitions from bitmask to enum. * src/triplet.c (triplet_processor): A pointer to the spool is passed in proc_data. Process only triplets with this spool. (triplet_processor): Modify accordingly. Facilitate writing tests for daemon mode. * src/wydawca.c (cron_option,daemon_mode): Remove. (wy_mode, wy_mode_option): New variables. (main): Use wy_mode to determine operating mode. * src/wydawca.h (daemon_mode): Remove extern. (wy_mode): New extern. * src/cmdline.opt: New option --daemon. * src/config.c: Change handling of the "daemon" statement. * src/net.c: Test hook: if WYDAWCA_NOTIFY_PARENT=1 send SIGUSR1 to parent after setting up the listener. * doc/wydawca.texi: Describe the --daemon option. Testsuite: 1. Place source and destination directories in the working directory for each particular test. Thus the spool cleanup function becomes unnecessary. 2. Add tests for wydawca daemon mode (inotify). * (WY_INOTIFY): New substitution variable for use in testsuite. * tests/wyasync.c: New source. Auxiliary program to test wydawca daemon mode. * tests/wyinit.c: New source. Extract source and destination directory names from the wydawca configuration file and create missing directories. * tests/ Build wyasync and wyinit. (TESTSUITE_AT): Add * tests/ (WY_INOTIFY): New variable. (wydawca_init_testdirs): Remove. (wydawca_clean_testdirs): Remove. (wydawca_config): Call wyinit to initialize spools and destinatiuon directories. (wydawca_upload): Change source directory. * tests/etc/mailstats.cfin: Put mail.out in CWD. * tests/etc/notify.cfin: Likewise. * tests/etc/wydawca.cfin: Add pidfile statement in case wydawca is run as daemon. Place all source and destination directories in CWD. * tests/ (AT_WYDAWCA_DAEMON): New macro. * tests/ New test. * tests/ Update. * tests/ Update. * tests/ Update. * tests/ Update. * tests/ Update. * tests/ Update. * tests/ Update. * tests/ Update. * tests/ Update. * tests/ Update.
2020-04-10Change indentation to improve readability.Sergey Poznyakoff3
2020-04-10Avoid unnecessary directory changes.Sergey Poznyakoff3
* src/config.c (cb_spool): Initialize spool->source_fd. * src/process.c (spool_add_new_file): Remove. (spool_cwd_add_new_file): Rename to spool_add_new_file. Use fstatat instead of stat. (scan_spool_unlocked): Don't change to spool->source_dir. * src/triplet.c (remove_triplet): Don't change cwd. Use fstatat to check for existence and unlinkat to remove the file. (spool_commit_triplets): Change to the spool source directory here. * src/wydawca.h: Define O_SEARCH to 0 if not defined. (struct spool): New member source_fd. * tests/ Update expected output. * tests/ Likewise. * tests/ Likewise.
2020-04-09Change configuration file name to wydawca.confSergey Poznyakoff15
Configuration files in the testsuite use the ".cf" suffix.
2020-03-13Version 3.1release-3.1Sergey Poznyakoff26
2020-03-13Fix .gitignore filesSergey Poznyakoff1
2020-03-13Fix the push/pop dir test.Sergey Poznyakoff3
The test failed on machines where $(pwd -P) != $(pwd -L). * tests/ Add cwdrepl.c * tests/cwdrepl.c: New file. * tests/ Use cwdrepl to filter the output.
2019-07-24Use wordsplit to expand variables in strings.Sergey Poznyakoff1
* NEWS: Raise version number. * Link wydawca.h to include/wydawca Raise version number * doc/wydawca.texi: Document changes. * etc/wydawca.rc: Fix the syntax. * grecs: Upgrace. * include/wydawca/wydawca.h (wy_vlog): New proto. (wy_log, wy_dbg): Format is const char *. (wy_triplet_t): Change typedef. (wy_metadef): Remove struct. (wy_vardef): New struct. (wy_triplet_expand_param) (wy_expand_copy): New protos. * modules/logstat/mod_logstat.c: Update. * modules/mailutils/ (AM_CPPFLAGS): Modify, * modules/mailutils/mod_mailutils.c: Update. * src/ (wydawca_SOURCES): Remove meta.c * src/dictionary.c: Fix comment. * src/directive.c (directive_get_value): Triplet pointer is const. * src/meta.c: Remove. * src/timer.c: (timer_fill_meta) (timer_free_meta): Remove. * src/triplet.c: Use wordsplit for expansions. * src/wydawca.c (wy_vlog): New function. (wy_stat_expansion): New function. * src/wydawca.h: Remove metadef protos. * tests/etc/notify.rcin: Update variable reference syntax.
2019-07-22Finish mod_logstat implementation. Document it.Sergey Poznyakoff1
* doc/wydawca.texi: Document mod_logstat. * include/wydawca/wydawca.h (wy_ev_statistics): Rename to wy_ev_finish. All uses changed. (wydawca_stat): New enum (from src/wydawca.h) (WY_STAT_MASK,WY_STAT_MASK_NONE) (WY_STAT_MASK_ALL): New macros. All uses changed. * modules/logstat/mod_logstat.c (stat_mask): Default to WY_STAT_MASK_ALL. (wy_notify): Provide default output.
2019-07-20Create backup storage directories.Sergey Poznyakoff2
Any spool directories are actually created only if create-directories yes; appears in the configuration file. The global directory-mode and directory-owner statements provide global defaults for the directory metadata. These two keywords can also appear within a spool.archive block. * src/backup.c (split_filename): Change to extern. * src/config.c: Global directory-mode and directory-owner statements. New global statement create-directories. and directory-owner statements. (cb_user,cb_supp_groups): Set wydawca_runas. (create_spool_dir): Don't mkdir unless create-directories was set. Honor wy_dry_run. Don't bail out on EPERM wheb uid is not 0. (create_spool_dirs): Compute effective metadata. Create archive directories. * src/diskio.c (create_hierarchy): Fix stack overflow if baselen==0. * src/wydawca.c (wydawca_runas): New global. (main): Intitialize wydawca_uid and wydawca_gid to current values. Run wydawca_userprivs only if wydawca_runas is set. * src/wydawca.h (archive_descr) <metadata>: New member. (wydawca_runas): New extern. * tests/etc/wydawca.rcin: Add create-directories statement. * tests/ Fix expected output.
2019-07-16Fix testsuite when run as rootSergey Poznyakoff11
2019-07-16More fixes in testsuiteSergey Poznyakoff1
* tests/ (wydawca_expandmeta): Use -e option.
2019-07-16Follow-up to the previous commitSergey Poznyakoff1
* tests/ Replace a left-over usage of @USER@.
2019-07-16Testsuite fixesSergey Poznyakoff2
* tests/ Uploader name is fixed. Remove erroneous use of @USER@. * tests/ Likewise.
2019-07-15Switch to grecs eb66a000Sergey Poznyakoff6
2019-07-15Version 2.99.92Sergey Poznyakoff29
2017-11-11Fix build with mailutils 3.4Sergey Poznyakoff11
* (ACLOCAL_AMFLAGS): Add am. * NEWS: Update. * am/mailutils.m4: New file. A fixed version of upstream mailutils.m4 * Require mailutils 3.3. Raise patchlevel. * tests/nullmail.c: New file. * tests/.gitignore: Add nullmail * tests/ Build nullmail * tests/etc/nullmail: Remove * tests/etc/ Remove nullmail script. * tests/ (WY_TESTDIR): New variable. * tests/ Use new nullmail tool. Update expected output. * tests/ Likewise. * tests/ Likewise. * tests/etc/mailstats.rcin: Fix mailer command line. * tests/etc/notify.rcin: Likewise.
2017-01-02Happy GNU YearSergey Poznyakoff27
2014-06-13Bugfixes.Sergey Poznyakoff1
* modules/mailutils/mod_mailutils.c (wy_config): Initialize allocated struct mailevt with 0s. * src/module.c (conf_notification_modules): Avoid coredump if np->modnode == NULL. * grecs: Upgrade. * tests/ Add a unique keyword.
2013-03-12Namespace normalization (3)Sergey Poznyakoff12
Use WY_ prefix for configuration macros & variables.
2013-03-12Raise version number to 2.99.90Sergey Poznyakoff1
2013-03-12Namespace normalization (2). Provide installable headers.Sergey Poznyakoff1
* (SUBDIRS): Add include. * Build include/*/Makefile Set-up grecs as a shared convenience library. Install its headers. * include/ New file. * include/wydawca/ New file. * include/wydawca/cfg.h: New file. * include/wydawca/wydawca.h: New file. * modules/mailutils/ (AM_CPPFLAGS): Add include/ * src/ (LDADD): Use @GRECS_LDADD@ (AM_CPPFLAGS): Add include/. * tests/ Likewise. * src/wydawca.h: Include wydawca/wydawca.h. (__cat2__, __cat3__): Move to installable header and rename. (struct wy_user): Move to installable header. (struct file_triplet): Rename to wy_triplet. All uses changed. (enum notification_event): Rename to wy_event and move to installable header. (struct metadef): Rename to wy_metadef and move to installable header. (dry_run_mode): Rename to wy_dry_run and move to installable header. (wydawca_gpg_homedir): Rename to wy_gpg_homedir and move to installable header. (wy_version, wy_debug_level, wy_log_to_stderr) (wy_log_facility, wy_syslog_tag) (wy_log,wy_dbg): Move to installable header. * modules/mailutils/mod_mailutils.c: Update. * src/cmdline.opt * src/config.c * src/directive.c * src/diskio.c * src/event.c * src/gpg.c * src/job.c * src/meta.c * src/module.c * src/null.c * src/timer.c * src/triplet.c * src/verify.c * src/vtab.c * src/watcher.c * src/wydawca.c
2013-03-12Enable notification tests conditionally.Sergey Poznyakoff5
The tests are enabled only if the mailutils module is built. * (WD_MAILUTILS): New subst variable. * tests/ (WD_MAILUTILS): New variable. * tests/ (AT_MAILUTILS_PREREQ): New macro. * tests/ Skip the test if mailutils is not configured. * tests/ Likewise. * tests/ Likewise. * modules/mailutils/mod_mailutils.c (get_uploader_email): Simplify the signature. (expand_email_admin,expand_email_owner): Make static. * src/wydawca.h (expand_email_admin,expand_email_owner): Remove protos.
2013-03-11Follow up to 87602f54.Sergey Poznyakoff9
Fix minor bugs. Update the testsuite. All tests pass now. * modules/mailutils/mod_mailutils.c (cb_statistics): Remove. Use wy_cb_statistics. (expand_email_admin, expand_email_owner): Add missing functions. * src/config.c (wy_cb_statistics): New function. (wydawca_kw): Restore "statistics" statement. * src/dictionary.c (dictionary_lookup): Fix debug levels. * src/wydawca.h (wy_cb_statistics): New proto. * tests/ (wydawca_expandmeta): Expand @WD_MODDIR@ * tests/ Create notify.rc from notify.rcin * tests/ Likewise. * tests/ Likewise. * tests/ Fix the expected output. * tests/etc/mailstats.rc: Rename to tests/etc/mailstats.rcin. * tests/etc/notify.rc: Rename to tests/etc/notify.rcin. * tests/etc/ Update. * tests/etc/wydawca.rcin: Update to the new syntax.
2013-02-26Introduce loadable modules.Sergey Poznyakoff1
* .gitignore: Update. * Require libtool Require Grecs tree-api. * Incorporate libtool * bootstrap: Create m4 if it does not exist. * doc/ Use texi2html * grecs: Upgrade * src/module.c: New file. * src/ (wydawca_SOURCES): Add module.c * src/config.c: Switch callbacks to tree-api. Add statements for working with modules: module-load-path, module-prepend-load-path and module in the global scope and module and module-config in notify-event blocks. * src/mail.c (do_notify): Call module_notify if a module is configured. * src/tcpwrap.c: Switch callbacks to tree-api. * src/wydawca.c (main): Load modules. * src/wydawca.h (notification) <modname> <modcfg,modnode>: New members. (module): New struct. (cb_module,modules_load,module_notify): New functions. (module_load_path) (module_prepend_load_path): New globals.
2012-12-29Use AM_CPPFLAGS instead of the INCLUDES in Makefiles.Sergey Poznyakoff1
2012-05-27Bugfix in testsuite.Sergey Poznyakoff2
* tests/ (AT_SORT_PREREQ): New macro. * tests/ Avoid dependency on the sort order.

Return to:

Send suggestions and report system problems to the System administrator.