#! /usr/bin/perl -w
-# $Cambridge: exim/test/runtest,v 1.1 2006/02/06 16:07:10 ph10 Exp $
+# $Cambridge: exim/test/runtest,v 1.7 2006/04/20 14:11:29 ph10 Exp $
###############################################################################
# This is the controlling script for the "new" test suite for Exim. It should #
# Start by initializing some global variables
-$testversion = "4.61 (06-Feb-06)";
+$testversion = "4.62 (20-Apr-06)";
$cf = "bin/cf";
$cr = "\r";
$have_ipv4 = 1;
$have_ipv6 = 1;
+$have_largefiles = 0;
$test_start = 1;
$test_end = $test_top = 8999;
# Date/time in mbx mailbox files
s/\d\d-\w\w\w-\d\d\d\d\s\d\d:\d\d:\d\d\s[-+]\d\d\d\d,/06-Sep-1999 15:52:48 +0100,/gx;
- # Date/time in debugging output for writing retry records
+ # Dates/times in debugging output for writing retry records
if (/^ first failed=(\d+) last try=(\d+) next try=(\d+) (.*)$/)
{
my($next) = $3 - $2;
$_ = " first failed=dddd last try=dddd next try=+$next $4\n";
}
+ s/^now=\d+ received_time=\d+ diff=\d+ timeout=(\d+)/now=tttt received_time=tttt diff=tttt timeout=$1/;
# Time to retry may vary
- s/time to retry = -\d+/time to retry = -ddddd/;
- s/retry record exists: age=\d/retry record exists: age=d/;
+ s/time to retry = \S+/time to retry = tttt/;
+ s/retry record exists: age=\S+/retry record exists: age=ttt/;
+ s/failing_interval=\S+ message_age=\S+/failing_interval=ttt message_age=ttt/;
# Date/time in exim -bV output
s/\d\d-[A-Z][a-z]{2}-\d{4}\s\d\d:\d\d:\d\d/07-Mar-2000 12:21:52/g;
# Maildirsize data
if (/^\d+S,\d+C\s*$/)
{
- print MUNGED "dddS,dC\n";
+ print MUNGED;
while (<IN>)
{
last if !/^\d+ \d+\s*$/;
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.
/^Transports:/ ||
/^log selectors =/ ||
/^cwd=/ ||
- /^Fixed never_users:/
+ /^Fixed never_users:/ ||
+ /^Size of off_t:/
);
}
# 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");
# The "client" and "client-ssl" commands run a script-driven program that plays
# the part of an email client. We also have the availability of running Perl
-# for doing one-off special things.
+# for doing one-off special things. Note that all these commands expect stdin
+# data to be supplied.
if (/^client/ || /^client-ssl/ || /^(sudo\s+)?perl\b/)
{
{
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;
%parm_support = @temp;
}
- if (/^Lookups: (.*)/)
+ elsif (/^Lookups: (.*)/)
{
print;
@temp = split /(\s+)/, $1;
%parm_lookups = @temp;
}
- if (/^Authenticators: (.*)/)
+ elsif (/^Authenticators: (.*)/)
{
print;
@temp = split /(\s+)/, $1;
%parm_authenticators = @temp;
}
- if (/^Routers: (.*)/)
+ elsif (/^Routers: (.*)/)
{
print;
@temp = split /(\s+)/, $1;
# 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;
}
}
+ # 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 (<IN>)
{
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;
}
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";
}
}
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;