DKIM: with dkim_verify_minimal, avoid calling ACL after first pass
[exim.git] / test / runtest
index b959107c122e2aae7e25120a7996d6d5cba06fd7..d550998b76dcb707436657703f453a5dddf1b60d 100755 (executable)
@@ -2,6 +2,9 @@
 # We use env, because in some environments of our build farm
 # the Perl 5.010 interpreter is only reachable via $PATH
 
 # We use env, because in some environments of our build farm
 # the Perl 5.010 interpreter is only reachable via $PATH
 
+# Copyright (c) The Exim Maintainers 2024
+# SPDX-License-Identifier: GPL-2.0-or-later
+
 ###############################################################################
 # This is the controlling script for the "new" test suite for Exim. It should #
 # be possible to export this suite for running on a wide variety of hosts, in #
 ###############################################################################
 # This is the controlling script for the "new" test suite for Exim. It should #
 # be possible to export this suite for running on a wide variety of hosts, in #
@@ -466,7 +469,7 @@ RESET_AFTER_EXTRA_LINE_READ:
   s/forced fail after \d seconds/forced fail after d seconds/;
 
   # This message may contain a different DBM library name
   s/forced fail after \d seconds/forced fail after d seconds/;
 
   # This message may contain a different DBM library name
-  s/Failed to open \S+( \([^\)]+\))? file/Failed to open DBM file/;
+  s/Failed to open \S+( \([^\)]+\))? file/Failed to open hintsdb file/;
 
   # The message for a non-listening FIFO varies
   s/:[^:]+: while opening named pipe/: Error: while opening named pipe/;
 
   # The message for a non-listening FIFO varies
   s/:[^:]+: while opening named pipe/: Error: while opening named pipe/;
@@ -572,10 +575,10 @@ RESET_AFTER_EXTRA_LINE_READ:
   s/\d\d-\w\w\w-\d\d\d\d\s\d\d:\d\d:\d\d\s[-+]\d\d\d\d,/06-Sep-1999 15:52:48 +0100,/gx;
 
   # Dates/times in debugging output for writing retry records
   s/\d\d-\w\w\w-\d\d\d\d\s\d\d:\d\d:\d\d\s[-+]\d\d\d\d,/06-Sep-1999 15:52:48 +0100,/gx;
 
   # Dates/times in debugging output for writing retry records
-  if (/^  first failed=(\d+) last try=(\d+) next try=(\d+) (.*)$/)
+  if (/^(\s+)first failed=(\d+) last try=(\d+) next try=(\d+) (.*)$/)
     {
     {
-    my($next) = $3 - $2;
-    $_ = "  first failed=dddd last try=dddd next try=+$next $4\n";
+    my($next) = $4 - $3;
+    $_ = "$1first failed=dddd last try=dddd next try=+$next $5\n";
     }
   s/^(\s*)now=\d+ first_failed=\d+ next_try=\d+ expired=(\w)/$1now=tttt first_failed=tttt next_try=tttt expired=$2/;
   s/^(\s*)received_time=\d+ diff=\d+ timeout=(\d+)/$1received_time=tttt diff=tttt timeout=$2/;
     }
   s/^(\s*)now=\d+ first_failed=\d+ next_try=\d+ expired=(\w)/$1now=tttt first_failed=tttt next_try=tttt expired=$2/;
   s/^(\s*)received_time=\d+ diff=\d+ timeout=(\d+)/$1received_time=tttt diff=tttt timeout=$2/;
@@ -1052,6 +1055,10 @@ RESET_AFTER_EXTRA_LINE_READ:
     # remote IPv6 addrs vary
     s/^(Connection request from) \[.*:.*:.*\]$/$1 \[ipv6\]/;
 
     # remote IPv6 addrs vary
     s/^(Connection request from) \[.*:.*:.*\]$/$1 \[ipv6\]/;
 
