X-Git-Url: https://git.exim.org/users/jgh/exim.git/blobdiff_plain/5c03403d88afcde2bb3f543296b0fca6f05c9f2c..179ed8c31eb8c7f767ec0ef5e2856066d366515f:/test/runtest diff --git a/test/runtest b/test/runtest index a93552b10..9f6569128 100755 --- a/test/runtest +++ b/test/runtest @@ -112,7 +112,7 @@ $ENV{LC_ALL} = 'C'; $ENV{USER} = getpwuid($>) if not exists $ENV{USER}; my ($parm_configure_owner, $parm_configure_group); -my ($parm_ipv4, $parm_ipv6); +my ($parm_ipv4, $parm_ipv6, $parm_ipv6_stripped); my $parm_hostname; ############################################################################### @@ -758,6 +758,10 @@ RESET_AFTER_EXTRA_LINE_READ: s/waiting for children of \d+/waiting for children of pppp/; s/waiting for (\S+) \(\d+\)/waiting for $1 (pppp)/; + # Most builds are without HAVE_LOCAL_SCAN + next if /^calling local_scan\(\); timeout=300$/; + next if /^local_scan\(\) returned 0 NULL$/; + # ======== Port numbers ======== # Incoming port numbers may vary, but not in daemon startup line. @@ -794,6 +798,7 @@ RESET_AFTER_EXTRA_LINE_READ: 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/(^|\W)\K\Q$parm_ipv6\E/ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6/g; + s/(^|\W)\K\Q$parm_ipv6_stripped\E/ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6/g; s/\b\Q$parm_ipv4r\E\b/ip4-reverse/g; s/(^|\W)\K\Q$parm_ipv6r\E/ip6-reverse/g; s/^(\s+host\s\S+\s+\[\S+\]) +$/$1 /; @@ -912,6 +917,11 @@ RESET_AFTER_EXTRA_LINE_READ: last if !defined $_; + # SRS timestamps and signatures vary by hostname and from run to run + + s/SRS0=....=..=[^=]+=[^@]+\@test.ex/SRS0=ZZZZ=YY=the.local.host.name=CALLER\@test.ex/; + + # ======== Output from the "fd" program about open descriptors ======== # The statuses seem to be different on different operating systems, but # at least we'll still be checking the number of open fd's. @@ -3405,17 +3415,22 @@ open(IFCONFIG, '-|', (grep { -x "$_/ip" } split /:/, $ENV{PATH}) ? 'ip address' or die "** Cannot run 'ip address' or 'ifconfig -a'\n"; while (not ($parm_ipv4 and $parm_ipv6) and defined($_ = )) { + if (/^(?:[0-9]+: )?([a-z0-9]+): /) { $ifname = $1; } + if (not $parm_ipv4 and /^\s*inet(?:\saddr)?:?\s?(\d+\.\d+\.\d+\.\d+)(?:\/\d+)?\s/i) { - next if $1 =~ /^(?:127|10\.250)\./; - next if $1 eq '0.0.0.0'; + # It would ne nice to be able to vary the /16 used for manyhome; we could take + # an option to runtest used here - but we'd also have to pass it on to fakens. + # Possibly an environment variable? + next if $1 eq '0.0.0.0' or $1 =~ /^(?:127|10\.250)\./; $parm_ipv4 = $1; } if (not $parm_ipv6 and /^\s*inet6(?:\saddr)?:?\s?([abcdef\d:]+)(?:%[^ \/]+)?(?:\/\d+)?/i) { - next if $1 eq '::1' or $1 =~ /^fe80/i; + next if $1 eq '::' or $1 eq '::1' or $1 =~ /^ff00/i or $1 =~ /^fe80::1/i; $parm_ipv6 = $1; + if ($1 =~ /^fe80/i) { $parm_ipv6 .= '%' . $ifname; } } } close(IFCONFIG); @@ -3473,6 +3488,8 @@ else print "IPv4 address is $parm_ipv4\n"; print "IPv6 address is $parm_ipv6\n"; $parm_ipv6 =~ /^[^%\/]*/; +# drop any %scope from the ipv6, for some uses +($parm_ipv6_stripped = $parm_ipv6) =~ s/%.*//g; # For munging test output, we need the reversed IP addresses. @@ -3482,7 +3499,7 @@ $parm_ipv4r = ($parm_ipv4 !~ /^\d/)? '' : $parm_ipv6r = $parm_ipv6; # Appropriate if not in use if ($parm_ipv6 =~ /^[\da-f]/) { - my(@comps) = split /:/, $parm_ipv6; + my(@comps) = split /:/, $parm_ipv6_stripped; my(@nibbles); foreach $comp (@comps) { @@ -3903,7 +3920,7 @@ if ($have_ipv4 || $have_ipv6) "; for queries that it cannot answer\n\n" . "PASS ON NOT FOUND\n\n"; print OUT "$shortname A $parm_ipv4\n" if $have_ipv4; - print OUT "$shortname AAAA $parm_ipv6\n" if $have_ipv6; + print OUT "$shortname AAAA $parm_ipv6_stripped\n" if $have_ipv6; print OUT "\n; End\n"; close(OUT); } @@ -3911,28 +3928,39 @@ if ($have_ipv4 || $have_ipv6) if ($have_ipv4 && $parm_ipv4 ne "127.0.0.1") { my(@components) = $parm_ipv4 =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)/; - open(OUT, ">$parm_cwd/dnszones/db.ip4.$components[0]") || - tests_exit(-1, - "Failed to open $parm_cwd/dnszones/db.ip4.$components[0]: $!"); - print OUT "; This is a dynamically constructed fake zone file.\n" . - "; The zone is $components[0].in-addr.arpa.\n\n" . - "$components[3].$components[2].$components[1] PTR $parm_hostname.\n\n" . - "; End\n"; - close(OUT); + + if ($components[0]=='10') + { + open(OUT, ">>$parm_cwd/dnszones/db.ip4.$components[0]") || + tests_exit(-1, "Failed to open $parm_cwd/dnszones/db.ip4.$components[0]: $!"); + print OUT "$components[3].$components[2].$components[1] PTR $parm_hostname.\n\n"; + close(OUT); + } + else + { + open(OUT, ">$parm_cwd/dnszones/db.ip4.$components[0]") || + tests_exit(-1, + "Failed to open $parm_cwd/dnszones/db.ip4.$components[0]: $!"); + print OUT "; This is a dynamically constructed fake zone file.\n" . + "; The zone is $components[0].in-addr.arpa.\n\n" . + "$components[3].$components[2].$components[1] PTR $parm_hostname.\n\n" . + "; End\n"; + close(OUT); + } } -if ($have_ipv6 && $parm_ipv6 ne "::1") +if ($have_ipv6 && $parm_ipv6_stripped ne "::1") { - my($exp_v6) = $parm_ipv6; + my($exp_v6) = $parm_ipv6_stripped; $exp_v6 =~ s/[^:]//g; - if ( $parm_ipv6 =~ /^([^:].+)::$/ ) { + if ( $parm_ipv6_stripped =~ /^([^:].+)::$/ ) { $exp_v6 = $1 . ':0' x (9-length($exp_v6)); - } elsif ( $parm_ipv6 =~ /^(.+)::(.+)$/ ) { + } elsif ( $parm_ipv6_stripped =~ /^(.+)::(.+)$/ ) { $exp_v6 = $1 . ':0' x (8-length($exp_v6)) . ':' . $2; - } elsif ( $parm_ipv6 =~ /^::(.+[^:])$/ ) { + } elsif ( $parm_ipv6_stripped =~ /^::(.+[^:])$/ ) { $exp_v6 = '0:' x (9-length($exp_v6)) . $1; } else { - $exp_v6 = $parm_ipv6; + $exp_v6 = $parm_ipv6_stripped; } my(@components) = split /:/, $exp_v6; my(@nibbles) = reverse (split /\s*/, shift @components);