X-Git-Url: https://git.exim.org/users/jgh/exim.git/blobdiff_plain/727071f81598850285bc4f6270a5bd9ad40c61ba..5263311db23897d50e9e8c4e370b2cbb530e7e36:/test/runtest diff --git a/test/runtest b/test/runtest index 2210cba3b..397ea474d 100755 --- a/test/runtest +++ b/test/runtest @@ -1,6 +1,6 @@ #! /usr/bin/perl -w -# $Cambridge: exim/test/runtest,v 1.3 2006/02/09 14:50:58 ph10 Exp $ +# $Cambridge: exim/test/runtest,v 1.10 2006/04/28 13:46:36 ph10 Exp $ ############################################################################### # This is the controlling script for the "new" test suite for Exim. It should # @@ -23,7 +23,7 @@ use Socket; # Start by initializing some global variables -$testversion = "4.61 (06-Feb-06)"; +$testversion = "4.62 (20-Apr-06)"; $cf = "bin/cf"; $cr = "\r"; @@ -36,6 +36,7 @@ $server_opts = ""; $have_ipv4 = 1; $have_ipv6 = 1; +$have_largefiles = 0; $test_start = 1; $test_end = $test_top = 8999; @@ -525,6 +526,8 @@ while() s/host\s\Q$parm_ipv6\E\s\[\Q$parm_ipv6\E\]/host ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6 [ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6]/; s/\b\Q$parm_ipv4\E\b/ip4.ip4.ip4.ip4/g; s/\b\Q$parm_ipv6\E\b/ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6/g; + s/\b\Q$parm_ipv4r\E\b/ip4-reverse/g; + s/\b\Q$parm_ipv6r\E\b/ip6-reverse/g; # ======== Test network IP addresses ======== @@ -612,9 +615,9 @@ while() s/\b\d+\.H\d+P\d+\b/dddddddddd.HddddddPddddd/; # Maildirsize data - if (/^\d+S,\d+C\s*$/) + while (/^\d+S,\d+C\s*$/) { - print MUNGED "dddS,dC\n"; + print MUNGED; while () { last if !/^\d+ \d+\s*$/; @@ -622,6 +625,7 @@ while() } last if !defined $_; } + last if !defined $_; # ======== Output from the "fd" program about open descriptors ======== @@ -647,9 +651,11 @@ while() if ($is_stdout) { - # Skip translate_ip_address in -bP output because it ain't always there + # Skip translate_ip_address and use_classresources in -bP output because + # they aren't always there. next if /translate_ip_address =/; + next if /use_classresources/; # In certain filter tests, remove initial filter lines because they just # clog up by repetition. @@ -788,7 +794,8 @@ while() /^Transports:/ || /^log selectors =/ || /^cwd=/ || - /^Fixed never_users:/ + /^Fixed never_users:/ || + /^Size of off_t:/ ); } @@ -1459,7 +1466,7 @@ if (/^sleep\s+(.*)$/) # Various Unix management commands are recognized -if (/^(ln|ls|du|mkdir|mkfifo|touch|cp)\s/ || +if (/^(ln|ls|du|mkdir|mkfifo|touch|cp|cat)\s/ || /^sudo (rmdir|rm|chown|chmod)\s/) { run_system("$_ >>test-stdout 2>>test-stderr"); @@ -1952,9 +1959,14 @@ while () { my(@temp); - if (/^Exim version/) { print; next; } + if (/^Exim version/) { print; } - if (/^Support for: (.*)/) + elsif (/^Size of off_t: (\d+)/) + { + $have_largefiles = 1 if $1 > 4; + } + + elsif (/^Support for: (.*)/) { print; @temp = split /(\s+)/, $1; @@ -1962,7 +1974,7 @@ while () %parm_support = @temp; } - if (/^Lookups: (.*)/) + elsif (/^Lookups: (.*)/) { print; @temp = split /(\s+)/, $1; @@ -1970,7 +1982,7 @@ while () %parm_lookups = @temp; } - if (/^Authenticators: (.*)/) + elsif (/^Authenticators: (.*)/) { print; @temp = split /(\s+)/, $1; @@ -1978,7 +1990,7 @@ while () %parm_authenticators = @temp; } - if (/^Routers: (.*)/) + elsif (/^Routers: (.*)/) { print; @temp = split /(\s+)/, $1; @@ -1990,7 +2002,7 @@ while () # that the basic transport name is set, and then the name with each of the # options. - if (/^Transports: (.*)/) + elsif (/^Transports: (.*)/) { print; @temp = split /(\s+)/, $1; @@ -2102,30 +2114,74 @@ if (defined $parm_support{'Content_Scanning'}) } } + # Read the ClamAV configuration file and find the socket interface. + if ($clamconf ne "") { + my $socket_domain; open(IN, "$clamconf") || die "\n** Unable to open $clamconf: $!\n"; while () { if (/^LocalSocket\s+(.*)/) { $parm_clamsocket = $1; + $socket_domain = AF_UNIX; last; } + if (/^TCPSocket\s+(\d+)/) + { + if (defined $parm_clamsocket) + { + $parm_clamsocket .= " $1"; + $socket_domain = AF_INET; + last; + } + else + { + $parm_clamsocket = " $1"; + } + } + elsif (/^TCPAddr\s+(\S+)/) + { + if (defined $parm_clamsocket) + { + $parm_clamsocket = $1 . $parm_clamsocket; + $socket_domain = AF_INET; + last; + } + else + { + $parm_clamsocket = $1; + } + } } close(IN); - if (-e $parm_clamsocket) + + if (defined $socket_domain) { print ":\n The clamd socket is $parm_clamsocket\n"; # This test for an active ClamAV is courtesy of Daniel Tiefnig. eval { - my $sun = sockaddr_un($parm_clamsocket) or die "** Failed packing '$parm_clamsocket'\n"; - socket(SOCK, AF_UNIX, SOCK_STREAM, 0) or die "** Unable to open socket '$parm_clamsocket'\n"; - + my $socket; + if ($socket_domain == AF_UNIX) + { + $socket = sockaddr_un($parm_clamsocket) or die "** Failed packing '$parm_clamsocket'\n"; + } + elsif ($socket_domain == AF_INET) + { + my ($ca_host, $ca_port) = split(/\s+/,$parm_clamsocket); + my $ca_hostent = gethostbyname($ca_host) or die "** Failed to get raw address for host '$ca_host'\n"; + $socket = sockaddr_in($ca_port, $ca_hostent) or die "** Failed packing '$parm_clamsocket'\n"; + } + else + { + 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"; local $SIG{ALRM} = sub { die "** Timeout while connecting to socket '$parm_clamsocket'\n"; }; alarm(5); - connect(SOCK, $sun) 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; @@ -2153,7 +2209,7 @@ if (defined $parm_support{'Content_Scanning'}) } else { - print ", but the socket for clamd does not exist\n"; + print ", but the socket for clamd could not be determined\n"; print "Assume ClamAV is not running\n"; } } @@ -2350,6 +2406,24 @@ else print "IPv4 address is $parm_ipv4\n"; print "IPv6 address is $parm_ipv6\n"; +# For munging test output, we need the reversed IP addresses. + +$parm_ipv4r = ($parm_ipv4 !~ /^\d/)? "" : + join(".", reverse(split /\./, $parm_ipv4)); + +$parm_ipv6r = ""; +if ($parm_ipv6 =~ /^[\da-f]/) + { + my(@comps) = split /:/, $parm_ipv6; + my(@nibbles); + foreach $comp (@comps) + { + push @nibbles, sprintf("%lx", hex($comp) >> 8); + push @nibbles, sprintf("%lx", hex($comp) & 0xff); + } + $parm_ipv6r = join(".", reverse(@nibbles)); + } + # Find the host name, fully qualified. chomp($temp = `hostname`); @@ -2505,12 +2579,25 @@ opendir(DIR, "scripts") || tests_exit(-1, "Failed to opendir(\"scripts\"): $!"); @test_dirs = sort readdir(DIR); closedir(DIR); +# Remove . and .. and CVS from the list. + +for ($i = 0; $i < @test_dirs; $i++) + { + my($d) = $test_dirs[$i]; + if ($d eq "." || $d eq ".." || $d eq "CVS") + { + splice @test_dirs, $i, 1; + $i--; + } + } + +# Scan for relevant tests + for ($i = 0; $i < @test_dirs; $i++) { my($testdir) = $test_dirs[$i]; my($wantthis) = 1; - next if $testdir eq "." || $testdir eq ".."; print ">>Checking $testdir\n" if $debug; # Skip this directory if the first test is equal or greater than the first @@ -2853,6 +2940,15 @@ foreach $test (@test_list) if (/^rmfiltertest/) { $rmfiltertest = 1; next; } if (/^sortlog/) { $sortlog = 1; next; } + if (/^need_largefiles/) + { + next if $have_largefiles; + print ">>> Large file support is needed for test $testno, but is not available: skipping\n"; + $docheck = 0; # don't check output + undef $_; # pretend EOF + last; + } + if (/^need_ipv4/) { next if $have_ipv4;