diff options
Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/runtests.pl | 69 | 
1 files changed, 69 insertions, 0 deletions
| diff --git a/tests/runtests.pl b/tests/runtests.pl index 964e3b800..925c9ec11 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -1128,7 +1128,24 @@ sub verifyserver {      return $pid;  } +####################################################################### +# Single shot server responsiveness test. This should only be used +# to verify that a server present in %run hash is still functional +# +sub responsiveserver { +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_; + +    my $fun = $protofunc{$proto}; +    my $pid = &$fun($proto, $ipvnum, $idnum, $ip, $port); + +    if($pid > 0) { +        return 1; # responsive +    } +    my $srvrname = servername_str($proto, $ipvnum, $idnum); +    logmsg "running server check FAILED (unresponsive $srvrname server)\n"; +    return 0; +}  #######################################################################  # start the http server @@ -1950,6 +1967,42 @@ sub runsocksserver {  }  ####################################################################### +# Single shot pingpong server responsiveness test. This should only be +# used to verify that a server present in %run hash is still functional +# +sub responsive_pingpong_server { +    my ($proto, $id, $verbose, $ipv6) = @_; +    my $port; +    my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP"; +    my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4; +    my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1; + +    if($proto eq "ftp") { +        $port = ($idnum>1)?$FTP2PORT:$FTPPORT; + +        if($ipvnum==6) { +            # if IPv6, use a different setup +            $port = $FTP6PORT; +        } +    } +    elsif($proto eq "pop3") { +        $port = ($ipvnum==6) ? $POP36PORT : $POP3PORT; +    } +    elsif($proto eq "imap") { +        $port = ($ipvnum==6) ? $IMAP6PORT : $IMAPPORT; +    } +    elsif($proto eq "smtp") { +        $port = ($ipvnum==6) ? $SMTP6PORT : $SMTPPORT; +    } +    else { +        print STDERR "Unsupported protocol $proto!!\n"; +        return 0; +    } + +    return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port); +} + +#######################################################################  # Remove all files in the specified directory  #  sub cleardir { @@ -3528,6 +3581,10 @@ sub startservers {             ($what eq "ftp") ||             ($what eq "imap") ||             ($what eq "smtp")) { +            if($torture && $run{$what} && +               !responsive_pingpong_server($what, "", $verbose)) { +                stopserver($what); +            }              if(!$run{$what}) {                  ($pid, $pid2) = runpingpongserver($what, "", $verbose);                  if($pid <= 0) { @@ -3538,6 +3595,10 @@ sub startservers {              }          }          elsif($what eq "ftp2") { +            if($torture && $run{'ftp2'} &&  +               !responsive_pingpong_server("ftp", "2", $verbose)) { +                stopserver('ftp2'); +            }              if(!$run{'ftp2'}) {                  ($pid, $pid2) = runpingpongserver("ftp", "2", $verbose);                  if($pid <= 0) { @@ -3548,6 +3609,10 @@ sub startservers {              }          }          elsif($what eq "ftp-ipv6") { +            if($torture && $run{'ftp-ipv6'} && +               !responsive_pingpong_server("ftp", "", $verbose, "ipv6")) { +                stopserver('ftp-ipv6'); +            }              if(!$run{'ftp-ipv6'}) {                  ($pid, $pid2) = runpingpongserver("ftp", "", $verbose, "ipv6");                  if($pid <= 0) { @@ -3638,6 +3703,10 @@ sub startservers {                  # stop server when running and using a different cert                  stopserver('ftps');              } +            if($torture && $run{'ftp'} && +               !responsive_pingpong_server("ftp", "", $verbose)) { +                stopserver('ftp'); +            }              if(!$run{'ftp'}) {                  ($pid, $pid2) = runpingpongserver("ftp", "", $verbose);                  if($pid <= 0) { | 