+    # Hints DB use of lockfiles is provider-dependent
+    s/Failed to open \K(?:hintsdb|database lock) file (.*\/spool\/db\/[^. ]*)(?:.lockfile)?(?: for reading)?(?=: No such file or directory$)/hintsdb $1/;
+
+
     # openssl version variances
   # Error lines on stdout from SSL contain process id values and file names.
   # They also contain a source file name and line number, which may vary from
     # openssl version variances
   # Error lines on stdout from SSL contain process id values and file names.
   # They also contain a source file name and line number, which may vary from
@@ -1132,9 +1139,9 @@ RESET_AFTER_EXTRA_LINE_READ:
     # because they will be different in different binaries.
 
     next if /^$time_pid?
     # because they will be different in different binaries.
 
     next if /^$time_pid?
-               (?: Berkeley\ DB:\s
-                 | Probably\ (?:Berkeley\ DB|ndbm|GDBM)
-                 | Using\ tdb
+               (?: .*\sBerkeley\ DB
+                 | \sProbably\ (?:Berkeley\ DB|ndbm|GDBM)
+                 | \sUsing\ (?:tdb|sqlite3)
                  | Authenticators:
                  | Lookups(?:\(built-in\))?:
                  | Support\ for:
                  | Authenticators:
                  | Lookups(?:\(built-in\))?:
                  | Support\ for:
@@ -1149,6 +1156,10 @@ RESET_AFTER_EXTRA_LINE_READ:
                )
              /x;
 
                )
              /x;
 
+    # Hints DB use of lockfiles is provider-dependent
+    next if /lock(?:ing|ed) .*\/spool\/db\/[^.]+\.lockfile$/;
+    s/closed hints database\K and lockfile$//;
+
     # Lines with a leading pid.  Only handle >= 4-digit PIDs to avoid converting SMTP respose codes
     s/^\s*(\d{4,})\s(?!(?:previous message|in\s|bytes remain in|SMTP accept process running))/new_value($1, "p%s", \$next_pid) . ' '/e;
 
     # Lines with a leading pid.  Only handle >= 4-digit PIDs to avoid converting SMTP respose codes
     s/^\s*(\d{4,})\s(?!(?:previous message|in\s|bytes remain in|SMTP accept process running))/new_value($1, "p%s", \$next_pid) . ' '/e;
 
@@ -1424,12 +1435,28 @@ RESET_AFTER_EXTRA_LINE_READ:
     # so convert them all to "0"
     s%(?<!lsearch)[^ ](?=TESTSUITE/aux-fixed/(?:0414.list[12]|0464.domains)$)%0%;
 
     # so convert them all to "0"
     s%(?<!lsearch)[^ ](?=TESTSUITE/aux-fixed/(?:0414.list[12]|0464.domains)$)%0%;
 
+    # Environment cleaning
+    next if /\w+ in keep_environment\? (yes|no)/;
+
+    # Sizes vary with test hostname
+    s/^cmd buf flush \d+ bytes/cmd buf flush ddd bytes/;
+
+    # Different platforms put different error messages into retry records
+    s/dbfn_write: key=.* datalen \K\d{2,3}$/nn/;
+    s/dbfn_read: size \K\d{2,3}(?= return$)/nnn/;
+
+    # Spool filesystem free space changes on different systems.
+    s/((?:spool|log) directory space =) -?\d+K (inodes =)\s*-?\d+/$1 nnnnnK $2 nnnnn/;
+
     # CONTENT_SCAN
     next if /try option acl_(?:not_)?smtp_mime$/;
 
     # DISABLE_OCSP
     next if /in hosts_requ(est|ire)_ocsp\? (no|yes)/;
 
     # CONTENT_SCAN
     next if /try option acl_(?:not_)?smtp_mime$/;
 
     # DISABLE_OCSP
     next if /in hosts_requ(est|ire)_ocsp\? (no|yes)/;
 
+    # WELLKNOWN
+    next if / in wellknown_advertise_hosts\?/;
+
     # SUPPORT_PROXY
     next if /host in hosts_proxy\?/;
 
     # SUPPORT_PROXY
     next if /host in hosts_proxy\?/;
 
@@ -1458,7 +1485,10 @@ RESET_AFTER_EXTRA_LINE_READ:
     next if / in limits_advertise_hosts?\? no \(matched "!\*"\)/;
 
     # Experimental_XCLIENT
     next if / in limits_advertise_hosts?\? no \(matched "!\*"\)/;
 
     # Experimental_XCLIENT
-    next if / in hosts_xclient?\? no \(option unset\)/;
+    next if / in hosts_xclient\? no \(option unset\)/;
+
+    # Experimental_WELLKNOWN
+    next if / in hosts_wellknown\? no \(option unset\)/;
 
     # TCP Fast Open
     next if /^(ppppp )?setsockopt FASTOPEN: Network Error/;
 
     # TCP Fast Open
     next if /^(ppppp )?setsockopt FASTOPEN: Network Error/;
@@ -1468,15 +1498,6 @@ RESET_AFTER_EXTRA_LINE_READ:
     next if /in tls_resumption_hosts\?/;
     next if /RE '.outlook.com/;
 
     next if /in tls_resumption_hosts\?/;
     next if /RE '.outlook.com/;
 
-    # Environment cleaning
-    next if /\w+ in keep_environment\? (yes|no)/;
-
-    # Sizes vary with test hostname
-    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/;
-
     # Non-TLS builds have different expansions for received_header_text
     if (s/(with \$received_protocol)\}\} \$\{if def:tls_cipher \{\(\$tls_cipher\)\n$/$1/)
       {
     # Non-TLS builds have different expansions for received_header_text
     if (s/(with \$received_protocol)\}\} \$\{if def:tls_cipher \{\(\$tls_cipher\)\n$/$1/)
       {
@@ -2454,7 +2475,7 @@ if ($debug) { printf ">> $_\n"; }
 ###################
 
 # The "dbmbuild" command runs exim_dbmbuild. This is used both to test the
 ###################
 
 # The "dbmbuild" command runs exim_dbmbuild. This is used both to test the
-# utility and to make DBM files for testing DBM lookups.
+# utility and to make hintsdb files for testing hintsdb lookups.
 
 if (/^dbmbuild\s+(\S+)\s+(\S+)/)
   {
 
 if (/^dbmbuild\s+(\S+)\s+(\S+)/)
   {
@@ -2467,7 +2488,7 @@ if (/^dbmbuild\s+(\S+)\s+(\S+)/)
 
 # The "dump" command runs exim_dumpdb. On different systems, the output for
 # some types of dump may appear in a different order because it's just hauled
 
 # The "dump" command runs exim_dumpdb. On different systems, the output for
 # some types of dump may appear in a different order because it's just hauled
-# out of the DBM file. We can solve this by sorting. Ignore the leading
+# out of the hintsdb file. We can solve this by sorting. Ignore the leading
 # date/time, as it will be flattened later during munging.
 
 if (/^dump\s+(\S+)/)
 # date/time, as it will be flattened later during munging.
 
 if (/^dump\s+(\S+)/)
@@ -3663,7 +3684,7 @@ while (<EXIMINFO>)
     }
 
   elsif (/^Support for: (.*)/)
     }
 
   elsif (/^Support for: (.*)/)
-    {
+    {                  # Compile-time features - exim -bV
     print;
     @temp = split /(\s+)/, $1;
     push(@temp, ' ');
     print;
     @temp = split /(\s+)/, $1;
     push(@temp, ' ');
@@ -4230,7 +4251,7 @@ DIR: for (my $i = 0; $i < @test_dirs; $i++)
         if (!defined $parm_malware{$1}) { $wantthis = 0; last; }
         }
       elsif (/^(not )?feature (.*)$/)
         if (!defined $parm_malware{$1}) { $wantthis = 0; last; }
         }
       elsif (/^(not )?feature (.*)$/)
-        {
+        {                      #a macro name, or lack thereof - -bP macros
        # move to a subroutine?
        my $eximinfo = "$parm_exim -C $parm_cwd/test-config -DDIR=$parm_cwd -bP macro $2";
 
        # move to a subroutine?
        my $eximinfo = "$parm_exim -C $parm_cwd/test-config -DDIR=$parm_cwd -bP macro $2";