diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/FILEFORMAT | 3 | ||||
| -rwxr-xr-x | tests/runtests.pl | 91 | 
2 files changed, 62 insertions, 32 deletions
diff --git a/tests/FILEFORMAT b/tests/FILEFORMAT index 3edb91b49..58d37410e 100644 --- a/tests/FILEFORMAT +++ b/tests/FILEFORMAT @@ -190,4 +190,7 @@ the file's contents must be identical to this  <upload>  the contents of the upload data curl should have sent  </upload> +<valgrind> +disable - disables the valgrind log check for this test +</valgrind>  </verify> diff --git a/tests/runtests.pl b/tests/runtests.pl index 010c6ed0f..db06ec53f 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -1351,13 +1351,6 @@ sub singletest {          return 1;      } -    # the test succeeded, remove all log files -    if(!$keepoutfiles) { -        cleardir($LOGDIR); -    } - -    unlink($FTPDCMD); # remove the instructions for this test -      @what = getpart("client", "killserver");      for(@what) {          my $serv = $_; @@ -1398,41 +1391,75 @@ sub singletest {          }      }      if($valgrind) { -        opendir(DIR, "log") || -            return 0; # can't open log dir -        my @files = readdir(DIR); -        closedir DIR; -        my $f; -        my $l; -        foreach $f (@files) { -            if($f =~ /^valgrind$testnum/) { -                $l = $f; -                last; +        # this is the valid protocol blurb curl should generate +        my @disable= getpart("verify", "valgrind"); + +        if($disable[0] !~ /disable/) { + +            opendir(DIR, "log") || +                return 0; # can't open log dir +            my @files = readdir(DIR); +            closedir DIR; +            my $f; +            my $l; +            foreach $f (@files) { +                if($f =~ /^valgrind$testnum\.pid/) { +                    $l = $f; +                    last;              } -        } -        my $leak; -        open(VAL, "<$l"); -        while(<VAL>) { -            if($_ =~ /definitely lost: (\d*) bytes/) { -                $leak = $1; -                last; +            } +            my $leak; +            my $invalidread; +            my $error; + +            open(VAL, "<log/$l"); +            while(<VAL>) { +                if($_ =~ /definitely lost: (\d*) bytes/) { +                    $leak = $1; +                    if($leak) { +                        $error++; +                    } +                    last; +                } +                if($_ =~ /Invalid read of size (\d+)/) { +                    $invalidread = $1; +                    $error++; +                    last; +                } +            } +            close(VAL); +            if($error) { +                print " valgrind ERROR "; +                if($leak) { +                    print "\n Leaked $leak bytes\n"; +                } +                if($invalidread) { +                    print "\n Read $invalidread invalid bytes\n"; +                } +                return 1; +            } +            elsif(!$short) { +                print " valgrind OK";              }          } -        close(VAL); -        if($leak) { -            print " valgrind ERROR "; -        } -        elsif(!$short) { -            print " valgrind OK"; +        else { +            if(!$short) { +                print " valgrind SKIPPED"; +            }          } - -      }      if($short) {          print "OK";      }      print "\n"; +    # the test succeeded, remove all log files +    if(!$keepoutfiles) { +        cleardir($LOGDIR); +    } + +    unlink($FTPDCMD); # remove the instructions for this test +      return 0;  }  | 
