X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/4686d6601e3f88b7c23c2be6f85a13e55d194041..refs/pull/482/head:/tests/TESTonce?ds=sidebyside diff --git a/tests/TESTonce b/tests/TESTonce index 6eddbd25..30ffccdb 100755 --- a/tests/TESTonce +++ b/tests/TESTonce @@ -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;