Testsuite: tidyup runtest
[users/jgh/exim.git] / test / runtest
index 8b735c1ffbb9d54ff64c1e8ac4b06365d7d08c13..a0d7fd14b92e249f7a0dd1c0c114ebbbb7779a26 100755 (executable)
@@ -46,10 +46,13 @@ $testversion = "4.80 (08-May-12)";
 # normal = 2432   tls_dh_max_bits = 2236
 $gnutls_dh_bits_normal = 2236;
 
-$cf = "bin/cf -exact";
+$cf = 'bin/cf -exact';
 $cr = "\r";
 $debug = 0;
-$flavour = 'FOO';
+$flavour = do {
+  my $f = Exim::Runtest::flavour();
+  (grep { $f eq $_ } Exim::Runtest::flavours()) ? $f : 'FOO';
+};
 $force_continue = 0;
 $force_update = 0;
 $log_failed_filename = "failed-summary.log";
@@ -888,7 +891,7 @@ RESET_AFTER_EXTRA_LINE_READ:
     next if /^SSL info: SSLv2\/v3 write client hello A/;
     next if /^SSL info: SSLv3 read server key exchange A/;
     next if /SSL verify error: depth=0 error=certificate not trusted/;
-    s/SSL3_READ_BYTES/ssl3_read_bytes/;
+    s/SSL3_READ_BYTES/ssl3_read_bytes/i;
 
     # gnutls version variances
     next if /^Error in the pull function./;
@@ -1153,11 +1156,22 @@ return $yield;
 #            [2] if there is a C in the prompt and $force_continue is true
 # Returns:   returns the answer
 
