Testsuite: better non-TFO-system debug handling
[exim.git] / test / runtest
index 1ec546e6d8f0305eb3c02979bd6d3155ea844547..87c78070e45dd9a2f1aac88acf912deafbc4619c 100755 (executable)
@@ -64,7 +64,7 @@ my $force_continue = 0;
 my $force_update = 0;
 my $log_failed_filename = 'failed-summary.log';
 my $log_summary_filename = 'run-summary.log';
 my $force_update = 0;
 my $log_failed_filename = 'failed-summary.log';
 my $log_summary_filename = 'run-summary.log';
-my $more = 'less -XF';
+my @more = qw'less -XF';
 my $optargs = '';
 my $save_output = 0;
 my $server_opts = '';
 my $optargs = '';
 my $save_output = 0;
 my $server_opts = '';
@@ -800,6 +800,12 @@ RESET_AFTER_EXTRA_LINE_READ:
   # Also, the length of space at the end of the host line is dependent
   # on the length of the longest line, so strip it also on otherwise
   # un-rewritten lines like localhost
   # Also, the length of space at the end of the host line is dependent
   # on the length of the longest line, so strip it also on otherwise
   # un-rewritten lines like localhost
+  #
+  # host 127.0.0.1     [127.0.0.1]
+  # host 10.0.0.1      [10.0.0.1]-
+  #
+  # host 127.0.0.1     [127.0.0.1]--
+  # host 169.16.16.16  [169.16.16.10]
 
   s/^\s+host\s(\S+)\s+(\S+)/  host $1 $2/;
   s/^\s+(host\s\S+\s\S+)\s+(port=.*)/  host $1 $2/;
 
   s/^\s+host\s(\S+)\s+(\S+)/  host $1 $2/;
   s/^\s+(host\s\S+\s\S+)\s+(port=.*)/  host $1 $2/;
@@ -811,7 +817,7 @@ RESET_AFTER_EXTRA_LINE_READ:
   s/(^|\W)\K\Q$parm_ipv6_stripped\E/ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6/g;
   s/\b\Q$parm_ipv4r\E\b/ip4-reverse/g;
   s/(^|\W)\K\Q$parm_ipv6r\E/ip6-reverse/g;
   s/(^|\W)\K\Q$parm_ipv6_stripped\E/ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6/g;
   s/\b\Q$parm_ipv4r\E\b/ip4-reverse/g;
   s/(^|\W)\K\Q$parm_ipv6r\E/ip6-reverse/g;
-  s/^(\s+host\s\S+\s+\[\S+\]) +$/$1 /;
+  s/^\s+host\s\S+\s+\[\S+\]\K +$//;     # strip, not collapse the trailing whitespace
 
 
   # ======== Test network IP addresses ========
 
 
   # ======== Test network IP addresses ========
@@ -1250,9 +1256,10 @@ RESET_AFTER_EXTRA_LINE_READ:
     # Not all platforms support TCP Fast Open, and the compile omits the check
     if (s/\S+ in hosts_try_fastopen\? (no \(option unset\)|yes \(matched "\*"\))\n$//)
       {
     # Not all platforms support TCP Fast Open, and the compile omits the check
     if (s/\S+ in hosts_try_fastopen\? (no \(option unset\)|yes \(matched "\*"\))\n$//)
       {
+      chomp;
       $_ .= <IN>;
       s/ \.\.\. >>> / ... /;
       $_ .= <IN>;
       s/ \.\.\. >>> / ... /;
-      if (s/ non-TFO mode connection attempt to 224.0.0.0, 0 data\b$//) { $_ .= <IN>; }
+      if (s/ non-TFO mode connection attempt to 224.0.0.0, 0 data\b$//) { chomp; $_ .= <IN>; }
       s/Address family not supported by protocol family/Network Error/;
       s/Network is unreachable/Network Error/;
       }
       s/Address family not supported by protocol family/Network Error/;
       s/Network is unreachable/Network Error/;
       }
@@ -1550,7 +1557,7 @@ if (! -e $sf_current)
       print "\n";
       print "------------ $f -----------\n"
         if (defined $rf && -s $rf && defined $rsf && -s $rsf);
       print "\n";
       print "------------ $f -----------\n"
         if (defined $rf && -s $rf && defined $rsf && -s $rsf);
-      system("$more '$f'");
+      system @more => $f;
       }
     }
 
       }
     }
 
