#!/usr/bin/perl # # Warning: do not run this test on a live server; it will kill your # spamd children ;) use lib '.'; use lib 't'; use SATest; sa_t_init("spamd_prefork_stress_2"); use Test; use constant TEST_ENABLED => conf_bool('run_long_tests'); our $RUN_THIS_TEST; my $pgrep; my $pkill; # require pkill and pgrep be installed to run this test BEGIN { $RUN_THIS_TEST = conf_bool('run_spamd_prefork_stress_test') && TEST_ENABLED; $pkill = locate_command("pkill"); $pgrep = locate_command("pgrep"); $RUN_THIS_TEST = 0 if !$pkill || !$pgrep; plan tests => ($SKIP_SPAMD_TESTS || !$RUN_THIS_TEST ? 0 : 14) }; exit if $SKIP_SPAMD_TESTS; print "NOTE: this test requires /usr/bin/pkill, /usr/bin/pgrep, and both\n". "'run_spamd_prefork_stress_test' and 'run_long_tests' set to 'y'.\n"; exit unless $RUN_THIS_TEST; system($pgrep, "spamd child"); if ($? >> 8 == 0) { die "not running test: existing 'spamd child' processes would be killed.\n"; } # --------------------------------------------------------------------------- %patterns = ( q{ X-Spam-Status: Yes, score=}, 'status', q{ X-Spam-Flag: YES}, 'flag', q{ X-Spam-Level: **********}, 'stars', q{ TEST_ENDSNUMS}, 'endsinnums', q{ TEST_NOREALNAME}, 'noreal', ); start_spamd("-L -m1 --round-robin"); ok ($spamd_pid > 1); ok (spamcrun ("< data/spam/001", \&patterns_run_cb)); ok_all_patterns(); my $i = 0; for ($i = 0; $i < 1999; $i++) { print "killing [$i]\n"; system ($pkill, "-f", "spamd child"); } sleep 1; # give it time to start a new one clear_pattern_counters(); ok (spamcrun ("< data/spam/001", \&patterns_run_cb)); ok_all_patterns(); ok (stop_spamd());