diff --git a/tests/runtests.1 b/tests/runtests.1 index 18ddce483..bb36a8b44 100644 --- a/tests/runtests.1 +++ b/tests/runtests.1 @@ -5,7 +5,7 @@ .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * -.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, , et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms @@ -84,6 +84,11 @@ Display run time statistics. (Requires Perl Time::HiRes module) Display full run time statistics. (Requires Perl Time::HiRes module) .IP "-s" Shorter output. Speaks less than default. +.IP "--shallow=[num](,seed)" +Used together with \fB-t\fP. This limits the number of tests to fail in +torture mode to no more than 'num' per test case. If this reduces the amount, +the given 'seed' will be used to randomly discard entries to fail until the +amount is 'num'. .IP "-t[num]" Selects a \fBtorture\fP test for the given tests. This makes runtests.pl first run the tests once and count the number of memory allocations made. It then diff --git a/tests/runtests.pl b/tests/runtests.pl index 961cdb753..6ee2cca20 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -321,6 +321,8 @@ my %runcert; # cert file currently in use by an ssl running server my $torture; my $tortnum; my $tortalloc; +my $shallow; +my $shallowseed; ####################################################################### # logmsg is our general message logging subroutine. @@ -598,13 +600,34 @@ sub torture { return 0; } - logmsg " $count functions to make fail\n"; + my @ttests = (1 .. $count); + if($shallow && ($shallow < $count)) { + my $discard = scalar(@ttests) - $shallow; + my $percent = sprintf("%.2f%%", $shallow * 100 / scalar(@ttests));; + logmsg " $count functions found, but only fail $shallow ($percent)\n"; + while($discard) { + my $rm; + do { + # find a test to discard + $rm = rand(scalar(@ttests)); + } while(!$ttests[$rm]); + $ttests[$rm] = undef; + $discard--; + } + } + else { + logmsg " $count functions to make fail\n"; + } - for ( 1 .. $count ) { + for (@ttests) { my $limit = $_; my $fail; my $dumped_core; + if(!defined($limit)) { + # --shallow can undefine them + next; + } if($tortalloc && ($tortalloc != $limit)) { next; } @@ -5022,6 +5045,14 @@ while(@ARGV) { $tortalloc = $1; } } + elsif($ARGV[0] =~ /--shallow=(\d+)(,|)(\d*)/) { + # Fail no more than this amount per tests when running + # torture. + my ($num, $seed)=($1,$3); + $shallow=$num; + $shallowseed=$seed?$seed:1234; # get a real seed later + srand($shallowseed); # make it predictable + } elsif($ARGV[0] eq "-a") { # continue anyway, even if a test fail $anyway=1; @@ -5070,6 +5101,7 @@ while(@ARGV) { print <