From 1e76cb002a8d89b66b67214921b921c4cb9f6506 Mon Sep 17 00:00:00 2001 From: "Dr. David von Oheimb" Date: Thu, 2 Jul 2020 17:59:55 +0200 Subject: [PATCH] test/run_tests.pl: In parallel runs, start those tests first that run longest Also untabify the Perl source file. Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/12359) --- test/run_tests.pl | 76 +++++++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 33 deletions(-) diff --git a/test/run_tests.pl b/test/run_tests.pl index d47f7cf1e66..73d4d91931c 100644 --- a/test/run_tests.pl +++ b/test/run_tests.pl @@ -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 -- 2.47.2