removed lots of external program dependencies (for windows compliance)

added lots of comments
added -s for short output and made it possible to run specific test cases
from the command line
This commit is contained in:
Daniel Stenberg 2000-11-14 10:18:44 +00:00
parent bd3dca96f6
commit e2641a394d

View File

@ -26,19 +26,41 @@ $TESTCASES="all";
$PIDFILE=".server.pid";
#######################################################################
# Return the pid of the http server as found in the pid file
#
sub serverpid {
open(PFILE, "<$PIDFILE");
my $PID=<PFILE>;
close(PFILE);
chomp $PID;
return $PID;
}
#######################################################################
# stop the test http server
#
sub stopserver {
# check for pidfile
if ( -f $PIDFILE ) {
$PID=`cat $PIDFILE`;
kill (9, $PID); # die!
$PID = serverpid();
$res = kill (9, $PID); # die!
unlink $PIDFILE; # server is killed
if($res) {
print "TCP server signalled to die\n";
}
}
}
#######################################################################
# start the http server, or if it already runs, verify that it is our
# test server on the test-port!
#
sub runserver {
# check for pidfile
if ( -f $PIDFILE ) {
$PID=`cat $PIDFILE`;
$PID=serverpid();
if ($PID ne "" && kill(0, $PID)) {
$STATUS="httpd (pid $PID) running";
$RUNNING=1;
@ -73,6 +95,62 @@ sub runserver {
}
}
#######################################################################
# This function compares two binary files and return non-zero if they
# differ
#
sub comparefiles {
my $source=$_[0];
my $dest=$_[1];
open(S, "<$source") ||
return 1;
open(D, "<$dest") ||
return 1;
# silly win-crap
binmode S;
binmode D;
$m = 20;
do {
$snum = read(S, $s, $m);
$dnum = read(D, $d, $m);
if(($snum != $dnum) ||
($s ne $d)) {
print "$source and $dest differ\n";
last;
}
} while($snum);
close(S);
close(D);
return 0;
}
#######################################################################
# Remove all files in the specified directory
#
sub cleardir {
my $dir = $_[0];
my $count;
# Get all files
opendir(DIR, $dir) ||
return 0; # can't open dir
while($file = readdir(DIR)) {
if($file !~ /^\./) {
unlink("$dir/$file");
$count++;
}
}
closedir DIR;
return $count;
}
#######################################################################
# filter out the specified pattern from the given input file and store the
# results in the given output file
#
sub filteroff {
my $infile=$_[0];
my $filter=$_[1];
@ -86,7 +164,6 @@ sub filteroff {
# print "FILTER: off $filter from $infile to $ofile\n";
# system("egrep -v \"$strip\" < $first > $LOGDIR/generated.tmp");
while(<IN>) {
$_ =~ s/$filter//;
print OUT $_;
@ -95,6 +172,12 @@ sub filteroff {
close(OUT);
return 0;
}
#######################################################################
# compare test results with the expected output, we might filter off
# some pattern that is allowed to differ, output test results
#
sub compare {
# filter off the 4 pattern before compare!
@ -106,23 +189,27 @@ sub compare {
if ($strip ne "") {
filteroff($first, $strip, "$LOGDIR/generated.tmp");
filteroff($sec, $strip, "$LOGDIR/stored.tmp");
# system("egrep -v \"$strip\" < $sec > $LOGDIR/stored.tmp");
$first="$LOGDIR/generated.tmp";
$sec="$LOGDIR/stored.tmp";
}
$res = system("cmp $first $sec");
$res /= 256;
# $res = system("cmp $first $sec");
# $res /= 256;
comparefiles($first, $sec);
if ($res != 0) {
print " $text FAILED\n";
print " $text FAILED";
return 1;
}
print " $text OK\n";
print " $text OK";
return 0;
}
#######################################################################
# display information about curl and the host the test suite runs on
#
sub displaydata {
my $version=`$CURL -V`;
my $hostname=`hostname`;
@ -134,6 +221,10 @@ sub displaydata {
"* system $hosttype";
}
#######################################################################
# Run a single specified test case
#
sub singletest {
my $NUMBER=$_[0];
my $REPLY="${TESTDIR}/reply${NUMBER}.txt";
@ -150,7 +241,10 @@ sub singletest {
$HTTP="$TESTDIR/http$NUMBER.txt";
# name of the test
$DESC=`cat $TESTDIR/name$NUMBER.txt | tr -d '\012'`;
open(N, "<$TESTDIR/name$NUMBER.txt");
$DESC=<N>;
close(N);
$DESC =~ s/[\r\n]//g;
# redirected stdout/stderr here
$STDOUT="$LOGDIR/stdout$NUMBER";
@ -159,7 +253,10 @@ sub singletest {
# if this file exist, we verify that the stdout contained this:
$VALIDOUT="$TESTDIR/stdout$NUMBER.txt";
print "test $NUMBER... [$DESC]\n";
print "test $NUMBER...";
if(!$short) {
print "[$DESC]\n";
}
# get the command line options to use
@ -227,6 +324,7 @@ sub singletest {
unlink($STDERR);
}
print "\n";
return 0;
}
@ -236,9 +334,19 @@ sub singletest {
# Check options to this test program
#
if ($ARGV[0] eq "-v") {
$verbose=1;
}
do {
if ($ARGV[0] eq "-v") {
# verbose output
$verbose=1;
}
elsif($ARGV[0] eq "-s") {
# short output
$short=1;
}
elsif($ARGV[0] =~ /^(\d+)/) {
$TESTCASES=$ARGV[0]; # run these tests
}
} while(shift @ARGV);
#######################################################################
# Output curl version and host info being tested
@ -247,10 +355,10 @@ if ($ARGV[0] eq "-v") {
displaydata();
#######################################################################
# remove and recreate logging directory:
# clear and create logging directory:
#
system("rm -rf $LOGDIR");
mkdir("$LOGDIR", 0777);
cleardir($LOGDIR);
mkdir($LOGDIR, 0777);
#######################################################################
# First, start the TCP server
@ -259,13 +367,27 @@ mkdir("$LOGDIR", 0777);
runserver();
#######################################################################
# The main test-loop
# If 'all' tests are requested, find out all test numbers
#
if ( $TESTCASES eq "all") {
$TESTCASES=`ls -1 $TESTDIR/command*.txt | sed -e 's/[a-z\/\.]*//g' | sort -n`;
# Get all commands and find out their test numbers
opendir(DIR, $TESTDIR) || die "can't opendir $TESTDIR: $!";
my @cmds = grep { /^command/ && -f "$TESTDIR/$_" } readdir(DIR);
closedir DIR;
$TESTCASES="";
for(@cmds) {
# cut off everything but the digits
$_ =~ s/[a-z\/\.]*//g;
$TESTCASES .= " $_";
}
}
#######################################################################
# The main test-loop
#
foreach $testnum (split(" ", $TESTCASES)) {
singletest($testnum);