-sub interact{
-print $_[0];
-if ($_[1]) { $_ = "u"; print "... update forced\n"; }
-  elsif ($_[2]) { $_ = "c"; print "... continue forced\n"; }
-  else { $_ = <T>; }
+sub interact {
+  my ($prompt, $have_u, $have_c) = @_;
+
+  print $prompt;
+
+  if ($have_u) {
+    print "... update forced\n";
+    return 'u';
+  }
+
+  if ($have_c) {
+    print "... continue forced\n";
+    return 'c';
+  }
+
+  return lc <T>;
 }
 
 
@@ -1177,13 +1191,13 @@ if ($_[1]) { $_ = "u"; print "... update forced\n"; }
 
 
 sub log_failure {
-  my $logfile = shift();
-  my $testno  = shift();
-  my $detail  = shift() || '';
-  if ( open(my $fh, ">>", $logfile) ) {
-    print $fh "Test $testno $detail failed\n";
-    close $fh;
-  }
+  my ($logfile, $testno, $detail) = @_;
+
+  open(my $fh, '>>', $logfile) or return;
+
+  print $fh "Test $testno "
+        . (defined $detail ? "$detail " : '')
+        . "failed\n";
 }
 
 
@@ -1230,10 +1244,9 @@ if (! -e $sf_current)
 
   for (;;)
     {
-    print "Continue, Show, or Quit? [Q] ";
-    $_ = $force_continue ? "c" : <T>;
-    tests_exit(1) if /^q?$/i;
-    log_failure($log_failed_filename, $testno, $rf) if (/^c$/i && $force_continue);
+    $_ = interact('Continue, Show, or Quit? [Q] ', undef, $force_continue);
+    tests_exit(1) if /^q?$/;
+    log_failure($log_failed_filename, $testno, $rf) if (/^c$/ && $force_continue);
     return 0 if /^c$/i;
     last if (/^s$/);
     }
@@ -1252,9 +1265,9 @@ if (! -e $sf_current)
   print "\n";
   for (;;)
     {
-    interact("Continue, Update & retry, Quit? [Q] ", $force_update, $force_continue);
-    tests_exit(1) if /^q?$/i;
-    log_failure($log_failed_filename, $testno, $rsf) if (/^c$/i && $force_continue);
+    $_ = interact('Continue, Update & retry, Quit? [Q] ', $force_update, $force_continue);
+    tests_exit(1) if /^q?$/;
+    log_failure($log_failed_filename, $testno, $rsf) if (/^c$/ && $force_continue);
     return 0 if /^c$/i;
     last if (/^u$/i);
     }
@@ -1372,10 +1385,10 @@ if (-e $sf_current)
   print "\n";
   for (;;)
     {
-    interact("Continue, Retry, Update current"
-       . ($sf_current ne $sf_flavour  ? "/Save for flavour '$flavour'" : "")
-       . " & retry, Quit? [Q] ", $force_update, $force_continue);
-    tests_exit(1) if /^q?$/i;
+    $_ = interact('Continue, Retry, Update current'
+       . ($sf_current ne $sf_flavour  ? "/Save for flavour '$flavour'" : '')
+       . ' & retry, Quit? [Q] ', $force_update, $force_continue);
+    tests_exit(1) if /^q?$/;
     log_failure($log_failed_filename, $testno, $sf_current) if (/^c$/i && $force_continue);
     return 0 if /^c$/i;
     return 1 if /^r$/i;
@@ -1592,16 +1605,16 @@ if (! $message_skip)
 
     for (;;)
       {
-      interact("Continue, Update & retry, or Quit? [Q] ", $force_update, $force_continue);
-      tests_exit(1) if /^q?$/i;
-      log_failure($log_failed_filename, $testno, "missing email") if (/^c$/i && $force_continue);
-      last if /^c$/i;
+      $_ = interact('Continue, Update & retry, or Quit? [Q] ', $force_update, $force_continue);
+      tests_exit(1) if /^q?$/;
+      log_failure($log_failed_filename, $testno, "missing email") if (/^c$/ && $force_continue);
+      last if /^c$/;
 
       # For update, we not only have to unlink the file, but we must also
       # remove it from the @oldmails vector, as otherwise it will still be
       # checked for when we re-run the test.
 
-      if (/^u$/i)
+      if (/^u$/)
         {
         foreach $key (keys %expected_mails)
           {
@@ -1676,11 +1689,11 @@ if (! $msglog_skip)
 
     for (;;)
       {
-      interact("Continue, Update, or Quit? [Q] ", $force_update, $force_continue);
-      tests_exit(1) if /^q?$/i;
-      log_failure($log_failed_filename, $testno, "missing msglog") if (/^c$/i && $force_continue);
-      last if /^c$/i;
-      if (/^u$/i)
+      $_ = interact('Continue, Update, or Quit? [Q] ', $force_update, $force_continue);
+      tests_exit(1) if /^q?$/;
+      log_failure($log_failed_filename, $testno, "missing msglog") if (/^c$/ && $force_continue);
+      last if /^c$/;
+      if (/^u$/)
         {
         foreach $key (keys %expected_msglogs)
           {
@@ -1709,14 +1722,9 @@ return $yield;
 # Returns:  nothing
 
 sub run_system {
-my($cmd) = $_[0];
-if ($debug)
-  {
-  my($prcmd) = $cmd;
-  $prcmd =~ s/; /;\n>> /;
-  print ">> $prcmd\n";
-  }
-system("$cmd");
+  my $cmd = shift;
+  print '>> ' . $cmd =~ s/; /;\n>>/r . "\n" if $debug;
+  system $cmd;
 }
 
 
@@ -2243,7 +2251,7 @@ elsif (/^((?i:[A-Z\d_]+=\S+\s+)+)?(\d+)?\s*(sudo(?:\s+-u\s+(\w+))?\s+)?exim(_\S+
     {
     $pidfile = "$parm_cwd/spool/exim-daemon.pid";
     if ($debug) { printf ">> daemon: $cmd\n"; }
-    run_system("sudo mkdir spool/log 2>/dev/null");
+    run_system('sudo mkdir spool/log 2>/dev/null');
     run_system("sudo chown $parm_eximuser:$parm_eximgroup spool/log");
 
     # Before running the command, convert the -bd option into -bdf so that an
@@ -2279,7 +2287,7 @@ elsif (/^((?i:[A-Z\d_]+=\S+\s+)+)?(\d+)?\s*(sudo(?:\s+-u\s+(\w+))?\s+)?exim(_\S+
 
     my $listen_port = $1;
     if ($debug) { printf ">> wait-mode daemon: $cmd\n"; }
-    run_system("sudo mkdir spool/log 2>/dev/null");
+    run_system('sudo mkdir spool/log 2>/dev/null');
     run_system("sudo chown $parm_eximuser:$parm_eximgroup spool/log");
 
     my $pid = fork();
@@ -2579,7 +2587,7 @@ ___
   $parm_trusted_config_list = $1 if /^TRUSTED_CONFIG_LIST:.*?"(.*?)"$/;
   ($parm_configure_owner, $parm_configure_group) = ($1, $2)
        if /^Configure owner:\s*(\d+):(\d+)/;
-  print "$_" if /wrong owner/;
+  print if /wrong owner/;
   }
 close(EXIMINFO);
 
@@ -3172,13 +3180,9 @@ if ($parm_hostname =~ /[[:upper:]]/)
 # that was done above. Furthermore, we ensure that the binary is deleted at the
 # end of the test. First ensure the directory exists.
 
-if (-d "eximdir")
-  { unlink "eximdir/exim"; }     # Just in case
-else
-  {
-  mkdir("eximdir", 0710) || die "** Unable to mkdir $parm_cwd/eximdir: $!\n";
-  system("sudo chgrp $parm_eximgroup eximdir");
-  }
+unlink 'eximdir/exim';  # Just in case
+-d 'eximdir' or mkdir('eximdir', 0710) or die "** Unable to mkdir $parm_cwd/eximdir: $!\n";
+system("sudo chgrp $parm_eximgroup eximdir");
 
 # The construction of the patched binary must be done as root, so we use
 # a separate script. As well as indicating that this is a test-harness binary,
@@ -3193,16 +3197,16 @@ die "** Unable to make patched exim: $!\n"
 # tests_exit(), so that suitable cleaning up can be done when required.
 # Arrange to catch interrupting signals, to assist with this.
 
-$SIG{'INT'} = \&inthandler;
-$SIG{'PIPE'} = \&pipehandler;
+$SIG{INT} = \&inthandler;
+$SIG{PIPE} = \&pipehandler;
 
 # For some tests, we need another copy of the binary that is setuid exim rather
 # than root.
 
-system("sudo cp eximdir/exim eximdir/exim_exim;" .
+system('sudo cp eximdir/exim eximdir/exim_exim;' .
        "sudo chown $parm_eximuser eximdir/exim_exim;" .
        "sudo chgrp $parm_eximgroup eximdir/exim_exim;" .
-       "sudo chmod 06755 eximdir/exim_exim");
+       'sudo chmod 06755 eximdir/exim_exim');
 
 
 ##################################################