common driver structs for transports
[exim.git] / test / runtest
index 22e2b8f8d3f7bf11f52d94a90793d3da9f176531..b89960a8bb867570b754016cf7b34fb32b46f814 100755 (executable)
@@ -577,13 +577,13 @@ 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
-  if (/^  first failed=(\d+) last try=(\d+) next try=(\d+) (.*)$/)
+  if (/^(.+)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/^(.*)now=\d+ first_failed=\d+ next_try=\d+ expired=(\w)/$1now=tttt first_failed=tttt next_try=tttt expired=$2/;
+  s/^(.*)received_time=\d+ diff=\d+ timeout=(\d+)/$1received_time=tttt diff=tttt timeout=$2/;
 
   # Time to retry may vary
   s/time to retry = \S+/time to retry = tttt/;
@@ -1178,9 +1178,36 @@ RESET_AFTER_EXTRA_LINE_READ:
     next if /lock(?:ing|ed) .*\/spool\/db\/[^.]+\.lockfile$/;
     s/closed hints database\K and lockfile$//;
 
+    # Hints DBs with transactions are provider-dependent, and flow changes
+    # to take advantage of them need different opens and different flags.
+    # Drop all the debug output for opens and closes.
+    if (/EXIM_DBOPEN(_MULTI)?: file <.*spool\/db\/retry>/)
+      {
+      $_ = <IN>;
+      next if (/returned from EXIM_DBOPEN(_MULTI)?: 0x[[:xdigit:]]+$/);
+      $_ = <IN>;
+      <IN> if (/returned from EXIM_DBOPEN(_MULTI)?: \(nil\)$/);
+      next;
+      }
+    if (/EXIM_DBCLOSE(_MULTI)?/) { <IN>; next; }
+    next if /retaining retry hintsdb handle$/;
+    next if /using cached retry hintsdb (?:handle|nonpresence)$/;
+    if (/final close of cached retry db$/) { <IN>; <IN>; next; }
+    next if /dbfn_transaction_(?:start|commit)$/;
+
+    # Various hintsdb backends
+    s/(?:bdb|tdb|gdbm|ndbm|sqlite)
+      _open\(flags\ 0x(\d)
+      \ mode\ 0640\)
+      \ (?:No\ such\ file\ or\ directory|unable\ to\ open\ database\ file)$
+     /hintsdb_open(flags 0x$1 mode 0640) No such file or directory/x;
+
     # 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;
 
+    # Connection IDs
+    s/connection_id: \K(\d+)$/new_value($1, "conn%s", \$next_conn)/e;
+
     # Debugging lines for Exim terminations and process-generation
     next if /(?:postfork: | fork(?:ing|ed) for )/;
 
@@ -1270,7 +1297,8 @@ RESET_AFTER_EXTRA_LINE_READ:
     next if /^tls_set_watch\(\) fail on '\/usr\/(?:lib\/ssl|local\/openssl3\/etc\/pki\/tls)\/cert.pem': No such file or directory$/;
 
     # drop lookups
-    next if /^$time_pid?(?: Lookups\ \(built-in\):
+    next if /^$time_pid?(?: Lookups\ \((?:built-in|dynamic)\):
+                                       |Loaded\ "[^.]+\.so"\ \(\d+\ lookup\ types\)
                                        | Loading\ lookup\ modules\ from
                                        | Loaded\ \d+\ lookup\ modules
                                        | Total\ \d+\ lookups)/x;
@@ -1390,19 +1418,6 @@ RESET_AFTER_EXTRA_LINE_READ:
 
     next if /failed to load readline:/;
 
-    # Some DBM libraries seem to make DBM files on opening with O_RDWR without
-    # O_CREAT; other's don't. In the latter case there is some debugging output
-    # which is not present in the former. Skip the relevant lines (there are
-    # three of them).
-
-    if (/returned from EXIM_DBOPEN: \(nil\)/)
-      {
-      $_ .= <IN>;
-      s?\Q$parm_cwd\E?TESTSUITE?g;
-      if (/TESTSUITE\/spool\/db\/\S+ appears not to exist: trying to create/)
-       { $_ = <IN>; next; }
-      }
-
     # Some tests turn on +expand debugging to check on expansions.
     # Unfortunately, the Received: expansion varies, depending on whether TLS
     # is compiled or not. So we must remove the relevant debugging if it is.
@@ -1586,8 +1601,8 @@ RESET_AFTER_EXTRA_LINE_READ:
       }
 
     # Specific pointer values reported for DB operations change from run to run
-    s/^(\s*returned from EXIM_DBOPEN: )(0x)?[0-9a-f]+/${1}0xAAAAAAAA/;
-    s/^(\s*EXIM_DBCLOSE.)(0x)?[0-9a-f]+/${1}0xAAAAAAAA/;
+    s/(returned from EXIM_DBOPEN: )(0x)?[0-9a-f]+/${1}0xAAAAAAAA/;
+    s/(EXIM_DBCLOSE.)(0x)?[0-9a-f]+/${1}0xAAAAAAAA/;
 
     # Platform-dependent output during MySQL startup
     next if /PerconaFT file system space/;
@@ -2497,7 +2512,7 @@ if ($debug) { printf ">> $_\n"; }
 ###################
 
 # 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+)/)
   {
@@ -2510,7 +2525,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
-# 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+)/)
@@ -3713,12 +3728,13 @@ while (<EXIMINFO>)
     %parm_support = @temp;
     }
 
-  elsif (/^Lookups \(built-in\): (.*)/)
+  elsif (/^Lookups \((?:built-in|dynamic)\):  ?(.*)/)
     {
     print;
     @temp = split /(\s+)/, $1;
     push(@temp, ' ');
-    %parm_lookups = @temp;
+    my %temp_lookups = @temp;
+    @parm_lookups{keys %temp_lookups} = values %temp_lookups;
     }
 
   elsif (/^Authenticators: (.*)/)
@@ -4117,6 +4133,17 @@ system("sudo cp eximdir/exim eximdir/exim_exim;" .
        "sudo chgrp $parm_eximgroup eximdir/exim_exim;" .
        "sudo chmod 06755 eximdir/exim_exim");
 
+# Copy any libraries that were built for dynamic load
+# Currently this is only for lookup methods
+
+($parm_exim_dir) = $parm_exim =~ m?^(.*)/exim?;
+
+while (my $file = glob("$parm_exim_dir/lookups/*.so")) {
+  my $base = basename($file);
+  cp("$file", "eximdir/");
+  system("sudo chmod 755 eximdir/$base");
+  }
+
 ##################################################
 #     Make copies of utilities we might need     #
 ##################################################
@@ -4124,8 +4151,6 @@ system("sudo cp eximdir/exim eximdir/exim_exim;" .
 # Certain of the tests make use of some of Exim's utilities. We do not need
 # to be root to copy these.
 
-($parm_exim_dir) = $parm_exim =~ m?^(.*)/exim?;
-
 $dbm_build_deleted = 0;
 if (defined $parm_lookups{dbm} && not cp("$parm_exim_dir/exim_dbmbuild", "eximdir/exim_dbmbuild"))
   {
@@ -4597,6 +4622,7 @@ foreach $test (@test_list)
   $next_msgid = "aX";
   $next_pid = 1234;
   $next_port = 1111;
+  $next_conn = 1111;
   $message_skip = 0;
   $msglog_skip = 0;
   $munge_skip = 0;