X-Git-Url: https://git.exim.org/users/heiko/exim.git/blobdiff_plain/1ca9f5074196f7fa459367956bcf6d4239b47634..1365611d62f130d0a096b322656b5b790628d2c7:/test/runtest diff --git a/test/runtest b/test/runtest index 2eb714e8a..5f77e6256 100755 --- a/test/runtest +++ b/test/runtest @@ -13,10 +13,12 @@ # Placed in the Exim CVS: 06 February 2006 # ############################################################################### +#use strict; require Cwd; use Errno; use FileHandle; use Socket; +use Time::Local; # Start by initializing some global variables @@ -209,14 +211,26 @@ return $newid; } -# This is used while munging the output from exim_dumpdb. We cheat by assuming -# that the date always the same, and just return the number of seconds since -# midnight. +# This is used while munging the output from exim_dumpdb. +# May go wrong across DST changes. sub date_seconds { my($day,$month,$year,$hour,$min,$sec) = $_[0] =~ /^(\d\d)-(\w\w\w)-(\d{4})\s(\d\d):(\d\d):(\d\d)/; -return $hour * 60 * 60 + $min * 60 + $sec; +my($mon); +if ($month =~ /Jan/) {$mon = 0;} +elsif($month =~ /Feb/) {$mon = 1;} +elsif($month =~ /Mar/) {$mon = 2;} +elsif($month =~ /Apr/) {$mon = 3;} +elsif($month =~ /May/) {$mon = 4;} +elsif($month =~ /Jun/) {$mon = 5;} +elsif($month =~ /Jul/) {$mon = 6;} +elsif($month =~ /Aug/) {$mon = 7;} +elsif($month =~ /Sep/) {$mon = 8;} +elsif($month =~ /Oct/) {$mon = 9;} +elsif($month =~ /Nov/) {$mon = 10;} +elsif($month =~ /Dec/) {$mon = 11;} +return timelocal($sec,$min,$hour,$day,$mon,$year); } @@ -1564,12 +1578,20 @@ if (/^killdaemon/) $pid = $aux_info->{exim_pid}; $return_extra->{exim_pid} = undef; print ">> killdaemon: recovered pid $pid\n" if $debug; + if ($pid) + { + run_system("sudo /bin/kill -SIGINT $pid"); + wait; + } } else { $pid = `cat $parm_cwd/spool/exim-daemon.*`; + if ($pid) + { + run_system("sudo /bin/kill -SIGINT $pid"); + close DAEMONCMD; # Waits for process + } } - run_system("sudo /bin/kill -SIGINT $pid"); - close DAEMONCMD; # Waits for process - run_system("sudo /bin/rm -f spool/exim-daemon.*"); + run_system("sudo /bin/rm -f spool/exim-daemon.*"); return (1, $return_extra); } @@ -1798,6 +1820,10 @@ elsif (/^([A-Z_]+=\S+\s+)?(\d+)?\s*(sudo\s+)?exim(_\S+)?\s+(.*)$/) my($i); for ($i = @msglist; $i > 0; $i--) { $args =~ s/\$msg$i/$msglist[$i-1]/g; } + if ( $args =~ /\$msg\d/ ) + { + tests_exit(-1, "Not enough messages in spool, for test $testno line $lineno\n"); + } } # If -d is specified in $optargs, remove it from $args; i.e. let @@ -1844,6 +1870,7 @@ elsif (/^([A-Z_]+=\S+\s+)?(\d+)?\s*(sudo\s+)?exim(_\S+)?\s+(.*)$/) elsif ($cmd =~ /\s-DSERVER=wait:(\d+)\s/) { my $listen_port = $1; + my $waitmode_sock = new FileHandle; 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"); @@ -1851,18 +1878,19 @@ elsif (/^([A-Z_]+=\S+\s+)?(\d+)?\s*(sudo\s+)?exim(_\S+)?\s+(.*)$/) 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')) + socket($waitmode_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) + setsockopt($waitmode_sock, SOL_SOCKET, SO_REUSEADDR, 1) or die "** Unable to setsockopt(SO_REUSEADDR): $!\n"; - bind(SOCK, $sin) + bind($waitmode_sock, $sin) or die "** Unable to bind socket ($s_port): $!\n"; - listen(SOCK, 5); + listen($waitmode_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"; + open(STDIN, "<&", $waitmode_sock) or die "** dup sock to stdin failed: $!\n"; + close($waitmode_sock); print "[$$]>> ${cmd}-server\n" if ($debug); exec "exec ${cmd}-server"; exit(1); @@ -2234,6 +2262,8 @@ unlink("$parm_cwd/test-config"); if (defined $parm_support{'Content_Scanning'}) { + my $sock = new FileHandle; + if (system("spamc -h 2>/dev/null >/dev/null") == 0) { print "The spamc command works:\n"; @@ -2250,23 +2280,23 @@ if (defined $parm_support{'Content_Scanning'}) { my $sin = sockaddr_in($sport, inet_aton($sint)) or die "** Failed packing $sint:$sport\n"; - socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp')) + socket($sock, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or die "** Unable to open socket $sint:$sport\n"; local $SIG{ALRM} = sub { die "** Timeout while connecting to socket $sint:$sport\n"; }; alarm(5); - connect(SOCK, $sin) + connect($sock, $sin) or die "** Unable to connect to socket $sint:$sport\n"; alarm(0); - select((select(SOCK), $| = 1)[0]); - print SOCK "bad command\r\n"; + select((select($sock), $| = 1)[0]); + print $sock "bad command\r\n"; $SIG{ALRM} = sub { die "** Timeout while reading from socket $sint:$sport\n"; }; alarm(10); - my $res = ; + my $res = <$sock>; alarm(0); $res =~ m|^SPAMD/| @@ -2377,18 +2407,18 @@ if (defined $parm_support{'Content_Scanning'}) { die "** Unknown socket domain '$socket_domain' (should not happen)\n"; } - socket(SOCK, $socket_domain, SOCK_STREAM, 0) or die "** Unable to open socket '$parm_clamsocket'\n"; + socket($sock, $socket_domain, SOCK_STREAM, 0) or die "** Unable to open socket '$parm_clamsocket'\n"; local $SIG{ALRM} = sub { die "** Timeout while connecting to socket '$parm_clamsocket'\n"; }; alarm(5); - connect(SOCK, $socket) or die "** Unable to connect to socket '$parm_clamsocket'\n"; + connect($sock, $socket) or die "** Unable to connect to socket '$parm_clamsocket'\n"; alarm(0); - my $ofh = select SOCK; $| = 1; select $ofh; - print SOCK "PING\n"; + my $ofh = select $sock; $| = 1; select $ofh; + print $sock "PING\n"; $SIG{ALRM} = sub { die "** Timeout while reading from socket '$parm_clamsocket'\n"; }; alarm(10); - my $res = ; + my $res = <$sock>; alarm(0); $res =~ /PONG/ or die "** Did not get PONG from socket '$parm_clamsocket'. It said: $res\n";