mirror of
https://github.com/curl/curl.git
synced 2024-11-27 05:50:21 +08:00
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:
parent
bd3dca96f6
commit
e2641a394d
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user