]> The Tcpdump Group git mirrors - tcpdump/blobdiff - tests/TESTonce
Default to first interface from pcap_findalldevs()
[tcpdump] / tests / TESTonce
index 6eddbd2524daef410ced43e0f1c95fd49bd81ae3..30ffccdb27f9224c65292fd8b81c36d952645c11 100755 (executable)
@@ -12,11 +12,27 @@ $input=$ARGV[1];
 $output=$ARGV[2];
 $options=$ARGV[3];
 
+my $r;
+
 if ($^O eq 'MSWin32') {
-  $r = system "..\\windump -n -r $input $options 2>NUL | tee NEW/$output | diff -w $output - >DIFF/$output.diff";
- }
+    $r = system "..\\windump -n -r $input $options 2>NUL | sed 's/\\r//' | tee NEW/$output | diff $output - >DIFF/$output.diff";
+    # need to do same as below for Cygwin.
+}
 else {
-  $r = system "../tcpdump 2>/dev/null -n -r $input $options | tee NEW/$output | diff -w $output - >DIFF/$output.diff";
+    # we used to do this as a nice pipeline, but the problem is that $r fails to
+    # to be set properly if the tcpdump core dumps.
+    $r = system "../tcpdump 2>/dev/null -n -r $input $options >NEW/$output";
+    if($r == 0x100) {
+        # this means tcpdump exited with code 1.
+        open(OUTPUT, ">>"."NEW/$output") || die "fail to open $output\n";
+        printf OUTPUT "EXIT CODE %08x\n", $r;
+        close(OUTPUT);
+        $r = 0;
+    }
+    if($r == 0) {
+        $r = system "cat NEW/$output | diff $output - >DIFF/$output.diff";
+    }
+    #print sprintf("END: %08x\n", $r);
 }
 
 if($r == 0) {
@@ -28,15 +44,25 @@ printf "    %-30s: TEST FAILED", $name;
 open FOUT, '>>failure-outputs.txt';
 printf FOUT "Failed test: $name\n\n";
 close FOUT;
-system "cat DIFF/$output.diff >> failure-outputs.txt";
+if(-f "DIFF/$output.diff") {
+    system "cat DIFF/$output.diff >> failure-outputs.txt";
+}
 
 if($r == -1) {
   print " (failed to execute: $!)\n";
   exit 30;
 }
-if($r & 127) {
-  printf " (terminated with signal %u, %s coredump)\n", ($r & 127), ($r & 128) ? 'with' : 'without';
-  exit ($r & 128) ? 10 : 20;
+
+# this is not working right, $r == 0x8b00 when there is a core dump.
+# clearly, we need some platform specific perl magic to take this apart, so look for "core"
+# too.
+if($r & 127 || -f "core") {
+    my $with = ($r & 128) ? 'with' : 'without';
+    if(-f "core") {
+        $with = "with";
+    }
+    printf " (terminated with signal %u, %s coredump)\n", ($r & 127), $with;
+    exit ($r & 128) ? 10 : 20;
 }
 print "\n";
 exit $r >> 8;