Gitweb:
http://git.exim.org/exim.git/commitdiff/c9a55f6ac1c48adf32a02b21d628c0deb71b3e6f
Commit: c9a55f6ac1c48adf32a02b21d628c0deb71b3e6f
Parent: be4a1376bb4fe5ef40ae4c1e8c7743ce855ed30d
Author: Jeremy Harris <jgh146exb@???>
AuthorDate: Tue Jun 5 20:50:30 2012 +0100
Committer: Jeremy Harris <jgh146exb@???>
CommitDate: Tue Jun 5 20:50:30 2012 +0100
Testsuite: add per-testcase munge facility; use for dnssec and gnutls.
---
test/README | 6 +++
test/log/2014 | 1 -
test/runtest | 80 ++++++++++++++++++++++++++++++++++-------
test/scripts/0000-Basic/0002 | 1 +
test/scripts/0000-Basic/0094 | 1 +
test/scripts/0000-Basic/0381 | 1 +
test/scripts/2000-GnuTLS/2014 | 1 +
test/scripts/2000-GnuTLS/2027 | 1 +
test/scripts/2200-dnsdb/2202 | 1 +
test/stdout/0002 | 6 +++
test/stdout/3450 | 2 +-
test/stdout/3454 | 4 +-
12 files changed, 88 insertions(+), 17 deletions(-)
diff --git a/test/README b/test/README
index 3628da9..f512175 100644
--- a/test/README
+++ b/test/README
@@ -715,6 +715,12 @@ This command causes the script to sleep for m milliseconds. Nothing is output
to the screen.
+ munge <name>
+
+This command requests custom munging of the test outputs. The munge names
+used are coded in the runtest script.
+
+
need_ipv4
This command must be at the head of a script. If no IPv4 interface has been
diff --git a/test/log/2014 b/test/log/2014
index 554100b..51d195f 100644
--- a/test/log/2014
+++ b/test/log/2014
@@ -4,6 +4,5 @@
1999-03-02 09:44:33 TLS error on connection from (rhu5.barb) [ip4.ip4.ip4.ip4] (certificate verification failed): invalid
1999-03-02 09:44:33 H=[127.0.0.1] F=<userx@???> rejected RCPT <userx@???>: certificate not verified: peerdn=C=UK,O=The Exim Maintainers,OU=Test Suite,CN=Phil Pennock
1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port 1225
-1999-03-02 09:44:33 TLS error on connection from [ip4.ip4.ip4.ip4] (recv): A TLS packet with unexpected length was received.
1999-03-02 09:44:33 TLS error on connection from [ip4.ip4.ip4.ip4] (send): The specified session has been invalidated for some reason.
1999-03-02 09:44:33 H=[127.0.0.1] F=<userx@???> rejected RCPT <userx@???>: certificate not verified: peerdn=C=UK,O=The Exim Maintainers,OU=Test Suite,CN=Phil Pennock
diff --git a/test/runtest b/test/runtest
index b88e71e..2756348 100755
--- a/test/runtest
+++ b/test/runtest
@@ -313,6 +313,7 @@ return @yield;
sub munge {
my($file) = $_[0];
+my($extra) = $_[1];
my($yield) = 0;
my(@saved) = ();
@@ -338,6 +339,13 @@ $spid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
while(<IN>)
{
RESET_AFTER_EXTRA_LINE_READ:
+ # Custom munges
+ if ($extra)
+ {
+ next if $extra =~ m%^/% && eval $extra;
+ eval $extra if $extra =~ m/^s/;
+ }
+
# Check for "*** truncated ***"
$yield = 1 if /\*\*\* truncated \*\*\*/;
@@ -1022,6 +1030,7 @@ if ($_[1]) { $_ = "u"; print "... update forced\n"; }
# [2] where to put the munged copy
# [3] the name of the saved file
# [4] TRUE if this is a log file whose deliveries must be sorted
+# [5] optionally, a custom munge command
#
# Returns: 0 comparison succeeded or differences to be ignored
# 1 comparison failed; files may have been updated (=> re-compare)
@@ -1029,7 +1038,7 @@ if ($_[1]) { $_ = "u"; print "... update forced\n"; }
# Does not return if the user replies "Q" to a prompt.
sub check_file{
-my($rf,$rsf,$mf,$sf,$sortfile) = @_;
+my($rf,$rsf,$mf,$sf,$sortfile,$extra) = @_;
# If there is no saved file, the raw files must either not exist, or be
# empty. The test ! -s is TRUE if the file does not exist or is empty.
@@ -1077,11 +1086,11 @@ if (! -e $sf)
# data that does exist.
open(MUNGED, ">$mf") || tests_exit(-1, "Failed to open $mf: $!");
-my($truncated) = munge($rf) if -e $rf;
+my($truncated) = munge($rf, $extra) if -e $rf;
if (defined $rsf && -e $rsf)
{
print MUNGED "\n******** SERVER ********\n";
- $truncated |= munge($rsf);
+ $truncated |= munge($rsf, $extra);
}
close(MUNGED);
@@ -1203,46 +1212,75 @@ return 1;
##################################################
+# Custom munges
+# keyed by name of munge; value is a ref to a hash
+# which is keyed by file, value a string to look for.
+# Usable files are:
+# paniclog, rejectlog, mainlog, stdout, stderr, msglog, mail
+# Search strings starting with 's' do substitutions;
+# with '/' do line-skips.
+##################################################
+$munges =
+ { 'dnssec' =>
+ { 'stderr' => '/^Reverse DNS security status: unverified\n/', },
+
+ 'gnutls_unexpected' =>
+ { 'mainlog' => '/\(recv\): A TLS packet with unexpected length was received./', },
+
+ 'gnutls_handshake' =>
+ { 'mainlog' => 's/\(gnutls_handshake\): Error in the push function/\(gnutls_handshake\): A TLS packet with unexpected length was received/', },
+
+ };
+
+
+##################################################
# Subroutine to check the output of a test #
##################################################
# This function is called when the series of subtests is complete. It makes
-# use of check() file, whose arguments are:
+# use of check_file(), whose arguments are:
#
# [0] the name of the main raw output file
# [1] the name of the server raw output file or undef
# [2] where to put the munged copy
# [3] the name of the saved file
# [4] TRUE if this is a log file whose deliveries must be sorted
+# [5] an optional custom munge command
#
-# Arguments: none
+# Arguments: Optionally, name of a custom munge to run.
# Returns: 0 if the output compared equal
# 1 if re-run needed (files may have been updated)
sub check_output{
+my($mungename) = $_[0];
my($yield) = 0;
+my($munge) = $munges->{$mungename} if defined $mungename;
$yield = 1 if check_file("spool/log/paniclog",
"spool/log/serverpaniclog",
"test-paniclog-munged",
- "paniclog/$testno", 0);
+ "paniclog/$testno", 0,
+ $munge->{'paniclog'});
$yield = 1 if check_file("spool/log/rejectlog",
"spool/log/serverrejectlog",
"test-rejectlog-munged",
- "rejectlog/$testno", 0);
+ "rejectlog/$testno", 0,
+ $munge->{'rejectlog'});
$yield = 1 if check_file("spool/log/mainlog",
"spool/log/servermainlog",
"test-mainlog-munged",
- "log/$testno", $sortlog);
+ "log/$testno", $sortlog,
+ $munge->{'mainlog'});
if (!$stdout_skip)
{
$yield = 1 if check_file("test-stdout",
"test-stdout-server",
"test-stdout-munged",
- "stdout/$testno", 0);
+ "stdout/$testno", 0,
+ $munge->{'stdout'});
}
if (!$stderr_skip)
@@ -1250,7 +1288,8 @@ if (!$stderr_skip)
$yield = 1 if check_file("test-stderr",
"test-stderr-server",
"test-stderr-munged",
- "stderr/$testno", 0);
+ "stderr/$testno", 0,
+ $munge->{'stderr'});
}
# Compare any delivered messages, unless this test is skipped.
@@ -1289,7 +1328,8 @@ if (! $message_skip)
print ">> COMPARE $mail mail/$testno.$saved_mail\n" if $debug;
$yield = 1 if check_file($mail, undef, "test-mail-munged",
- "mail/$testno.$saved_mail", 0);
+ "mail/$testno.$saved_mail", 0,
+ $munge->{'mail'});
delete $expected_mails{"mail/$testno.$saved_mail"};
}
@@ -1359,7 +1399,8 @@ if (! $msglog_skip)
s/((?:[^\W_]{6}-){2}[^\W_]{2})
/new_value($1, "10Hm%s-0005vi-00", \$next_msgid)/egx;
$yield = 1 if check_file("spool/msglog/$msglog", undef,
- "test-msglog-munged", "msglog/$testno.$munged_msglog", 0);
+ "test-msglog-munged", "msglog/$testno.$munged_msglog", 0,
+ $munge->{'msglog'});
delete $expected_msglogs{"$testno.$munged_msglog"};
}
}
@@ -1453,6 +1494,7 @@ system("$cmd");
# 4 EOF was encountered after an initial return code line
# Optionally alse a second parameter, a hash-ref, with auxilliary information:
# exim_pid: pid of a run process
+# munge: name of a post-script results munger
sub run_command{
my($testno) = $_[0];
@@ -1665,6 +1707,18 @@ elsif (/^millisleep\s+(.*)$/)
}
+# The "munge" command selects one of a hardwired set of test-result modifications
+# to be made before result compares are run agains the golden set. This lets
+# us account for test-system dependent things which only affect a few, but known,
+# test-cases.
+# Currently only the last munge takes effect.
+
+if (/^munge\s+(.*)$/)
+ {
+ return (0, { munge => $1 });
+ }
+
+
# The "sleep" command does just that. For sleeps longer than 1 second we
# tell the user what's going on.
@@ -3441,7 +3495,7 @@ foreach $test (@test_list)
if ($docheck)
{
- if (check_output() != 0)
+ if (check_output($TEST_STATE->{munge}) != 0)
{
print (("#" x 79) . "\n");
redo;
diff --git a/test/scripts/0000-Basic/0002 b/test/scripts/0000-Basic/0002
index 40e4259..3b485ee 100644
--- a/test/scripts/0000-Basic/0002
+++ b/test/scripts/0000-Basic/0002
@@ -4,6 +4,7 @@
# be present in the basic Exim binary which we require in order to run these
# tests at all. Specialized expansion tests also exist for optional features
# in other test scripts.
+munge dnssec
exim -be
diff --git a/test/scripts/0000-Basic/0094 b/test/scripts/0000-Basic/0094
index 9a915e0..87fb530 100644
--- a/test/scripts/0000-Basic/0094
+++ b/test/scripts/0000-Basic/0094
@@ -1,4 +1,5 @@
# Reverse lookup failures
+munge dnssec
exim -bh V4NET.11.12.13
mail from:<userx@???>
rcpt to:<userx@???>
diff --git a/test/scripts/0000-Basic/0381 b/test/scripts/0000-Basic/0381
index c5f7d84..738b066 100644
--- a/test/scripts/0000-Basic/0381
+++ b/test/scripts/0000-Basic/0381
@@ -1,4 +1,5 @@
# negatives with wildcard hosts when host has multiple names
+munge dnssec
exim -d -bs -oMa V4NET.99.99.97
mail from:<notgov@???>
rcpt to:<x@???>
diff --git a/test/scripts/2000-GnuTLS/2014 b/test/scripts/2000-GnuTLS/2014
index dfddfa5..c5a0149 100644
--- a/test/scripts/2000-GnuTLS/2014
+++ b/test/scripts/2000-GnuTLS/2014
@@ -1,5 +1,6 @@
# TLS server: mandatory, optional, and revoked certificates
gnutls
+munge gnutls_unexpected
exim -DSERVER=server -bd -oX PORT_D
****
# No certificate, certificate required
diff --git a/test/scripts/2000-GnuTLS/2027 b/test/scripts/2000-GnuTLS/2027
index 5d71312..bf0b06f 100644
--- a/test/scripts/2000-GnuTLS/2027
+++ b/test/scripts/2000-GnuTLS/2027
@@ -1,5 +1,6 @@
# TLS server & client: no certificate in client
gnutls
+munge gnutls_handshake
exim -DSERVER=server -bd -oX PORT_D
****
exim userx@???
diff --git a/test/scripts/2200-dnsdb/2202 b/test/scripts/2200-dnsdb/2202
index 0f0651d..e55fbc3 100644
--- a/test/scripts/2200-dnsdb/2202
+++ b/test/scripts/2200-dnsdb/2202
@@ -1,4 +1,5 @@
# dns_again_means_nonexist
+munge dnssec
exim -d -bh HOSTIPV4
mail from:<xx@???>
rcpt to:<a@b>
diff --git a/test/stdout/0002 b/test/stdout/0002
index c009fbd..2acfb63 100644
--- a/test/stdout/0002
+++ b/test/stdout/0002
@@ -220,6 +220,12 @@
> md5: NO
> mask: NO
>
+> # Number suffixes in conditions
+> 1k: y
+> 1K: y
+> 1M: y
+> 1G: y
+>
> # Numeric overflow
> # >32b should work, >64b not
>
diff --git a/test/stdout/3450 b/test/stdout/3450
index 3c2ee8a..1bd2e21 100644
--- a/test/stdout/3450
+++ b/test/stdout/3450
@@ -62,7 +62,7 @@ SSL info: SSLv3 flush data
SSL info: SSLv3 read finished A
SSL info: SSL negotiation finished successfully
SSL info: SSL negotiation finished successfully
-SSL connection using DHE-RSA-AES256-SHA
+SSL connection using AES256-SHA
Succeeded in starting TLS
>>> ehlo foobar
??? 250-
diff --git a/test/stdout/3454 b/test/stdout/3454
index 1deec37..ae2eab3 100644
--- a/test/stdout/3454
+++ b/test/stdout/3454
@@ -34,7 +34,7 @@ SSL info: SSLv3 flush data
SSL info: SSLv3 read finished A
SSL info: SSL negotiation finished successfully
SSL info: SSL negotiation finished successfully
-SSL connection using DHE-RSA-AES256-SHA
+SSL connection using AES256-SHA
Succeeded in starting TLS
>>> auth plain AHVzZXJ4AHNlY3JldA==
??? 503
@@ -76,7 +76,7 @@ SSL info: SSLv3 flush data
SSL info: SSLv3 read finished A
SSL info: SSL negotiation finished successfully
SSL info: SSL negotiation finished successfully
-SSL connection using DHE-RSA-AES256-SHA
+SSL connection using AES256-SHA
Succeeded in starting TLS
>>> ehlo foobar
??? 250-myhost