aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2000-11-14 10:18:44 +0000
committerDaniel Stenberg <daniel@haxx.se>2000-11-14 10:18:44 +0000
commite2641a394dbee46fab935913e45f75d918a5aedd (patch)
tree1b2eb61f567c7b0018e761cb3a18d28f813e9bec
parentbd3dca96f650e81f21bdafd189ad8b2c4383c5da (diff)
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
-rwxr-xr-xtests/runtests.pl160
1 files changed, 141 insertions, 19 deletions
diff --git a/tests/runtests.pl b/tests/runtests.pl
index cb4e5e57b..e5e3a1ba3 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -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);