From 1ca9f5074196f7fa459367956bcf6d4239b47634 Mon Sep 17 00:00:00 2001 From: Phil Pennock Date: Fri, 11 May 2012 06:21:17 -0400 Subject: [PATCH] Testing for -bw mode --- test/confs/0564 | 18 ++++++ test/log/0564 | 2 + test/msglog/0564.10HmaX-0005vi-00 | 1 + test/runtest | 91 ++++++++++++++++++++++++++++--- test/scripts/0000-Basic/0564 | 25 +++++++++ test/stdout/0564 | 29 ++++++++++ 6 files changed, 158 insertions(+), 8 deletions(-) create mode 100644 test/confs/0564 create mode 100644 test/log/0564 create mode 100644 test/msglog/0564.10HmaX-0005vi-00 create mode 100644 test/scripts/0000-Basic/0564 create mode 100644 test/stdout/0564 diff --git a/test/confs/0564 b/test/confs/0564 new file mode 100644 index 000000000..e10445be7 --- /dev/null +++ b/test/confs/0564 @@ -0,0 +1,18 @@ +# Exim test configuration 0564 + +exim_path = EXIM_PATH +host_lookup_order = bydns +rfc1413_query_timeout = 0s +spool_directory = DIR/spool +log_file_path = DIR/spool/log/%slog +gecos_pattern = "" +gecos_name = CALLER_NAME + +# ----- Main settings ----- + +acl_smtp_rcpt = accept +acl_smtp_data = accept + +queue_only + +# End diff --git a/test/log/0564 b/test/log/0564 new file mode 100644 index 000000000..dbaac4b92 --- /dev/null +++ b/test/log/0564 @@ -0,0 +1,2 @@ +1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, launched with listening socket, with no wait timeout +1999-03-02 09:44:33 10HmaX-0005vi-00 <= userx@test.ex H=(abcd) [127.0.0.1] P=esmtp S=sss diff --git a/test/msglog/0564.10HmaX-0005vi-00 b/test/msglog/0564.10HmaX-0005vi-00 new file mode 100644 index 000000000..3b44e8802 --- /dev/null +++ b/test/msglog/0564.10HmaX-0005vi-00 @@ -0,0 +1 @@ +1999-03-02 09:44:33 Received from userx@test.ex H=(abcd) [127.0.0.1] P=esmtp S=sss diff --git a/test/runtest b/test/runtest index 8f5d9b60c..2eb714e8a 100755 --- a/test/runtest +++ b/test/runtest @@ -21,7 +21,7 @@ use Socket; # Start by initializing some global variables -$testversion = "4.72 (02-Jun-10)"; +$testversion = "4.78 (08-May-12)"; $cf = "bin/cf -exact"; $cr = "\r"; @@ -118,6 +118,12 @@ s?\bV6NET:?$parm_ipv6_test_net:?g; } +################################################## +# Any state to be preserved across tests # +################################################## + +my $TEST_STATE = {}; + ################################################## # Subroutine to tidy up and exit # @@ -140,6 +146,13 @@ my($spool); # than SIGTERM to stop it outputting "Terminated" to the terminal when not in # the background. +if (exists $TEST_STATE->{exim_pid}) + { + $pid = $TEST_STATE->{exim_pid}; + print "Tidyup: killing wait-mode daemon pid=$pid\n"; + system("sudo kill -SIGINT $pid"); + } + if (opendir(DIR, "spool")) { my(@spools) = sort readdir(DIR); @@ -1360,17 +1373,21 @@ system("$cmd"); # reference to the subtest number, holding previous value # reference to the expected return code value # reference to where to put the command name (for messages) +# auxilliary information returned from a previous run # # Returns: 0 the commmand was executed inline, no subprocess was run # 1 a non-exim command was run and waited for # 2 an exim command was run and waited for # 3 a command was run and not waited for (daemon, server, exim_lock) # 4 EOF was encountered after an initial return code line +# Optionally alse a second parameter, a hash-ref, with auxilliary information: +# exim_pid: pid of a run process sub run_command{ my($testno) = $_[0]; my($subtestref) = $_[1]; my($commandnameref) = $_[3]; +my($aux_info) = $_[4]; my($yield) = 1; if (/^(\d+)\s*$/) # Handle unusual return code @@ -1541,11 +1558,19 @@ if (/^gnutls/) if (/^killdaemon/) { - $pid = `cat $parm_cwd/spool/exim-daemon.*`; + my $return_extra = {}; + if (exists $aux_info->{exim_pid}) + { + $pid = $aux_info->{exim_pid}; + $return_extra->{exim_pid} = undef; + print ">> killdaemon: recovered pid $pid\n" if $debug; + } else { + $pid = `cat $parm_cwd/spool/exim-daemon.*`; + } run_system("sudo /bin/kill -SIGINT $pid"); close DAEMONCMD; # Waits for process run_system("sudo /bin/rm -f spool/exim-daemon.*"); - return 1; + return (1, $return_extra); } @@ -1816,6 +1841,36 @@ elsif (/^([A-Z_]+=\S+\s+)?(\d+)?\s*(sudo\s+)?exim(_\S+)?\s+(.*)$/) select(undef, undef, undef, 0.3); # Let the daemon get going return 3; # Don't wait } + elsif ($cmd =~ /\s-DSERVER=wait:(\d+)\s/) + { + my $listen_port = $1; + if ($debug) { printf ">> wait-mode daemon: $cmd\n"; } + run_system("sudo mkdir spool/log 2>/dev/null"); + run_system("sudo chown $parm_eximuser:$parm_eximgroup spool/log"); + + my ($s_ip,$s_port) = ('127.0.0.1', $listen_port); + my $sin = sockaddr_in($s_port, inet_aton($s_ip)) + or die "** Failed packing $s_ip:$s_port\n"; + socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp')) + or die "** Unable to open socket $s_ip:$s_port: $!\n"; + setsockopt(SOCK, SOL_SOCKET, SO_REUSEADDR, 1) + or die "** Unable to setsockopt(SO_REUSEADDR): $!\n"; + bind(SOCK, $sin) + or die "** Unable to bind socket ($s_port): $!\n"; + listen(SOCK, 5); + my $pid = fork(); + if (not defined $pid) { die "** fork failed: $!\n" } + if (not $pid) { + close(STDIN); + open(STDIN, "<&", SOCK) or die "** dup sock to stdin failed: $!\n"; + print "[$$]>> ${cmd}-server\n" if ($debug); + exec "exec ${cmd}-server"; + exit(1); + } + while (