X-Git-Url: https://git.exim.org/users/jgh/exim.git/blobdiff_plain/fc43746d1c5e5712585556ef55a73f2e46db476b..c039ce6150634eb51a120406b5b7784823430eb5:/test/runtest diff --git a/test/runtest b/test/runtest index 0a95b70ec..7fe0e5dae 100755 --- a/test/runtest +++ b/test/runtest @@ -14,6 +14,7 @@ ############################################################################### #use strict; +#use 5.010; use Errno; use FileHandle; use Socket; @@ -82,13 +83,16 @@ $parm_port_d3 = 1227; # Additional for daemon $parm_port_d4 = 1228; # Additional for daemon # Manually set locale -$ENV{'LC_ALL'} = 'C'; +$ENV{LC_ALL} = 'C'; # In some environments USER does not exists, but we # need it for some test(s) $ENV{USER} = getpwuid($>) if not exists $ENV{USER}; +my ($parm_configure_owner, $parm_configure_group); +my ($parm_ipv4, $parm_ipv6); +my $parm_hostname; ############################################################################### ############################################################################### @@ -1024,6 +1028,12 @@ RESET_AFTER_EXTRA_LINE_READ: # Environment cleaning next if /\w+ in keep_environment\? (yes|no)/; + # Sizes vary with test hostname + s/^cmd buf flush \d+ bytes$/cmd buf flush ddd bytes/; + + # Spool filesystem free space changes on different systems. + s/^((?:spool|log) directory space =) -?\d+K (inodes =)\s*-?\d+/$1 nnnnnK $2 nnnnn/; + # When Exim is checking the size of directories for maildir, it uses # the check_dir_size() function to scan directories. Of course, the order # of the files that are obtained using readdir() varies from system to @@ -1059,6 +1069,7 @@ RESET_AFTER_EXTRA_LINE_READ: /^log selectors =/ || /^cwd=/ || /^Fixed never_users:/ || + /^Configure owner:/ || /^Size of off_t:/ ); @@ -1963,7 +1974,7 @@ if (/^sleep\s+(.*)$/) # Various Unix management commands are recognized if (/^(ln|ls|du|mkdir|mkfifo|touch|cp|cat)\s/ || - /^sudo\s(rmdir|rm|chown|chmod)\s/) + /^sudo\s(rmdir|rm|mv|chown|chmod)\s/) { run_system("$_ >>test-stdout 2>>test-stderr"); return 1; @@ -2336,7 +2347,7 @@ return $yield; # Ran command and waited ############################################################################### ############################################################################### -# Here beginneth the Main Program ... +# Here begins the Main Program ... ############################################################################### ############################################################################### @@ -2366,7 +2377,7 @@ umask 022; # Check for the "less" command # ################################################## -$more = "more" if system("which less >/dev/null 2>&1") != 0; +$more = 'more' if system('which less >/dev/null 2>&1') != 0; @@ -2375,7 +2386,7 @@ $more = "more" if system("which less >/dev/null 2>&1") != 0; ################################################## print "You need to have sudo access to root to run these tests. Checking ...\n"; -if (system("sudo date >/dev/null") != 0) +if (system('sudo true >/dev/null') != 0) { die "** Test for sudo failed: testing abandoned.\n"; } @@ -2555,9 +2566,22 @@ open(EXIMINFO, "$parm_exim -d -C $parm_cwd/test-config -DDIR=$parm_cwd " . die "** Cannot run $parm_exim: $!\n"; while() { + if (my ($version) = /^Exim version (\S+)/) { + my $git = `git describe --dirty=-XX --match 'exim-4*'`; + if (defined $git and $? == 0) { + chomp $git; + $version =~ s/^\d+\K\./_/; + $git =~ s/^exim-//i; + $git =~ s/.*-\Kg([[:xdigit:]]+(?:-XX)?)/$1/; + print "\n*** Version mismatch (Exim: $version vs. GIT: $git). ***\n\n" + if not $version eq $git; + } + } $parm_eximuser = $1 if /^exim_user = (.*)$/; $parm_eximgroup = $1 if /^exim_group = (.*)$/; $parm_trusted_config_list = $1 if /^TRUSTED_CONFIG_LIST:.*?"(.*?)"$/; + ($parm_configure_owner, $parm_configure_group) = ($1, $2) + if /^Configure owner:\s*(\d+):(\d+)/; print "$_" if /wrong owner/; } close(EXIMINFO); @@ -2609,6 +2633,14 @@ else die "Unable to check the TRUSTED_CONFIG_LIST, seems to be empty?\n"; } +die "CONFIGURE_OWNER ($parm_configure_owner) does not match the user invoking $0 ($>)\n" + if $parm_configure_owner != $>; + +die "CONFIGURE_GROUP ($parm_configure_group) does not match the group invoking $0 ($))\n" + if 0020 & (stat "$parm_cwd/test-config")[2] + and $parm_configure_group != $); + + open(EXIMINFO, "$parm_exim -d-all+transport -bV -C $parm_cwd/test-config -DDIR=$parm_cwd |") || die "** Cannot run $parm_exim: $!\n"; @@ -3007,38 +3039,29 @@ else # Find this host's IP addresses - there may be many, of course, but we keep # one of each type (IPv4 and IPv6). -$parm_ipv4 = ""; -$parm_ipv6 = ""; - -$local_ipv4 = ""; -$local_ipv6 = ""; - -open(IFCONFIG, "ifconfig -a|") || die "** Cannot run \"ifconfig\": $!\n"; -while (($parm_ipv4 eq "" || $parm_ipv6 eq "") && ($_ = )) +open(IFCONFIG, 'ip address|') # show *all*, addresses w/o label + or open(IFCONFIG, 'ifconfig -a|') # probably skips addresses w/o label + or die "** Cannot run 'ifconfig' or 'ip address': $!\n"; +while (not ($parm_ipv4 and $parm_ipv6) and defined($_ = )) { - my($ip); - if ($parm_ipv4 eq "" && - $_ =~ /^\s*inet(?:\saddr)?:?\s?(\d+\.\d+\.\d+\.\d+)\s/i) + if (not $parm_ipv4 and /^\s*inet(?:\saddr)?:?\s?(\d+\.\d+\.\d+\.\d+)(?:\/\d+)\s/i) { - $ip = $1; - next if ($ip =~ /^127\./ || $ip =~ /^10\./); - $parm_ipv4 = $ip; + next if $1 =~ /^(?:127|10)\./; + $parm_ipv4 = $1; } - if ($parm_ipv6 eq "" && - $_ =~ /^\s*inet6(?:\saddr)?:?\s?([abcdef\d:]+)/i) + if (not $parm_ipv6 and /^\s*inet6(?:\saddr)?:?\s?([abcdef\d:]+)(?:\/\d+)/i) { - $ip = $1; - next if ($ip eq "::1" || $ip =~ /^fe80/i); - $parm_ipv6 = $ip; + next if $1 eq '::1' or $1 =~ /^fe80/i; + $parm_ipv6 = $1; } } close(IFCONFIG); # Use private IP addresses if there are no public ones. -$parm_ipv4 = $local_ipv4 if ($parm_ipv4 eq ""); -$parm_ipv6 = $local_ipv6 if ($parm_ipv6 eq ""); +$parm_ipv4 = '172.10.10.1' if not defined $parm_ipv4; +$parm_ipv6 = 'fd0a:c2ea:abfa::1' if not defined $parm_ipv6; # If either type of IP address is missing, we need to set the value to # something other than empty, because that wrecks the substitutions. The value @@ -3048,7 +3071,7 @@ $parm_ipv6 = $local_ipv6 if ($parm_ipv6 eq ""); # of IPV4 or IPv6 can be simulated by command options, which force $have_ipv4 # and $have_ipv6 false. -if ($parm_ipv4 eq "") +if (not $parm_ipv4) { $have_ipv4 = 0; $parm_ipv4 = ""; @@ -3064,7 +3087,7 @@ else $parm_running{"IPv4"} = " "; } -if ($parm_ipv6 eq "") +if (not $parm_ipv6) { $have_ipv6 = 0; $parm_ipv6 = ""; @@ -3112,8 +3135,9 @@ if ($parm_ipv6 =~ /^[\da-f]/) # Find the host name, fully qualified. chomp($temp = `hostname`); +die "'hostname' didn't return anything\n" unless defined $temp and length $temp; $parm_hostname = (gethostbyname($temp))[0]; -$parm_hostname = "no.host.name.found" if $parm_hostname eq ""; +$parm_hostname = "no.host.name.found" unless defined $parm_hostname and length $parm_hostname; print "Hostname is $parm_hostname\n"; if ($parm_hostname !~ /\./)