sub new_value {
my($oldid, $base, $sequence) = @_;
my($newid) = $cache{$oldid};
+print ">> replace $oldid -> $newid\n" if ($debug && defined $newid);
if (! defined $newid)
{
$newid = sprintf($base, $$sequence++);
+ print ">> new $oldid -> $newid\n" if $debug;
$cache{$oldid} = $newid;
}
return $newid;
RESET_AFTER_EXTRA_LINE_READ:
if ($munge_skip)
{
- # Munging is a no-op.
+ # Munging is a no-op, except for exim_msgdate specials.
# Useful when testing exim_msgdate so that
# we compare unmunged dates and message-ids.
+ s%^localhost \d+ from message-id != given number \d+ at \K/.+(?=/test/eximdir/exim_msgdate line 387.$)%DIR%;
+
print MUNGED;
next;
}
# patchexim should have fixed this for us
#s/Exim \K\d+[._]\d+[\w_-]*/x.yz/i;
- # Replace Exim message ids by a unique series
+ # Replace Exim message ids by a unique series.
+ # Both old and new formats, with separate replace series, for now.
s/(\d[^\W_]{5}-[^\W_]{6}-[^\W_]{2})
- /new_value($1, "10Hm%s-0005vi-00", \$next_msgid)/egx;
+ /new_value($1, "10Hm%s-0005vi-00", \$next_msgid_old)/egx;
+ s/(\d[^\W_]{5}-[^\W_]{11}-[^\W_]{4})
+ /new_value($1, "10Hm%s-000000005vi-0000", \$next_msgid)/egx;
# The names of lock files appear in some error and debug messages
s/\.lock(\.[-\w]+)+(\.[\da-f]+){2}/.lock.test.ex.dddddddd.pppppppp/;
# ======== IP error numbers and messages ========
# These vary between operating systems
- s/Can(no|')t assign requested address/Network Error/;
+ s/Can(no|')t assign requested address/Netwk addr not available/;
s/Operation timed out/Connection timed out/;
s/Address family not supported by protocol family/Network Error/;
- s/Network( is)? unreachable/Network Error/;
+ s/Network( is)? unreachable/Network unreachable/;
s/Invalid argument/Network Error/;
s/\(\d+\): Network/(dd): Network/;
s/([\s,])S=\d+\b/$1S=sss/;
s/:S\d+\b/:Ssss/;
- s/^(\s*\d+m\s+)\d+(\s+[a-z0-9-]{16} <)/$1sss$2/i if $is_stdout;
+ s/^(\s*\d+[mhd]\s+)\d+(\s+(?:[a-z0-9-]{23}|[a-z0-9-]{18}) <)/TTT sss$2/i if $is_stdout;
s/\sSIZE=\d+\b/ SIZE=ssss/;
s/\ssize=\d+\b/ size=sss/ if $is_stderr;
s/old size = \d+\b/old size = sssss/;
# gsasl library version may not support some methods
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/;
}
# ======== stderr ========
}
next if / in limits_advertise_hosts?\? no \(matched "!\*"\)/;
+ # Experimental_XCLIENT
+ next if / in hosts_xclient?\? no \(option unset\)/;
+
# TCP Fast Open
next if /^(ppppp )?setsockopt FASTOPEN: Network Error/;
# 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/;
- next if /TLS error \(SSL_read\): error:0A000126:SSL routines::unexpected eof while reading$/ ;
+ next if /TLS error \(SSL_read\): .*error:0A000126:SSL routines::unexpected eof while reading$/ ;
s/EVDATA: \K\(SSL_accept\): error:0A000126:SSL routines::unexpected eof while reading/SSL_accept: TCP connection closed by peer/;
s/(DANE attempt failed.*error:)[0-9A-F]{8}(:SSL routines:)(?:(?i)ssl3_get_server_certificate|tls_process_server_certificate|CONNECT_CR_CERT|)(?=:certificate verify failed$)/$1xxxxxxxx$2ssl3_get_server_certificate/;
s/(DKIM: validation error: )error:[0-9A-F]{8}:rsa routines:(?:(?i)int_rsa_verify|CRYPTO_internal):(?:bad signature|algorithm mismatch)$/$1Public key signature verification has failed./;
for (my $i = 0; $i < @munged; $i++)
{
- if ($munged[$i] =~ /^[-\d]{10}\s[:\d]{8}\s[-A-Za-z\d]{16}\s[-=*]>/)
+ if ($munged[$i] =~ /^[-\d]{10}\s[:\d]{8}(\.\d{3})?\s[-A-Za-z\d]{23}\s[-=*]>/)
{
my $j;
for ($j = $i + 1; $j < @munged; $j++)
{
last if $munged[$j] !~
- /^[-\d]{10}\s[:\d]{8}\s[-A-Za-z\d]{16}\s[-=*]>/;
+ /^[-\d]{10}\s[:\d]{8}(\.\d{3})?\s[-A-Za-z\d]{23}\s[-=*]>/;
}
@temp = splice(@munged, $i, $j - $i);
@temp = sort(@temp);
foreach $msglog (@msglogs)
{
next if ($msglog eq "." || $msglog eq ".." || $msglog eq "CVS");
+
($munged_msglog = $msglog) =~
s/((?:[^\W_]{6}-){2}[^\W_]{2})
- /new_value($1, "10Hm%s-0005vi-00", \$next_msgid)/egx;
+ /new_value($1, "10Hm%s-0005vi-00", \$next_msgid_old)/egx;
+
+ $munged_msglog =~
+ s/([^\W_]{6}-[^\W_]{11}-[^\W_]{4})
+ /new_value($1, "10Hm%s-000000005vi-0000", \$next_msgid)/egx;
+
$yield = max($yield, check_file("spool/msglog/$msglog", undef,
"test-msglog-munged", "msglog/$testno.$munged_msglog", 0,
$munge->{msglog}));
}
+# The "exim_id_update" command runs exim_id_update on the current spool
+
+if (/^exim_id_update(\s+.*)?$/)
+ {
+ run_system("(sudo ./eximdir/exim_id_update" . ($1 || '') . " $parm_cwd/spool/input;" .
+ "echo exim_id_update exit code = \$?)" .
+ ">>test-stdout 2>>test-stderr");
+ return 1;
+ }
+
+
# The "gnutls" command makes a copy of saved GnuTLS parameter data in the
# spool directory, to save Exim from re-creating it each time.
# Various Unix management commands are recognized
if (/^(ln|ls|du|mkdir|mkfifo|touch|cp|cat)\s/ ||
- /^sudo\s(rmdir|rm|mv|chown|chmod)\s/)
+ /^sudo\s(mkdir|rmdir|rm|mv|cp|chown|chmod)\s/)
{
run_system("$_ >>test-stdout 2>>test-stderr");
return 1;
$dbm_build_deleted = 1;
}
-foreach my $tool (qw(exim_dumpdb exim_lock exinext exigrep eximstats exiqgrep exim_msgdate)) {
+foreach my $tool (qw(exim_dumpdb exim_lock exinext exigrep eximstats exiqgrep exim_msgdate exim_id_update)) {
cp("$parm_exim_dir/$tool" => "eximdir/$tool")
or tests_exit(-1, "Failed to make a copy of $tool: $!");
}
if (!defined $1 && $? != 0 || defined $1 && $? == 0) {
$wantthis = 0;
unlink("$parm_cwd/test-config");
- $_ = "$1feature $2";
+ $_ = $1 || "" . "feature $2";
last;
}
unlink("$parm_cwd/test-config");
# set up the initial sequence strings.
undef %cache;
+ $next_msgid_old = "aX";
$next_msgid = "aX";
$next_pid = 1234;
$next_port = 1111;