]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
Initial support for dumping the contents of the files in log/ when failing
authorDaniel Stenberg <daniel@haxx.se>
Tue, 13 Apr 2004 05:57:50 +0000 (05:57 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 13 Apr 2004 05:57:50 +0000 (05:57 +0000)
when -p is used. For easier bug-hunting of autobuild failures. This still
only shows what files that are present in log/, as I believe we need to
filter which files we show on a failure.

tests/runtests.pl

index b02b9f449741d1e8b795332c9d3b2b949ac25337..a19d9f75105e5912590f118784f8d4d1f66b1c93 100755 (executable)
@@ -94,6 +94,7 @@ my $anyway;
 my $gdbthis;      # run test case with gdb debugger
 my $keepoutfiles; # keep stdout and stderr files after tests
 my $listonly;     # only list the tests
+my $postmortem;   # display detailed info about failed tests
 
 my $pwd;          # current working directory
 
@@ -1029,7 +1030,7 @@ sub singletest {
 
     if($verbose) {
         print "$CMDLINE\n"; 
-   }
+    }
 
     print CMDLOG "$CMDLINE\n";
 
@@ -1416,6 +1417,9 @@ do {
         # continue anyway, even if a test fail
         $anyway=1;
     }
+    elsif($ARGV[0] eq "-p") {
+        $postmortem=1;
+    }
     elsif($ARGV[0] eq "-l") {
         # lists the test case names only
         $listonly=1;
@@ -1435,6 +1439,7 @@ Usage: runtests.pl [options]
   -k       keep stdout and stderr files present after tests
   -l       list all test case names/descriptions
   -n       No valgrind
+  -p       Print log file contents when a test fails
   -s       short output
   -t       torture
   -v       verbose output
@@ -1527,6 +1532,33 @@ open(CMDLOG, ">$CURLLOG") ||
 if($torture) {
     &torture();
 }
+
+sub displaylogcontent {
+    my ($file)=@_;
+    open(SINGLE, "<$file");
+    while(<SINGLE>) {
+        print " $_";
+    }
+    close(SINGLE);
+}
+
+sub displaylogs {
+    opendir(DIR, "$LOGDIR") ||
+        die "can't open dir: $!";
+    my @logs = readdir(DIR);
+    closedir DIR;
+    my $log;
+    print "== Contents of files in the log/ dir:\n";
+    foreach $log (sort @logs) {
+        # ignore . and .. and the file has nonzero size
+        if(($log !~ /^\.(\.|)$/) && (-s "$LOGDIR/$log")) {
+            print "== Start of file $log\n";
+            #displaylogcontent("$LOGDIR/$log");
+            print "== End of file $log\n";
+        }
+    }
+}
+
 #######################################################################
 # The main test-loop
 #
@@ -1551,6 +1583,10 @@ foreach $testnum (split(" ", $TESTCASES)) {
 
     if($error>0) {
         $failed.= "$testnum ";
+        if($postmortem) {
+            # display all files in log/ in a nice way
+            displaylogs();
+        }
         if(!$anyway) {
             # a test failed, abort
             print "\n - abort tests\n";