diff options
-rwxr-xr-x | tests/runtests.pl | 136 |
1 files changed, 75 insertions, 61 deletions
diff --git a/tests/runtests.pl b/tests/runtests.pl index 1c6a028b9..97a0aaf94 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -1616,41 +1616,52 @@ sub runhttpsserver { $flags .= "--ipv$ipvnum --proto $proto "; $flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem'); $flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" "; - $flags .= "--connect $HTTPPORT --accept $HTTPSPORT"; - - my $cmd = "$perl $srcdir/secureserver.pl $flags"; - my ($httpspid, $pid2) = startnew($cmd, $pidfile, 15, 0); - - if($httpspid <= 0 || !pidexists($httpspid)) { - # it is NOT alive - logmsg "RUN: failed to start the $srvrname server\n"; - stopserver($server, "$pid2"); - displaylogs($testnumcheck); - $doesntrun{$pidfile} = 1; - return(0,0); - } + $flags .= "--connect $HTTPPORT"; + + my $pid2; + my $pid3; + my $httpspid; + my $port = 24512; # start attempt + for (1 .. 10) { + $port += int(rand(600)); + my $options = "$flags --accept $port"; + + my $cmd = "$perl $srcdir/secureserver.pl $options"; + ($httpspid, $pid2) = startnew($cmd, $pidfile, 15, 0); + + if($httpspid <= 0 || !pidexists($httpspid)) { + # it is NOT alive + logmsg "RUN: failed to start the $srvrname server\n"; + stopserver($server, "$pid2"); + displaylogs($testnumcheck); + $doesntrun{$pidfile} = 1; + next; + } - # Server is up. Verify that we can speak to it. - my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $HTTPSPORT); - if(!$pid3) { - logmsg "RUN: $srvrname server failed verification\n"; - # failed to talk to it properly. Kill the server and return failure - stopserver($server, "$httpspid $pid2"); - displaylogs($testnumcheck); - $doesntrun{$pidfile} = 1; - return (0,0); + # Server is up. Verify that we can speak to it. + $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port); + if(!$pid3) { + logmsg "RUN: $srvrname server failed verification\n"; + # failed to talk to it properly. Kill the server and return failure + stopserver($server, "$httpspid $pid2"); + displaylogs($testnumcheck); + $doesntrun{$pidfile} = 1; + next; + } + # we have a server! + last; } # Here pid3 is actually the pid returned by the unsecure-http server. $runcert{$server} = $certfile; if($verbose) { - logmsg "RUN: $srvrname server is now running PID $httpspid\n"; + logmsg "RUN: $srvrname server is PID $httpspid port $port\n"; } sleep(1); - return ($httpspid, $pid2); + return ($httpspid, $pid2, $port); } ####################################################################### @@ -1899,41 +1910,48 @@ sub runftpsserver { $flags .= "--ipv$ipvnum --proto $proto "; $flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem'); $flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" "; - $flags .= "--connect $FTPPORT --accept $FTPSPORT"; - - my $cmd = "$perl $srcdir/secureserver.pl $flags"; - my ($ftpspid, $pid2) = startnew($cmd, $pidfile, 15, 0); - - if($ftpspid <= 0 || !pidexists($ftpspid)) { - # it is NOT alive - logmsg "RUN: failed to start the $srvrname server\n"; - stopserver($server, "$pid2"); - displaylogs($testnumcheck); - $doesntrun{$pidfile} = 1; - return(0,0); - } + $flags .= "--connect $FTPPORT"; + + my $port = 26713; + my $pid2; + my $pid3; + my $ftpspid; + for (1 .. 10) { + $port += int(rand(700)); + my $options = "$flags --accept $port"; + my $cmd = "$perl $srcdir/secureserver.pl $options"; + ($ftpspid, $pid2) = startnew($cmd, $pidfile, 15, 0); + + if($ftpspid <= 0 || !pidexists($ftpspid)) { + # it is NOT alive + logmsg "RUN: failed to start the $srvrname server\n"; + stopserver($server, "$pid2"); + displaylogs($testnumcheck); + $doesntrun{$pidfile} = 1; + next; + } - # Server is up. Verify that we can speak to it. - my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $FTPSPORT); - if(!$pid3) { - logmsg "RUN: $srvrname server failed verification\n"; - # failed to talk to it properly. Kill the server and return failure - stopserver($server, "$ftpspid $pid2"); - displaylogs($testnumcheck); - $doesntrun{$pidfile} = 1; - return (0,0); - } - # Here pid3 is actually the pid returned by the unsecure-ftp server. + $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port); + if(!$pid3) { + logmsg "RUN: $srvrname server failed verification\n"; + # failed to talk to it properly. Kill the server and return failure + stopserver($server, "$ftpspid $pid2"); + displaylogs($testnumcheck); + $doesntrun{$pidfile} = 1; + next; + } + # Here pid3 is actually the pid returned by the unsecure-ftp server. - $runcert{$server} = $certfile; + $runcert{$server} = $certfile; - if($verbose) { - logmsg "RUN: $srvrname server is now running PID $ftpspid\n"; + if($verbose) { + logmsg "RUN: $srvrname server is PID $ftpspid port $port\n"; + } + last; } - sleep(1); - return ($ftpspid, $pid2); + return ($ftpspid, $pid2, $port); } ####################################################################### @@ -3157,10 +3175,6 @@ sub checksystem { if($verbose) { logmsg "* Ports: "; - if($stunnel) { - logmsg sprintf("FTPS/%d ", $FTPSPORT); - logmsg sprintf("HTTPS/%d ", $HTTPSPORT); - } logmsg sprintf("\n* SSH/%d ", $SSHPORT); if($httptlssrv) { logmsg sprintf("HTTPTLS/%d ", $HTTPTLSPORT); @@ -4762,7 +4776,8 @@ sub startservers { $run{'ftp'}="$pid $pid2"; } if(!$run{'ftps'}) { - ($pid, $pid2) = runftpsserver($verbose, "", $certfile); + ($pid, $pid2, $FTPSPORT) = + runftpsserver($verbose, "", $certfile); if($pid <= 0) { return "failed starting FTPS server (stunnel)"; } @@ -4797,7 +4812,8 @@ sub startservers { $run{'http'}="$pid $pid2"; } if(!$run{'https'}) { - ($pid, $pid2) = runhttpsserver($verbose, "", $certfile); + ($pid, $pid2, $HTTPSPORT) = + runhttpsserver($verbose, "", $certfile); if($pid <= 0) { return "failed starting HTTPS server (stunnel)"; } @@ -5442,8 +5458,6 @@ if ($gdbthis) { } $minport = $base; # original base port number -$HTTPSPORT = $base++; # HTTPS (stunnel) server port -$FTPSPORT = $base++; # FTPS (stunnel) server port $SSHPORT = $base++; # SSH (SCP/SFTP) port $HTTPTLSPORT = $base++; # HTTP TLS (non-stunnel) server port $HTTPTLS6PORT = $base++; # HTTP TLS (non-stunnel) IPv6 server port |