summaryrefslogtreecommitdiff
path: root/src/tests/TESTonce
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/TESTonce')
-rw-r--r--src/tests/TESTonce68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/tests/TESTonce b/src/tests/TESTonce
new file mode 100644
index 0000000..30ffccd
--- /dev/null
+++ b/src/tests/TESTonce
@@ -0,0 +1,68 @@
+#!/usr/bin/env perl
+
+system("mkdir -p NEW DIFF");
+
+if(@ARGV != 4) {
+ print "Usage: TESTonce name input output options\n";
+ exit 20;
+}
+
+$name=$ARGV[0];
+$input=$ARGV[1];
+$output=$ARGV[2];
+$options=$ARGV[3];
+
+my $r;
+
+if ($^O eq 'MSWin32') {
+ $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 {
+ # 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) {
+ printf " %-30s: passed\n", $name;
+ unlink "DIFF/$output.diff";
+ exit 0;
+}
+printf " %-30s: TEST FAILED", $name;
+open FOUT, '>>failure-outputs.txt';
+printf FOUT "Failed test: $name\n\n";
+close FOUT;
+if(-f "DIFF/$output.diff") {
+ system "cat DIFF/$output.diff >> failure-outputs.txt";
+}
+
+if($r == -1) {
+ print " (failed to execute: $!)\n";
+ exit 30;
+}
+
+# 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;