Make runtests.pl actually support any (valid) server specification
for the <killserver> section of test harness definition files.
This commit is contained in:
Родитель
b32a96eda0
Коммит
7525670610
|
@ -259,6 +259,7 @@ my $postmortem; # display detailed info about failed tests
|
|||
|
||||
my %run; # running server
|
||||
my %doesntrun; # servers that don't work, identified by pidfile
|
||||
my %serverpidfile;# all server pid file names, identified by server id
|
||||
|
||||
# torture test variables
|
||||
my $torture;
|
||||
|
@ -316,6 +317,32 @@ $ENV{'SSL_CERT_DIR'}=undef;
|
|||
$ENV{'SSL_CERT_PATH'}=undef;
|
||||
$ENV{'CURL_CA_BUNDLE'}=undef;
|
||||
|
||||
#######################################################################
|
||||
# Load serverpidfile hash with pidfile names for all possible servers.
|
||||
#
|
||||
sub init_serverpidfile_hash {
|
||||
for my $proto (('ftp', 'http', 'imap', 'pop3', 'smtp')) {
|
||||
for my $ssl (('', 's')) {
|
||||
for my $ipvnum ((4, 6)) {
|
||||
for my $idnum ((1, 2)) {
|
||||
my $serv = servername_id("$proto$ssl", $ipvnum, $idnum);
|
||||
my $pidf = server_pidfilename("$proto$ssl", $ipvnum, $idnum);
|
||||
$serverpidfile{$serv} = $pidf;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for my $proto (('tftp', 'sftp', 'socks', 'ssh')) {
|
||||
for my $ipvnum ((4, 6)) {
|
||||
for my $idnum ((1, 2)) {
|
||||
my $serv = servername_id($proto, $ipvnum, $idnum);
|
||||
my $pidf = server_pidfilename($proto, $ipvnum, $idnum);
|
||||
$serverpidfile{$serv} = $pidf;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#######################################################################
|
||||
# Check if a given child process has just died. Reaps it if so.
|
||||
#
|
||||
|
@ -2346,19 +2373,43 @@ sub singletest {
|
|||
my @killservers = getpart("client", "killserver");
|
||||
foreach my $serv (@killservers) {
|
||||
chomp $serv;
|
||||
if($serv =~ /^(ftp|imap|pop3|smtp)(\d*)(-ipv6|)/) {
|
||||
my $pid;
|
||||
# handle given server no matter if secure or not
|
||||
if($run{$serv}) {
|
||||
# stop server pid(s) from %run hash clearing them
|
||||
stopserver($run{$serv});
|
||||
$run{$serv} = 0;
|
||||
}
|
||||
# deal with unexpectedly still alive server
|
||||
$pid = processexists($serverpidfile{$serv});
|
||||
if($pid > 0) {
|
||||
print STDERR "Warning: $serv server unexpectedly alive\n";
|
||||
stopserver($pid);
|
||||
}
|
||||
# handle unsecure server when given a secure one
|
||||
my $unsec = $serv;
|
||||
if($serv =~ /^(ftp|http|imap|pop3|smtp)s(.*)$/) {
|
||||
$unsec = "$1$2";
|
||||
# stop unsecure server when stopping a secure one
|
||||
if($run{$unsec}) {
|
||||
# stop server pid(s) from %run hash clearing them
|
||||
stopserver($run{$unsec});
|
||||
$run{$unsec} = 0;
|
||||
}
|
||||
# deal with unexpectedly still alive server
|
||||
$pid = processexists($serverpidfile{$unsec});
|
||||
if($pid > 0) {
|
||||
print STDERR "Warning: $unsec server unexpectedly alive\n";
|
||||
stopserver($pid);
|
||||
}
|
||||
}
|
||||
# handle potentially still alive server sockfilters
|
||||
if($unsec =~ /^(ftp|imap|pop3|smtp)(\d*)(-ipv6|)/) {
|
||||
my $proto = $1;
|
||||
my $idnum = ($2 && ($2 > 1)) ? $2 : 1;
|
||||
my $ipvnum = ($3 && ($3 =~ /6$/)) ? 6 : 4;
|
||||
killsockfilters($proto, $ipvnum, $idnum, $verbose);
|
||||
}
|
||||
if($run{$serv}) {
|
||||
stopserver($run{$serv}); # the pid file is in the hash table
|
||||
$run{$serv}=0; # clear pid
|
||||
}
|
||||
else {
|
||||
logmsg "RUN: The $serv server is not running\n";
|
||||
}
|
||||
}
|
||||
|
||||
# remove the test server commands file after each test
|
||||
|
@ -3316,12 +3367,18 @@ $SMTP6PORT = $base++;
|
|||
cleardir($LOGDIR);
|
||||
mkdir($LOGDIR, 0777);
|
||||
|
||||
#######################################################################
|
||||
# initialize some variables
|
||||
#
|
||||
|
||||
get_disttests();
|
||||
init_serverpidfile_hash();
|
||||
|
||||
#######################################################################
|
||||
# Output curl version and host info being tested
|
||||
#
|
||||
|
||||
if(!$listonly) {
|
||||
get_disttests();
|
||||
checksystem();
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче