Add some tolerance for QT= value in tests.
[users/heiko/exim.git] / test / runtest
index 9d84232ff8e680a1c8798f5dfebbeebc526b76c8..0d5b105049b3d73694b5ac116c8dd31cca0e785c 100755 (executable)
@@ -1,6 +1,6 @@
 #! /usr/bin/perl -w
 
-# $Cambridge: exim/test/runtest,v 1.11 2006/07/03 15:39:06 ph10 Exp $
+# $Cambridge: exim/test/runtest,v 1.22 2007/01/23 14:57:51 ph10 Exp $
 
 ###############################################################################
 # This is the controlling script for the "new" test suite for Exim. It should #
@@ -23,7 +23,7 @@ use Socket;
 
 # Start by initializing some global variables
 
-$testversion = "4.62 (20-Apr-06)";
+$testversion = "4.67 (15-Jan-07)";
 
 $cf = "bin/cf";
 $cr = "\r";
@@ -98,6 +98,7 @@ sub inthandler { print "\n"; tests_exit(-1, "Caught SIGINT"); }
 
 sub do_substitute{
 s?\bCALLER\b?$parm_caller?g;
+s?\bCALLERGROUP\b?$parm_caller_group?g;
 s?\bCALLER_UID\b?$parm_caller_uid?g;
 s?\bCALLER_GID\b?$parm_caller_gid?g;
 s?\bCLAMSOCKET\b?$parm_clamsocket?g;
@@ -358,6 +359,10 @@ while(<IN>)
   # Random local part in callout cache testing
   s/myhost.test.ex-\d+-testing/myhost.test.ex-dddddddd-testing/;
 
+  # File descriptor numbers may vary
+  s/^writing data block fd=\d+/writing data block fd=dddd/;
+  s/running as transport filter: write=\d+ read=\d+/running as transport filter: write=dddd read=dddd/;
+
 
   # ======== Dumpdb output ========
   # This must be before the general date/date munging.
@@ -414,7 +419,7 @@ while(<IN>)
     $_ = "  first failed=dddd last try=dddd next try=+$next $4\n";
     }
   s/^(\s*)now=\d+ first_failed=\d+ next_try=\d+ expired=(\d)/$1now=tttt first_failed=tttt next_try=tttt expired=$2/;
-  s/^(\s*)received_time=\d+ diff=\d+ timeout=(\d+)/$1now=tttt received_time=tttt diff=tttt timeout=$2/;
+  s/^(\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/;
@@ -424,6 +429,9 @@ while(<IN>)
   # Date/time in exim -bV output
   s/\d\d-[A-Z][a-z]{2}-\d{4}\s\d\d:\d\d:\d\d/07-Mar-2000 12:21:52/g;
 
+  # Time on queue tolerance
+  s/QT=1s/QT=0s/;
+
 
   # ======== Caller's login, uid, gid, home ========
 
@@ -585,7 +593,7 @@ while(<IN>)
 
 
   # ======== Values in spool space failure message ========
-  s/space=\d+ inodes=\d+/space=xxxxx inodes=xxxxx/;
+  s/space=\d+ inodes=[+-]?\d+/space=xxxxx inodes=xxxxx/;
 
 
   # ======== Filter sizes ========
@@ -859,7 +867,7 @@ my($rf,$rsf,$mf,$sf,$sortfile) = @_;
 
 if (! -e $sf)
   {
-  return 0 if (! -s $rf && ! -s $rsf);
+  return 0 if (! -s $rf && (! defined $rsf || ! -s $rsf));
 
   print "\n";
   print "** $rf is not empty\n" if (-s $rf);
@@ -1387,7 +1395,7 @@ if (/^exim_lock\s+(.*)$/)
   # This gives the process time to get started; otherwise the next
   # process may not find it there when it expects it.
 
-  select(undef, undef, undef, 0.01);
+  select(undef, undef, undef, 0.1);
   return 3;
   }
 
@@ -1509,7 +1517,7 @@ if (/^server\s+(.*)$/)
   # This gives the server time to get started; otherwise the next
   # process may not find it there when it expects it.
 
-  select(undef, undef, undef, 0.01);
+  select(undef, undef, undef, 0.5);
   return 3;
   }
 
@@ -1589,12 +1597,12 @@ if (/^(cat)?write\s+(\S+)(?:\s+(.*))?\s*$/)
 # command in the variable $cmd. Shared code to run this command and handle its
 # input and output follows.
 
-# The "client" and "client-ssl" commands run a script-driven program that plays
-# the part of an email client. We also have the availability of running Perl
-# for doing one-off special things. Note that all these commands expect stdin
-# data to be supplied.
+# The "client", "client-gnutls", and "client-ssl" commands run a script-driven
+# program that plays the part of an email client. We also have the availability
+# of running Perl for doing one-off special things. Note that all these
+# commands expect stdin data to be supplied.
 
-if (/^client/ || /^client-ssl/ || /^(sudo\s+)?perl\b/)
+if (/^client/ || /^(sudo\s+)?perl\b/)
   {
   s"client"./bin/client";
   $cmd = "$_ >>test-stdout 2>>test-stderr";
@@ -1686,9 +1694,11 @@ elsif (/^([A-Z_]+=\S+\s+)?(\d+)?\s*(sudo\s+)?exim(_\S+)?\s+(.*)$/)
 
     # Before running the command, convert the -bd option into -bdf so that an
     # Exim daemon doesn't double fork. This means that when we wait close
-    # DAEMONCMD, it waits for the correct process.
+    # DAEMONCMD, it waits for the correct process. Also, ensure that the pid
+    # file is written to the spool directory, in case the Exim binary was
+    # built with PID_FILE_PATH pointing somewhere else.
 
-    $cmd =~ s/\s-bd\s/ -bdf /;
+    $cmd =~ s!\s-bd\s! -bdf -oP $parm_cwd/spool/exim-daemon.pid !;
     print ">> |${cmd}-server\n" if ($debug);
     open DAEMONCMD, "|${cmd}-server" || tests_exit(-1, "Failed to run $cmd");
     DAEMONCMD->autoflush(1);
@@ -2037,7 +2047,6 @@ if (defined $parm_support{'Content_Scanning'})
   {
   if (system("spamc -h 2>/dev/null >/dev/null") == 0)
     {
-    $parm_running{'SpamAssassin'} = ' ';
     print "The spamc command works:\n";
 
     # This test for an active SpamAssassin is courtesy of John Jetmore.
@@ -2199,7 +2208,7 @@ if (defined $parm_support{'Content_Scanning'})
 
         if($@)
           {
-          warn $@;
+          print "  $@";
           print "  Assume ClamAV is not running\n";
           }
         else
@@ -2412,7 +2421,7 @@ print "IPv6 address is $parm_ipv6\n";
 $parm_ipv4r = ($parm_ipv4 !~ /^\d/)? "" :
   join(".", reverse(split /\./, $parm_ipv4));
 
-$parm_ipv6r = "";
+$parm_ipv6r = $parm_ipv6;             # Appropriate if not in use
 if ($parm_ipv6 =~ /^[\da-f]/)
   {
   my(@comps) = split /:/, $parm_ipv6;