#use strict;
use v5.10.1;
use warnings;
-use if $^V >= v5.19.11, experimental => 'smartmatch';
use Errno;
use FileHandle;
s/T:(\S+)\s-22\s(\S+)\s/T:$1 -22 xxxx /;
# port numbers in dumpdb output
- s/T:([a-z.]+(:[0-9.]+)?):$parm_port_n /T:$1:PORT_N /;
+ s/T:([a-z0-9.]+(:[0-9.]+|:\[[^]]+])?):$parm_port_n /T:$1:PORT_N /;
+ s/T:([a-z0-9.[\]]+(:[0-9.]+|:\[[^]]+])?):$parm_port_s /T:$1:PORT_S /;
+ # and exinext
+ s/Transport: (?:[a-z0-9.]+|\[[^\]]+]) (?:[0-9.]+|\[[^\]]+]):\K$parm_port_s /PORT_S /;
# port numbers in stderr
s/^set_process_info: .*\]:\K$parm_port_d /PORT_D /;
# time used was fixed when I first started running automatic Exim tests.
# Date/time in header lines and SMTP responses
- s/[A-Z][a-z]{2},\s\d\d?\s[A-Z][a-z]{2}\s\d{4}\s\d\d\:\d\d:\d\d\s[-+]\d{4}
- /Tue, 2 Mar 1999 09:44:33 +0000/gx;
+ s/[A-Z][a-z]{2},
+ (\s|\xE2\x96\x91)
+ \d\d?
+ (\s|\xE2\x96\x91)
+ [A-Z][a-z]{2}
+ (\s|\xE2\x96\x91)
+ \d{4}
+ (\s|\xE2\x96\x91)
+ \d\d\:\d\d:\d\d
+ (\s|\xE2\x96\x91)
+ [-+]\d{4}
+ /Tue,${1}2${2}Mar${3}1999${4}09:44:33${5}+0000/gx;
# and in a French locale
s/\S{4},\s\d\d?\s[^,]+\s\d{4}\s\d\d\:\d\d:\d\d\s[-+]\d{4}
/dim., 10 f\xE9vr 2019 20:05:49 +0000/gx;
s/((D|[RQD]T)=)\d\.\d{3}s/$1q.qqqs/g;
# Date/time in message separators
- s/(?:[A-Z][a-z]{2}\s){2}\d\d\s\d\d:\d\d:\d\d\s\d\d\d\d
- /Tue Mar 02 09:44:33 1999/gx;
+ s/(?:[A-Z][a-z]{2}
+ (\s|\xE2\x96\x91)
+ ){2}\d\d
+ (\s|\xE2\x96\x91)
+ \d\d:\d\d:\d\d
+ (\s|\xE2\x96\x91)
+ \d\d\d\d
+ /Tue${1}Mar${1}02${2}09:44:33${3}1999/gx;
# Date of message arrival in spool file as shown by -Mvh
s/^\d{9,10}\s0$/ddddddddd 0/;
# This handles "connection from" and the like, when the port is given
if (!/listening for SMTP on/ && !/Connecting to/ && !/=>/ && !/->/
- && !/\*>/&& !/==/ && !/\*\*/ && !/Connection refused/ && !/in response to/)
+ && !/\*>/&& !/==/ && !/\*\*/ && !/Connection refused/ && !/in response to/
+ && !/T(?:ransport)?:/)
{
s/\[([a-z\d:]+|\d+(?:\.\d+){3})\]:(\d+)/"[".$1."]:".new_value($2,"%s",\$next_port)/ie;
}
# gnutls version variances
next if /^Error in the pull function./;
+ # Retry DB record gets truncated when TESTDIR is a long string
+ s/T:.*\(MTA-imposed quota exceeded while writing to\K.*$/ <elided>)/;
+
# optional IDN2 variant conversions. Accept either IDN1 or IDN2
s/conversion strasse.de/conversion xn--strae-oqa.de/;
s/conversion: german.xn--strae-oqa.de/conversion: german.straße.de/;
# LIMITS is not always supported by the build
next if /^limits_advertise_hosts =/;
+ # PRDR
+ next if /^hosts_try_prdr = *$/;
+
# TLS resumption is not always supported by the build
next if /^tls_resumption_hosts =/;
next if /^-tls_resumption/;
s/250-AUTH ANONYMOUS PLAIN SCRAM-SHA-1\K SCRAM-SHA-256//;
# mailq times change with when the run is done, vs. static-source spoolfiles
- s/\s*\d*[hd](?= 317 [0-9A-Za-z\-]{23} <nobody\@test.ex>)/DDd/;
+ s/\s*\d*[hd](?= 317 (?:[-0-9A-Za-z]{23}|[-0-9A-Za-z]{16}) <nobody\@test.ex>)/DDd/;
+ # mailq sizes change with caller running the test
+ s/\s[01]m [34]\d\d(?= (?:[-0-9A-Za-z]{23}|[-0-9A-Za-z]{16}) <CALLER\@the.local.host.name>)/ 1m 396/;
+
+ # Not all builds include EXPERIMENTAL_DSN_INFO (1 of 2)
+ if (/^X-Exim-Diagnostic:/)
+ {
+ while (<IN>) {
+ last if (/^$/ || !/^\s/);
+ }
+ goto RESET_AFTER_EXTRA_LINE_READ;
+ }
}
# ======== stderr ========
next if /^TLS: not preloading (CA bundle|cipher list) for server$/;
next if /^TLS: not preloading server certs$/;
- # some plaatforms are missing the standard CA bundle file
+ # some platforms are missing the standard CA bundle file
next if /^tls_set_watch\(\) fail on '\/usr\/lib\/ssl\/cert.pem': No such file or directory$/;
# drop lookups
# drop pdkim debugging header
next if /^DKIM( <<<<<<<<<<<<<<<<<<<<<<<<<<<<<+|: no signatures)$/;
- # Some platforms have TIOCOUTome do not
+ # Some platforms have TIOCOUT, some do not
next if /\d+ bytes remain in socket output buffer$/;
# Various other IPv6 lines must be omitted too
}
# Different builds will have different lookup types included
- s/^\s*search_type \K\d+ \((\w+)\) quoting -1 \(none\)$/NN ($1) quoting -1 (none)/;
+ s/search_type \K\d+ \((\w+)\) quoting -1 \(none\)$/NN ($1) quoting -1 (none)/;
# and different numbers of lookup types result in different type-code letters,
# so convert them all to "0"
s%(?<!lsearch)[^ ](?=TESTSUITE/aux-fixed/(?:0414.list[12]|0464.domains)$)%0%;
+ # CONTENT_SCAN
+ next if /try option acl_not_smtp_mime$/;
+
# DISABLE_OCSP
next if /in hosts_requ(est|ire)_ocsp\? (no|yes)/;
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/;
+ s/((?:spool|log) directory space =) -?\d+K (inodes =)\s*-?\d+/$1 nnnnnK $2 nnnnn/;
# Non-TLS builds have different expansions for received_header_text
if (s/(with \$received_protocol)\}\} \$\{if def:tls_cipher \{\(\$tls_cipher\)\n$/$1/)
# Not all platforms build with SPF enabled
next if /^(spf_conn_init|SPF_dns_exim_new|spf_compile\.c)/;
+ next if /try option spf_smtp_comment_template$/;
# Not all platforms have sendfile support
next if /^cannot use sendfile for body: no support$/;
next if / Berkeley DB error: /;
# CHUNKING: exact sizes depend on hostnames in headers
- s/(=>.* K C="250- \d)\d+ (byte chunk, total \d)\d+/$1nn $2nn/;
+ s/(=>.* K (?:DKIM=\S+ )?C="250- \d)\d+ (byte chunk, total \d)\d+/$1nn $2nn/;
# OpenSSL version variances
s/(TLS error on connection [^:]*: error:)[0-9A-F]{8}(:system library):(?:fopen|func\(4095\)|):(No such file or directory)$/$1xxxxxxxx$2:fopen:$3/;
s/ARC: AMS signing: privkey PEM-block import: error:\K[0-9A-F]{8}:PEM routines:PEM_read_bio:no start line$/1E08010C:DECODER routines::unsupported/;
# DKIM timestamps
- if ( /(DKIM: d=.*) t=([0-9]*) x=([0-9]*) / )
+ if ( /(DKIM: d=.*) t=([0-9]*) x=([0-9]*) \[/ )
{
my ($prefix, $t_diff) = ($1, $3 - $2);
s/DKIM: d=.* t=[0-9]* x=[0-9]* /${prefix} t=T x=T+${t_diff} /;
}
+ else
+ { s/DKIM: d=.* \Kt=[0-9]* \[/t=T [/; }
# GnuTLS reports a different keysize vs. OpenSSL, for ed25519 keys
s/signer: [^ ]* bits:\K 256/ 253/;
s/public key too short:\K 256 bits/ 253 bits/;
s/TLS error on connection from .*\K(SSL_accept: TCP connection closed by peer|\(gnutls_handshake\): The TLS connection was non-properly terminated.)/(tls lib accept fn): TCP connection closed by peer/;
s/TLS session: \K\(gnutls_handshake\): rxd alert: No supported application protocol could be negotiated/(SSL_connect): error: <<detail omitted>>/;
s/\(gnutls_handshake\): No common application protocol could be negotiated./(SSL_accept): error: <<detail omitted>>/;
+
+ # Not all buildfarm animals have ipv6
+ next if /<dns:fail> <DNS_(?:NOMATCH|AGAIN):.*:AAAA>$/ ;
}
# ======== mail ========
<IN>;
<IN>;
}
+ elsif ( /^(\s+)t=([0-9]*); b=[A-Za-z0-9+\/]+$/ )
+ {
+ my $indent = $1;
+ s/.*/${indent}t=T; b=bbbb;/;
+ <IN>;
+ <IN>;
+ }
+
+ # Not all builds include EXPERIMENTAL_DSN_INFO (2 of 2)
+ if (/^X-Exim-Diagnostic:/)
+ {
+ while (<IN>) {
+ last if (/^$/ || !/^\s/);
+ }
+ goto RESET_AFTER_EXTRA_LINE_READ;
+ }
}
# ======== All files other than stderr ========
run_system("$_ >>test-stdout 2>>test-stderr");
return 1;
}
+if (/^cat2\s/)
+ {
+ s/^cat2/cat/;
+ run_system("$_ 2>&1 >test-stderr");
+ return 1;
+ }
print "Exim binary is `$parm_exim'\n" if defined $parm_exim;
+my %wanted;
my @wanted = sort numerically uniq
@tests_wanted ? @tests_wanted : (),
@range_wanted ? $range_wanted[0] .. $range_wanted[1] : (),
0+$ARGV[0]..0+$ARGV[1] # add 0 to cope with test numbers starting with zero
: ();
@wanted = 1..TEST_TOP if not @wanted;
+map { $wanted{sprintf("%04d",$_)}= $_; } @wanted;
##################################################
# Check for sudo access to root #
# We want the tests from this subdirectory, provided they are in the
# range that was selected.
- @testlist = grep { $_ ~~ @wanted } grep { /^\d+(?:\.\d+)?$/ } map { basename $_ } glob "scripts/$testdir/*";
+ undef @testlist;
+ map { push @testlist, $_ if exists $wanted{$_} } grep { /^\d+(?:\.\d+)?$/ } map { basename $_ } glob "scripts/$testdir/*";
tests_exit(-1, "Failed to read test scripts from `scripts/$testdir/*': $!")
if not @testlist;
=cut
+# vi: aw ai sw=2
# End of runtest script