Adjust valgrind logs file name detection.

Adjust environment vars setting and restoring from test definition.

Avoid using strftime in torture sub.
This commit is contained in:
Yang Tse 2010-01-20 18:31:52 +00:00
parent 48032c0880
commit d2e1ec58f2
1 changed files with 54 additions and 38 deletions

View File

@ -489,7 +489,6 @@ sub runclientoutput {
# Memory allocation test and failure torture testing.
#
sub torture {
use POSIX "strftime";
my $testcmd = shift;
my $gdbline = shift;
@ -526,7 +525,12 @@ sub torture {
next;
}
logmsg "Fail alloc no: $limit @ " . strftime ("%H:%M:%S", localtime) . "\r" if($verbose);
if($verbose) {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time());
my $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec);
logmsg "Fail alloc no: $limit at $now\r";
}
# make the memory allocation function number $limit return failure
$ENV{'CURL_MEMLIMIT'} = $limit;
@ -534,7 +538,7 @@ sub torture {
# remove memdump first to be sure we get a new nice and clean one
unlink($memdump);
logmsg "**> Alloc number $limit is now set to fail <**\n" if($gdbthis);
logmsg "*** Alloc number $limit is now set to fail ***\n" if($gdbthis);
my $ret;
if($gdbthis) {
@ -543,7 +547,7 @@ sub torture {
else {
$ret = runclient($testcmd);
}
#logmsg "$_ Returned " . $ret / 256 . "\n";
#logmsg "$_ Returned " . $ret >> 8 . "\n";
# Now clear the variable again
$ENV{'CURL_MEMLIMIT'} = undef if($ENV{'CURL_MEMLIMIT'});
@ -580,7 +584,7 @@ sub torture {
}
if($fail) {
logmsg " Failed on alloc number $limit in test.\n",
" invoke with -t$limit to repeat this single case.\n";
" invoke with \"-t$limit\" to repeat this single case.\n";
stopservers($verbose);
return 1;
}
@ -2283,20 +2287,25 @@ sub singletest {
writearray($FTPDCMD, \@ftpservercmd);
}
my (@setenv)= getpart("client", "setenv");
my @envs;
my $s;
for $s (@setenv) {
chomp $s; # cut off the newline
subVariables \$s;
if($s =~ /([^=]*)=(.*)/) {
my ($var, $content)=($1, $2);
$ENV{$var}=$content;
# remember which, so that we can clear them afterwards!
push @envs, $var;
# test definition may instruct to (un)set environment vars
my %oldenv;
my @setenv = getpart("client", "setenv");
if(@setenv) {
foreach my $s (@setenv) {
chomp $s;
subVariables \$s;
if($s =~ /([^=]*)=(.*)/) {
my ($var, $content) = ($1, $2);
# remember current setting, to restore it once test runs
$oldenv{$var} = ($ENV{$var})?"$ENV{$var}":'notset';
# set new value
if(!$content) {
$ENV{$var} = undef if($ENV{$var});
}
else {
$ENV{$var} = "$content";
}
}
}
}
@ -2608,9 +2617,16 @@ sub singletest {
}
}
my $e;
for $e (@envs) {
$ENV{$e}=""; # clean up
# restore environment variables that were modified
if(%oldenv) {
foreach my $var (keys %oldenv) {
if($oldenv{$var} eq 'notset') {
$ENV{$var} = undef if($ENV{$var});
}
else {
$ENV{$var} = "$oldenv{$var}";
}
}
}
# Skip all the verification on torture tests
@ -2801,7 +2817,7 @@ sub singletest {
# accept multiple comma-separated error codes
my @splerr = split(/ *, */, $errorcode);
my $errok;
foreach $e (@splerr) {
foreach my $e (@splerr) {
if($e == $cmdres) {
# a fine error code
$errok = 1;
@ -2856,28 +2872,28 @@ sub singletest {
if($valgrind) {
if($usevalgrind) {
unless(opendir(DIR, "$LOGDIR")) {
logmsg "ERROR: unable to read $LOGDIR\n";
# timestamp test result verification end
$timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
return 0; # can't open log dir
return 1;
}
my @files = grep { /valgrind/ } readdir(DIR);
my @files = readdir(DIR);
closedir(DIR);
logmsg "DEBUG: No valgrind files\n" unless(@files);
my $f;
my $l="";
foreach $f (@files) {
logmsg "DEBUG: valgrind file: $f\n";
if($f =~ /^valgrind$testnum\./) {
$l = $f;
my $vgfile;
foreach my $file (@files) {
if($file =~ /^valgrind$testnum(\..*|)$/) {
$vgfile = $file;
last;
}
}
my $src=$ENV{'srcdir'};
if(!$src) {
$src=".";
if(!$vgfile) {
logmsg "ERROR: valgrind log file missing for test $testnum\n";
# timestamp test result verification end
$timevrfyend{$testnum} = Time::HiRes::time() if($timestats);
return 1;
}
my @e = valgrindparse($src, $feature{'SSL'}, "$LOGDIR/$l");
if($e[0]) {
my @e = valgrindparse($srcdir, $feature{'SSL'}, "$LOGDIR/$vgfile");
if(@e && $e[0]) {
logmsg " valgrind ERROR ";
logmsg @e;
# timestamp test result verification end
@ -3715,7 +3731,7 @@ sub displaylogs {
if(($log =~ /^file\d+\.txt/) && ($log !~ /^file$testnum\.txt/)) {
next; # skip fileNnn.txt of other tests
}
if(($log =~ /^valgrind\d+/) && ($log !~ /^valgrind$testnum\./)) {
if(($log =~ /^valgrind\d+/) && ($log !~ /^valgrind$testnum(\..*|)$/)) {
next; # skip valgrindNnn of other tests
}
logmsg "=== Start of file $log\n";