mirror of
https://github.com/moparisthebest/curl
synced 2025-03-11 07:39:50 -04:00
fixed to use fork()+exec() to start test servers
This commit is contained in:
parent
366b62af2d
commit
c4dbed040b
@ -180,6 +180,25 @@ foreach $protocol (('ftp', 'http', 'ftps', 'https', 'gopher', 'no')) {
|
|||||||
$ENV{uc($proxy)}=undef;
|
$ENV{uc($proxy)}=undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
# Start a new thread/process and run the given command line in there.
|
||||||
|
# Return the pid of the new child process to the parent.
|
||||||
|
#
|
||||||
|
sub startnew {
|
||||||
|
my ($cmd)=@_;
|
||||||
|
|
||||||
|
print "CMD: $cmd\n" if ($verbose);
|
||||||
|
|
||||||
|
my $child = fork();
|
||||||
|
|
||||||
|
if(0 == $child) {
|
||||||
|
# a child, run the given command instead!
|
||||||
|
exec($cmd);
|
||||||
|
}
|
||||||
|
return $child;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
# Check for a command in the PATH.
|
# Check for a command in the PATH.
|
||||||
#
|
#
|
||||||
@ -298,17 +317,12 @@ sub torture {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
# stop the given test server
|
# stop the given test server (pid)
|
||||||
#
|
#
|
||||||
sub stopserver {
|
sub stopserver {
|
||||||
my $pid = $_[0];
|
my ($pid) = @_;
|
||||||
# check for pidfile
|
|
||||||
if ( -f $pid ) {
|
if($pid <= 0) {
|
||||||
my $PIDFILE = $pid;
|
|
||||||
$pid = serverpid($PIDFILE);
|
|
||||||
unlink $PIDFILE; # server is killed
|
|
||||||
}
|
|
||||||
elsif($pid <= 0) {
|
|
||||||
return; # this is not a good pid
|
return; # this is not a good pid
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,8 +337,7 @@ sub stopserver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
# start the http server, or if it already runs, verify that it is our
|
# start the http server
|
||||||
# test server on the test-port!
|
|
||||||
#
|
#
|
||||||
sub runhttpserver {
|
sub runhttpserver {
|
||||||
my ($verbose, $ipv6) = @_;
|
my ($verbose, $ipv6) = @_;
|
||||||
@ -402,51 +415,27 @@ sub runhttpserver {
|
|||||||
if($dir) {
|
if($dir) {
|
||||||
$flag .= "-d \"$dir\" ";
|
$flag .= "-d \"$dir\" ";
|
||||||
}
|
}
|
||||||
$cmd="$perl $srcdir/httpserver.pl -p $pidfile $flag $port $ipv6 &";
|
$cmd="$perl $srcdir/httpserver.pl -p $pidfile $flag $port $ipv6";
|
||||||
system($cmd);
|
my $httppid = startnew($cmd); # start the server in a new process
|
||||||
if($verbose) {
|
|
||||||
print "CMD: $cmd\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
my $verified;
|
if(!kill(0, $httppid)) {
|
||||||
for(1 .. 30) {
|
# it is NOT alive
|
||||||
# verify that our server is up and running:
|
print "RUN: failed to start the HTTP server!\n";
|
||||||
my $data=`$CURL --silent -g \"$ip:$port/verifiedserver\" 2>>log/verifyhttp`;
|
stopservers($verbose);
|
||||||
|
exit;
|
||||||
$pid = checkserver($pidfile);
|
|
||||||
if($pid) {
|
|
||||||
print STDERR "RUN: got http server pid from pidfile\n" if($verbose);
|
|
||||||
$verified = 1;
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $data =~ /WE ROOLZ: (\d+)/ ) {
|
|
||||||
$pid = 0+$1;
|
|
||||||
$verified = 1;
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if($verbose) {
|
|
||||||
print STDERR "RUN: Retrying HTTP$nameext server existence in 1 sec\n";
|
|
||||||
}
|
|
||||||
sleep(1);
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!$verified) {
|
|
||||||
print STDERR "RUN: failed to start our HTTP$nameext server\n";
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if($verbose) {
|
if($verbose) {
|
||||||
print "RUN: HTTP$nameext server is now verified to be our server\n";
|
print "RUN: HTTP$nameext server is now running PID $httppid\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
return $pid;
|
sleep(1);
|
||||||
|
|
||||||
|
return $httppid;
|
||||||
}
|
}
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
# start the https server (or rather, tunnel) if needed
|
# start the https server (or rather, tunnel)
|
||||||
#
|
#
|
||||||
sub runhttpsserver {
|
sub runhttpsserver {
|
||||||
my $verbose = $_[0];
|
my $verbose = $_[0];
|
||||||
@ -461,50 +450,34 @@ sub runhttpsserver {
|
|||||||
|
|
||||||
if($pid > 0) {
|
if($pid > 0) {
|
||||||
# kill previous stunnel!
|
# kill previous stunnel!
|
||||||
if($verbose) {
|
stopserver($pid);
|
||||||
print "RUN: kills off running stunnel at $pid\n";
|
|
||||||
}
|
|
||||||
stopserver($HTTPSPIDFILE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
my $flag=$debugprotocol?"-v ":"";
|
my $flag=$debugprotocol?"-v ":"";
|
||||||
my $cmd="$perl $srcdir/httpsserver.pl $flag -s \"$stunnel\" -d $srcdir -r $HTTPPORT $HTTPSPORT &";
|
my $cmd="$perl $srcdir/httpsserver.pl $flag -s \"$stunnel\" -d $srcdir -r $HTTPPORT $HTTPSPORT";
|
||||||
system($cmd);
|
|
||||||
|
my $httpspid = startnew($cmd);
|
||||||
|
|
||||||
|
|
||||||
|
if(!kill(0, $httpspid)) {
|
||||||
|
# it is NOT alive
|
||||||
|
print "RUN: failed to start the HTTPS server!\n";
|
||||||
|
stopservers($verbose);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
if($verbose) {
|
if($verbose) {
|
||||||
print "CMD: $cmd\n";
|
print "RUN: HTTPS server is now running PID $httpspid\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
for(1 .. 30) {
|
sleep(1);
|
||||||
# verify that our HTTPS server is up and running:
|
|
||||||
$cmd="$CURL --silent --insecure \"https://$HOSTIP:$HTTPSPORT/verifiedserver\" 2>/dev/null";
|
|
||||||
if($verbose) {
|
|
||||||
print "CMD: $cmd\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
my $data=`$cmd`;
|
return $httpspid;
|
||||||
|
|
||||||
if ( $data =~ /WE ROOLZ: (\d+)/ ) {
|
|
||||||
# The replying server is the HTTP (_not_ HTTPS) server, so the
|
|
||||||
# pid it returns is of course not the pid we want here. We extract
|
|
||||||
# the pid from the fresh pid file instead.
|
|
||||||
$pid=checkserver($HTTPSPIDFILE);
|
|
||||||
if($verbose) {
|
|
||||||
print STDERR "RUN: extracted pid $pid from $HTTPSPIDFILE\n";
|
|
||||||
}
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
if($verbose) {
|
|
||||||
print STDERR "RUN: waiting one sec for HTTPS server\n";
|
|
||||||
}
|
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $pid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
# start the ftp server if needed
|
# start the ftp server
|
||||||
#
|
#
|
||||||
sub runftpserver {
|
sub runftpserver {
|
||||||
my ($id, $verbose, $ipv6) = @_;
|
my ($id, $verbose, $ipv6) = @_;
|
||||||
@ -516,8 +489,6 @@ sub runftpserver {
|
|||||||
my $ip=$HOSTIP;
|
my $ip=$HOSTIP;
|
||||||
my $nameext;
|
my $nameext;
|
||||||
|
|
||||||
ftpkillslaves($verbose);
|
|
||||||
|
|
||||||
if($ipv6) {
|
if($ipv6) {
|
||||||
# if IPv6, use a different setup
|
# if IPv6, use a different setup
|
||||||
$pidfile = $FTP6PIDFILE;
|
$pidfile = $FTP6PIDFILE;
|
||||||
@ -533,8 +504,10 @@ sub runftpserver {
|
|||||||
if ($verbose);
|
if ($verbose);
|
||||||
|
|
||||||
my $time=time();
|
my $time=time();
|
||||||
|
my $cmd="$CURL -m4 --silent -vg \"ftp://$ip:$port/verifiedserver\" 2>log/verifyftp";
|
||||||
# check if this is our server running on this port:
|
# check if this is our server running on this port:
|
||||||
my @data=`$CURL -m4 --silent -vg \"ftp://$ip:$port/verifiedserver\" 2>log/verifyftp`;
|
my @data=`$cmd`;
|
||||||
|
print "RUN: $cmd\n" if($verbose);
|
||||||
my $line;
|
my $line;
|
||||||
|
|
||||||
# if this took more than 2 secs, we assume it "hung" on a weird server
|
# if this took more than 2 secs, we assume it "hung" on a weird server
|
||||||
@ -546,7 +519,7 @@ sub runftpserver {
|
|||||||
$pid = 0+$1;
|
$pid = 0+$1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!$pid && $data[0]) {
|
if($pid <= 0 && $data[0]) {
|
||||||
# this is not a known server
|
# this is not a known server
|
||||||
print "RUN: Unknown server on our favourite FTP$nameext port: $port\n";
|
print "RUN: Unknown server on our favourite FTP$nameext port: $port\n";
|
||||||
return -1;
|
return -1;
|
||||||
@ -555,14 +528,14 @@ sub runftpserver {
|
|||||||
|
|
||||||
if($pid > 0) {
|
if($pid > 0) {
|
||||||
print "RUN: Killing a previous server using pid $pid\n" if($verbose);
|
print "RUN: Killing a previous server using pid $pid\n" if($verbose);
|
||||||
my $res = kill (9, $pid); # die!
|
my $res = kill(9, $pid); # die!
|
||||||
if(!$res) {
|
if(!$res) {
|
||||||
print "RUN: Failed to kill FTP$id$nameext test server, do it manually and",
|
print "RUN: Failed to kill FTP$id$nameext test server, do it manually and",
|
||||||
" restart the tests.\n";
|
" restart the tests.\n";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
sleep(1);
|
|
||||||
}
|
}
|
||||||
|
ftpkillslaves($verbose);
|
||||||
|
|
||||||
# now (re-)start our server:
|
# now (re-)start our server:
|
||||||
my $flag=$debugprotocol?"-v ":"";
|
my $flag=$debugprotocol?"-v ":"";
|
||||||
@ -573,48 +546,24 @@ sub runftpserver {
|
|||||||
if($ipv6) {
|
if($ipv6) {
|
||||||
$flag .="--ipv6 ";
|
$flag .="--ipv6 ";
|
||||||
}
|
}
|
||||||
my $cmd="$perl $srcdir/ftpserver.pl $flag --port $port &";
|
my $cmd="$perl $srcdir/ftpserver.pl $flag --port $port";
|
||||||
if($verbose) {
|
|
||||||
print "CMD: $cmd\n";
|
|
||||||
}
|
|
||||||
system($cmd);
|
|
||||||
|
|
||||||
my $verified;
|
my $ftppid = startnew($cmd);
|
||||||
$pid = 0;
|
|
||||||
for(1 .. 30) {
|
if(!kill(0, $ftppid)) {
|
||||||
# verify that our server is up and running:
|
# it is NOT alive
|
||||||
my $line;
|
print "RUN: failed to start the FTP$id$nameext server!\n";
|
||||||
my $cmd="$CURL --silent -g \"ftp://$ip:$port/verifiedserver\" 2>>log/verifyftp";
|
stopservers($verbose);
|
||||||
print "$cmd\n" if($verbose);
|
exit;
|
||||||
my @data = `$cmd`;
|
|
||||||
foreach $line (@data) {
|
|
||||||
if ( $line =~ /WE ROOLZ: (\d+)/ ) {
|
|
||||||
$pid = 0+$1;
|
|
||||||
$verified = 1;
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!$pid) {
|
|
||||||
if($verbose) {
|
|
||||||
print STDERR "RUN: Retrying FTP$id$nameext server existence in a sec\n";
|
|
||||||
}
|
|
||||||
sleep(1);
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!$verified) {
|
|
||||||
warn "RUN: failed to start our FTP$id server\n";
|
|
||||||
return -2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if($verbose) {
|
if($verbose) {
|
||||||
print "RUN: FTP$id$nameext server is now verified to be our server\n";
|
print "RUN: FTP$id$nameext server is now running PID $ftppid\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
return $pid;
|
sleep(1);
|
||||||
|
|
||||||
|
return $ftppid;
|
||||||
}
|
}
|
||||||
|
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
Loading…
x
Reference in New Issue
Block a user