#!/usr/bin/perl -T use lib '.'; use lib 't'; use SATest; sa_t_init("spamd_prefork_stress_3"); use Test::More; diag("NOTE: this test requires both 'run_spamd_prefork_stress_test' and 'run_long_tests' set to 'y'."); plan skip_all => "Spamd tests disabled" if $SKIP_SPAMD_TESTS; plan skip_all => "Long running tests disabled" unless conf_bool('run_long_tests'); plan skip_all => "Spamd prefork stress tests disabled" unless conf_bool('run_spamd_prefork_stress_test'); plan tests => 291; # --------------------------------------------------------------------------- tstlocalrules (' loadplugin myTestPlugin ../../data/testplugin.pm header PLUGIN_SLEEP eval:sleep_based_on_header() '); %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', ); my $tmpnum = 0; start_spamd("-L -m5"); ok ($spamd_pid > 1); srand ($$); print "srand: $$\n"; ok (spamcrun ("< data/spam/001", \&patterns_run_cb)); ok_all_patterns(); test_fg(); ok_all_patterns(); test_bg(); foreach $i (0 .. 5) { foreach $i (0 .. 20) { test_bg(); } test_fg(); ok_all_patterns(); test_fg(); ok_all_patterns(); test_fg(); ok_all_patterns(); test_fg(); ok_all_patterns(); } test_fg(); ok_all_patterns(); ok (stop_spamd()); sub test_fg { clear_pattern_counters(); my $secs = (int rand 5) + 1; my $tmpf = mk_mail($secs); ok (spamcrun ("<$tmpf", \&patterns_run_cb)); unlink $tmpf; clean_pending_unlinks(); } sub test_bg { my $secs = (int rand 5) + 1; my $tmpf = mk_mail($secs); ok (spamcrun_background ("<$tmpf", {})); push (@pending_unlinks, $tmpf); } sub mk_mail { my $secs = shift; my $tmpf = "log/tmp.$testname.$tmpnum"; $tmpnum++; open (IN, "$tmpf") or die "cannot write $tmpf"; print OUT "Sleep-Time: $secs\n"; while () { print OUT; } close OUT; close IN; return $tmpf; } sub clean_pending_unlinks { unlink @pending_unlinks; @pending_unlinks = (); }