kevent: handle OpenBSD API anomaly
[exim.git] / test / runtest
index a4d49aa79bd46eb09e8cd6358e5b6a932239a2c6..a6ae2844764f3d9907bb27b2ca2ac0261926cd76 100755 (executable)
@@ -461,8 +461,8 @@ RESET_AFTER_EXTRA_LINE_READ:
     my($date1,$date2,$date3,$expired) = ($1,$2,$3,$4);
     $expired = '' if !defined $expired;
 
-    # Round the time-difference up to nearest even value
-    my($increment) = ((date_seconds($date3) - date_seconds($date2) + 1) >> 1) << 1;
+    # Round the time-difference down to nearest even value
+    my($increment) = ((date_seconds($date3) - date_seconds($date2)) >> 1) << 1;
 
     # We used to use globally unique replacement values, but timing
     # differences make this impossible. Just show the increment on the
@@ -1047,6 +1047,9 @@ RESET_AFTER_EXTRA_LINE_READ:
 
     s/\b(gethostbyname2?|\bgetipnodebyname)(\(af=inet\))?/get[host|ipnode]byname[2]/;
 
+    # Extra lookups done when ipv6 is supported
+    next if /^host_fake_gethostbyname\(af=inet6\) returned 1 \(HOST_NOT_FOUND\)$/;
+
     # we don't care what TZ enviroment the testhost was running
     next if /^Reset TZ to/;
 
@@ -1067,13 +1070,16 @@ RESET_AFTER_EXTRA_LINE_READ:
     # this is timing-dependent
     next if /^OpenSSL: creating STEK$/;
 
+    # TLS preload
     # only OpenSSL speaks of these
-    next if /^TLS: preloading DH params for server/;
+    next if /^TLS: preloading (DH params|ECDH curve|CA bundle) for server/;
     next if /^Diffie-Hellman initialized from default/;
-    next if /^TLS: preloading ECDH curve for server/;
-    next if /^ECDH OpenSSL [\d.+]+ temp key parameter settings: default selection$/;
-    next if /^watch dir '\/etc\/pki\/tls'$/;
+    next if /^ECDH OpenSSL [< ]?[\d.+]+ temp key parameter settings:/;
+    next if /^ECDH: .'*prime256v1'/;
+    next if /^tls_verify_certificates: system$/;
+    next if /^tls_set_watch: .*\/cert.pem/;
 
+    # TLS preload
     # only GnuTLS speaks of these
     next if /^GnuTLS global init required$/;
     next if /^TLS: basic cred init, server/;
@@ -1081,6 +1087,12 @@ RESET_AFTER_EXTRA_LINE_READ:
     s/^GnuTLS using default session cipher\/priority "NORMAL"$/TLS: not preloading cipher list for server/;
     next if /^GnuTLS<2>: added \d+ protocols, \d+ ciphersuites, \d+ sig algos and \d+ groups into priority list$/;
 
+    # only kevent platforms (FreeBSD, OpenBSD) say this
+    next if /^watch dir/;
+    next if /^watch file .*\/usr\/local/;
+    next if /^watch file .*\/etc\/ssl/;
+
+    # TLS preload
     # there happen in different orders for OpenSSL/GnuTLS/noTLS
     next if /^TLS: not preloading (CA bundle|cipher list) for server$/;
     next if /^TLS: not preloading server certs$/;
@@ -1241,6 +1253,15 @@ RESET_AFTER_EXTRA_LINE_READ:
     s/^(\s*\d+|ppppp)  \@?(.*exim_daemon_notify)$/ppppp  $2/;
     next if /unlinking notifier socket/;
 
+    # daemon notifier socket
+    # Timing variance over runs.  Collapse repeated memssages.
+    if (/notify triggered queue run/)
+      {
+      my $line = $_;
+      while (/notify triggered queue run/) { $_ = <IN>; }
+      $_ = $line . $_;
+      }
+
     # DISABLE_OCSP
     next if /in hosts_requ(est|ire)_ocsp\? (no|yes)/;
 
@@ -1293,14 +1314,6 @@ RESET_AFTER_EXTRA_LINE_READ:
     next if /^date:\w+,\{SP\}/;
     next if /^DKIM \[[^[]+\] (Header hash|b) computed:/;
 
-    # Timing variable over runs.  Collapse repeated memssages.
-    if (/notify triggered queue run/)
-      {
-      my $line = $_;
-      while (/notify triggered queue run/) { $_ = <IN>; }
-      $_ = $line . $_;
-      }
-
     # Not all platforms support TCP Fast Open, and the compile omits the check
     if (s/\S+ in hosts_try_fastopen\? (no \(option unset\)|no \(end of list\)|yes \(matched "\*"\))\n$//)
       {
@@ -2803,12 +2816,28 @@ print ">> |${cmd}${stderrsuffix}\n" if ($debug);
 open CMD, "|${cmd}${stderrsuffix}" || tests_exit(1, "Failed to run $cmd");
 
 CMD->autoflush(1);
-while (<SCRIPT>)
+LINE: while (<SCRIPT>)
   {
   $lineno++;
   last if /^\*{4}\s*$/;
   do_substitute($testno);
-  s/^\\(>>>\s.*)/$1/ or s/^>>>\s(.*)\s*$/$1/ and $_ = eval "\"$1\"";
+  if (my ($cmd, $line) = /^(:\S+?:)(.*)/) {
+    $_ = $line;
+      {
+      $cmd eq ':eval:' and do {
+        $_ = eval "\"$_\"";
+        last;
+      };
+      $cmd eq ':noeol:' and do {
+        s/[\r\n]*$//;
+        last;
+      };
+      $cmd eq ':sleep:' and do {
+        sleep $_;
+        next LINE;
+      };
+    }
+  }
   print CMD;
   }