@@ -1674,7 +1681,7 @@ if (-e $sf_current)
   # Handle comparison failure
 
   print "** Comparison of $mf with $sf_current failed";
   # Handle comparison failure
 
   print "** Comparison of $mf with $sf_current failed";
-  system("$more test-cf");
+  system @more => 'test-cf';
 
   print "\n";
   for (;;)
 
   print "\n";
   for (;;)
@@ -2793,7 +2800,7 @@ umask 022;
 #       Check for the "less" command             #
 ##################################################
 
 #       Check for the "less" command             #
 ##################################################
 
-$more = 'more' if system('which less >/dev/null 2>&1') != 0;
+@more = 'more' if system('which less >/dev/null 2>&1') != 0;
 
 
 
 
 
 
@@ -2818,7 +2825,7 @@ Getopt::Long::Configure qw(no_getopt_compat);
 GetOptions(
     'debug'    => sub { $debug          = 1; $cr   = "\n" },
     'diff'     => sub { $cf             = 'diff -u' },
 GetOptions(
     'debug'    => sub { $debug          = 1; $cr   = "\n" },
     'diff'     => sub { $cf             = 'diff -u' },
-    'continue' => sub { $force_continue = 1; $more = 'cat' },
+    'continue' => sub { $force_continue = 1; @more = 'cat' },
     'update'   => \$force_update,
     'ipv4!'    => \$have_ipv4,
     'ipv6!'    => \$have_ipv6,
     'update'   => \$force_update,
     'ipv4!'    => \$have_ipv4,
     'ipv6!'    => \$have_ipv6,
@@ -3452,7 +3459,8 @@ while (not ($parm_ipv4 and $parm_ipv6) and defined($_ = <IFCONFIG>))
     $parm_ipv4 = $1;
     }
 
     $parm_ipv4 = $1;
     }
 
-  if (not $parm_ipv6 and /^\s*inet6(?:\saddr)?:?\s?([abcdef\d:]+)(?:%[^ \/]+)?(?:\/\d+)?/i)
+  if (   (not $parm_ipv6 or $parm_ipv6 =~ /%/)
+     and /^\s*inet6(?:\saddr)?:?\s?([abcdef\d:]+)(?:%[^ \/]+)?(?:\/\d+)?/i)
     {
     next if $1 eq '::' or $1 eq '::1' or $1 =~ /^ff00/i or $1 =~ /^fe80::1/i;
     $parm_ipv6 = $1;
     {
     next if $1 eq '::' or $1 eq '::1' or $1 =~ /^ff00/i or $1 =~ /^fe80::1/i;
     $parm_ipv6 = $1;
@@ -3821,6 +3829,10 @@ DIR: for (my $i = 0; $i < @test_dirs; $i++)
        }
        unlink("$parm_cwd/test-config");
         }
        }
        unlink("$parm_cwd/test-config");
         }
+      elsif (/^ipv6-non-linklocal/)
+       {
+       if ($parm_ipv6 =~ /%/) { $wantthis = 0; last; }
+       }
       else
         {
         tests_exit(-1, "Unknown line in \"scripts/$testdir/REQUIRES\": \"$_\"");
       else
         {
         tests_exit(-1, "Unknown line in \"scripts/$testdir/REQUIRES\": \"$_\"");
@@ -4313,11 +4325,11 @@ foreach $test (@test_list)
         last if /^[rc]$/i;
         if (/^e$/i)
           {
         last if /^[rc]$/i;
         if (/^e$/i)
           {
-          system("$more test-stderr");
+          system @more => 'test-stderr';
           }
         elsif (/^o$/i)
           {
           }
         elsif (/^o$/i)
           {
-          system("$more test-stdout");
+          system @more => 'test-stdout';
           }
         }
 
           }
         }