aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtests/runtests.pl179
1 files changed, 79 insertions, 100 deletions
diff --git a/tests/runtests.pl b/tests/runtests.pl
index e1fbfa126..dbe5978f8 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -155,116 +155,94 @@ sub serverpid {
# Memory allocation test and failure torture testing.
#
sub torture {
- # start all test servers (http, https, ftp, ftps)
- &startservers(("http", "https", "ftp", "ftps"));
- my $c;
+ my $testcmd = shift;
+ my $gdbline = shift;
- my @test=('http://%HOSTIP:%HOSTPORT/1',
- 'ftp://%HOSTIP:%FTPPORT/1',
- 'http://%HOSTIP:%HOSTPORT/3 -d "poo"');
-
- # loop over the different tests commands
- for(@test) {
- my $cmdargs = "$_";
+ # remove memdump first to be sure we get a new nice and clean one
+ unlink($memdump);
- $c++;
+ # First get URL from test server, ignore the output/result
+ system($testcmd);
- if($tortnum && ($tortnum != $c)) {
- next;
+ print " CMD: $testcmd\n" if($verbose);
+
+ # memanalyze -v is our friend, get the number of allocations made
+ my $count;
+ my @out = `$memanalyze -v $memdump`;
+ for(@out) {
+ if(/^Allocations: (\d+)/) {
+ $count = $1;
+ last;
}
- print "We want test $c\n";
-
- my $redir=">log/torture.stdout 2>log/torture.stderr";
-
- subVariables(\$cmdargs);
-
- my $testcmd = "$CURL $cmdargs $redir";
+ }
- # First get URL from test server, ignore the output/result
- system($testcmd);
+ print " $count allocations to make fail\n";
- # Set up gdb-stuff if desired
- if($gdbthis) {
- open(GDBCMD, ">log/gdbcmd");
- print GDBCMD "set args $cmdargs\n";
- print GDBCMD "show args\n";
- close(GDBCMD);
- $testcmd = "gdb $CURL -x log/gdbcmd";
- }
-
- print "Torture test $c:\n";
- print " CMD: $testcmd\n" if($verbose);
+ for ( 1 .. $count ) {
+ my $limit = $_;
+ my $fail;
+ my $dumped_core;
- # memanalyze -v is our friend, get the number of allocations made
- my $count;
- my @out = `$memanalyze -v $memdump`;
- for(@out) {
- if(/^Allocations: (\d+)/) {
- $count = $1;
- last;
- }
- }
- if(!$count) {
- # hm, no allocations in this fetch, ignore and get next
- print "BEEEP, no allocs found for test $c!!!\n";
+ if($tortalloc && ($tortalloc != $limit)) {
next;
}
- print " $count allocations to excersize\n";
-
- for ( 1 .. $count ) {
- my $limit = $_;
- my $fail;
-
- if($tortalloc && ($tortalloc != $limit)) {
- next;
- }
- print "Alloc no: $limit\r" if(!$gdbthis);
+ print "Fail alloc no: $limit\r" if(!$gdbthis);
- # make the memory allocation function number $limit return failure
- $ENV{'CURL_MEMLIMIT'} = $limit;
+ # make the memory allocation function number $limit return failure
+ $ENV{'CURL_MEMLIMIT'} = $limit;
- # remove memdump first to be sure we get a new nice and clean one
- unlink($memdump);
-
- print "**> Alloc number $limit is now set to fail <**\n" if($gdbthis);
+ # remove memdump first to be sure we get a new nice and clean one
+ unlink($memdump);
+
+ print "**> Alloc number $limit is now set to fail <**\n" if($gdbthis);
- my $ret = system($testcmd);
+ my $ret;
+ if($gdbthis) {
+ system($gdbline)
+ }
+ else {
+ $ret = system($testcmd);
+ }
- # verify that it returns a proper error code, doesn't leak memory
- # and doesn't core dump
- if($ret & 255) {
- print " system() returned $ret\n";
- $fail=1;
- }
- else {
- my @memdata=`$memanalyze $memdump`;
- my $leak=0;
- for(@memdata) {
- if($_ ne "") {
- # well it could be other memory problems as well, but
- # we call it leak for short here
- $leak=1;
- }
- }
- if($leak) {
- print "** MEMORY FAILURE\n";
- print @memdata;
- print `$memanalyze -l $memdump`;
- $fail = 1;
+ if(-r "core") {
+ # there's core file present now!
+ print " core dumped!\n";
+ $dumped_core = 1;
+ $fail = 2;
+ }
+
+ # verify that it returns a proper error code, doesn't leak memory
+ # and doesn't core dump
+ if($ret & 255) {
+ print " system() returned $ret\n";
+ $fail=1;
+ }
+ else {
+ my @memdata=`$memanalyze $memdump`;
+ my $leak=0;
+ for(@memdata) {
+ if($_ ne "") {
+ # well it could be other memory problems as well, but
+ # we call it leak for short here
+ $leak=1;
}
}
- if($fail) {
- print " Failed on alloc number $limit in test $c.\n",
- " invoke with -t$c,$limit to repeat this single case.\n";
- stopservers();
- exit 1;
+ if($leak) {
+ print "** MEMORY FAILURE\n";
+ print @memdata;
+ print `$memanalyze -l $memdump`;
+ $fail = 1;
}
}
- print "\n torture test $c did GOOD\n";
-
- # all is well, now test a different kind of URL
+ if($fail) {
+ print " Failed on alloc number $limit in test.\n",
+ " invoke with -t$limit to repeat this single case.\n";
+ stopservers();
+ exit 1;
+ }
}
+
stopservers();
exit; # for now, we stop after these tests
}
@@ -1051,12 +1029,20 @@ sub singletest {
my $dumped_core;
my $cmdres;
- # run the command line we built
+
+
if($gdbthis) {
open(GDBCMD, ">log/gdbcmd");
print GDBCMD "set args $cmdargs\n";
print GDBCMD "show args\n";
close(GDBCMD);
+ }
+ # run the command line we built
+ if ($torture) {
+ torture($CMDLINE,
+ "gdb --directory libtest $DBGCURL -x log/gdbcmd");
+ }
+ elsif($gdbthis) {
system("gdb --directory libtest $DBGCURL -x log/gdbcmd");
$cmdres=0; # makes it always continue after a debugged run
}
@@ -1466,9 +1452,7 @@ do {
# torture
$torture=1;
my $xtra = $1;
- if($xtra =~ s/^(\d+)//) {
- $tortnum = $1;
- }
+
if($xtra =~ s/(\d+)$//) {
$tortalloc = $1;
}
@@ -1584,11 +1568,6 @@ open(CMDLOG, ">$CURLLOG") ||
print "can't log command lines to $CURLLOG\n";
#######################################################################
-# Torture the memory allocation system and checks
-#
-if($torture) {
- &torture();
-}
sub displaylogcontent {
my ($file)=@_;