[exim-cvs] Testsuite: add per-testcase munge facility; use f…

Top Page

Reply to this message
Author: Exim Git Commits Mailing List
Date:  
To: exim-cvs
Subject: [exim-cvs] Testsuite: add per-testcase munge facility; use for dnssec and gnutls.
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