test/run_tests.pl: In parallel runs, start those tests first that run longest
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>
Thu, 2 Jul 2020 15:59:55 +0000 (17:59 +0200)
committerDr. David von Oheimb <David.von.Oheimb@siemens.com>
Thu, 16 Jul 2020 19:44:25 +0000 (21:44 +0200)
Also untabify the Perl source file.

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/12359)

test/run_tests.pl

index d47f7cf1e661d47979115b37a39f41a0f351ead7..73d4d91931c08a89f7b75d8fc38e65720f5625f0 100644 (file)
@@ -70,44 +70,54 @@ open $openssl_args{'tap_copy'}, ">$outfilename"
 my @alltests = find_matching_tests("*");
 my %tests = ();
 
+sub reorder {
+    my $key = pop;
+
+    # for parallel test runs, do slow tests first
+    if (defined $jobs && $jobs > 1 && $key =~ m/test_ssl_new|test_fuzz/) {
+        $key =~ s/(\d+)-/00-/;
+    }
+    return $key;
+}
+
 my $initial_arg = 1;
 foreach my $arg (@ARGV ? @ARGV : ('alltests')) {
     if ($arg eq 'list') {
-       foreach (@alltests) {
-           (my $x = basename($_)) =~ s|^[0-9][0-9]-(.*)\.t$|$1|;
-           print $x,"\n";
-       }
-       exit 0;
+        foreach (@alltests) {
+            (my $x = basename($_)) =~ s|^[0-9][0-9]-(.*)\.t$|$1|;
+            print $x,"\n";
+        }
+        exit 0;
     }
     if ($arg eq 'alltests') {
-       warn "'alltests' encountered, ignoring everything before that...\n"
-           unless $initial_arg;
-       %tests = map { $_ => basename($_) } @alltests;
+        warn "'alltests' encountered, ignoring everything before that...\n"
+            unless $initial_arg;
+        %tests = map { $_ => 1 } @alltests;
     } elsif ($arg =~ m/^(-?)(.*)/) {
-       my $sign = $1;
-       my $test = $2;
-       my @matches = find_matching_tests($test);
-
-       # If '-foo' is the first arg, it's short for 'alltests -foo'
-       if ($sign eq '-' && $initial_arg) {
-           %tests = map { $_ => basename($_) } @alltests;
-       }
-
-       if (scalar @matches == 0) {
-           warn "Test $test found no match, skipping ",
-               ($sign eq '-' ? "removal" : "addition"),
-               "...\n";
-       } else {
-           foreach $test (@matches) {
-               if ($sign eq '-') {
-                   delete $tests{$test};
-               } else {
-                   $tests{$test} = basename($test);
-               }
-           }
-       }
+        my $sign = $1;
+        my $test = $2;
+        my @matches = find_matching_tests($test);
+
+        # If '-foo' is the first arg, it's short for 'alltests -foo'
+        if ($sign eq '-' && $initial_arg) {
+            %tests = map { $_ => 1 } @alltests;
+        }
+
+        if (scalar @matches == 0) {
+            warn "Test $test found no match, skipping ",
+                ($sign eq '-' ? "removal" : "addition"),
+                "...\n";
+        } else {
+            foreach $test (@matches) {
+                if ($sign eq '-') {
+                    delete $tests{$test};
+                } else {
+                    $tests{$test} = 1;
+                }
+            }
+        }
     } else {
-       warn "I don't know what '$arg' is about, ignoring...\n";
+        warn "I don't know what '$arg' is about, ignoring...\n";
     }
 
     $initial_arg = 0;
@@ -280,8 +290,8 @@ unless (defined $eres) {
 
 my $harness = $package->new(\%tapargs);
 my $ret =
-    $harness->runtests(map { [ abs2rel($_, rel2abs(curdir())), $tests{$_} ] }
-                       sort keys %tests);
+    $harness->runtests(map { [ abs2rel($_, rel2abs(curdir())), basename($_) ] }
+                       sort { reorder($a) cmp reorder($b) } keys %tests);
 
 # $ret->has_errors may be any number, not just 0 or 1.  On VMS, numbers
 # from 2 and on are used as is as VMS statuses, which has severity encoded