#!/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];

if ($^O eq 'MSWin32') {
  $r = system "..\\windump -n -r $input $options 2>NUL | tee NEW/$output | diff -w $output - >DIFF/$output.diff";
 }
else {
  $r = system "../tcpdump 2>/dev/null -n -r $input $options | tee NEW/$output | diff -w $output - >DIFF/$output.diff";
}

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;
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;
}
print "\n";
exit $r >> 8;
