tests: support for imaps/pop3s/smtps protocols
Closes #10077
diff --git a/tests/runtests.pl b/tests/runtests.pl
index 6ac1bd7..1e5e017 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -1439,6 +1439,9 @@
'imap' => \&verifyftp,
'smtp' => \&verifyftp,
'ftps' => \&verifyftp,
+ 'pop3s' => \&verifyftp,
+ 'imaps' => \&verifyftp,
+ 'smtps' => \&verifyftp,
'tftp' => \&verifyftp,
'ssh' => \&verifyssh,
'socks' => \&verifysocks,
@@ -1986,11 +1989,10 @@
}
#######################################################################
-# start the ftps server (or rather, tunnel)
+# start the ftps/imaps/pop3s/smtps server (or rather, tunnel)
#
-sub runftpsserver {
- my ($verbose, $ipv6, $certfile) = @_;
- my $proto = 'ftps';
+sub runsecureserver {
+ my ($verbose, $ipv6, $certfile, $proto, $clearport) = @_;
my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
my $idnum = 1;
@@ -2031,23 +2033,25 @@
$flags .= "--ipv$ipvnum --proto $proto ";
$flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem');
$flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" ";
- $flags .= "--connect " . $PORT{"ftp"};
+ $flags .= "--connect $clearport";
- my $ftpspid;
+ my $protospid;
my $pid2;
- my $port = 26713;
+ my $port = 26713 + ord $proto;
+ my %usedports = reverse %PORT;
for (1 .. 10) {
$port += int(rand(700));
+ next if exists $usedports{$port};
my $options = "$flags --accept $port";
my $cmd = "$perl $srcdir/secureserver.pl $options";
- ($ftpspid, $pid2) = startnew($cmd, $pidfile, 15, 0);
+ ($protospid, $pid2) = startnew($cmd, $pidfile, 15, 0);
- if($ftpspid <= 0 || !pidexists($ftpspid)) {
+ if($protospid <= 0 || !pidexists($protospid)) {
# it is NOT alive
stopserver($server, "$pid2");
displaylogs($testnumcheck);
$doesntrun{$pidfile} = 1;
- $ftpspid = $pid2 = 0;
+ $protospid = $pid2 = 0;
next;
}
@@ -2055,14 +2059,14 @@
$runcert{$server} = $certfile;
if($verbose) {
- logmsg "RUN: $srvrname server is PID $ftpspid port $port\n";
+ logmsg "RUN: $srvrname server is PID $protospid port $port\n";
}
last;
}
- logmsg "RUN: failed to start the $srvrname server\n" if(!$ftpspid);
+ logmsg "RUN: failed to start the $srvrname server\n" if(!$protospid);
- return ($ftpspid, $pid2, $port);
+ return ($protospid, $pid2, $port);
}
#######################################################################
@@ -5162,40 +5166,42 @@
$run{'rtsp-ipv6'}="$pid $pid2";
}
}
- elsif($what eq "ftps") {
+ elsif($what =~ /^(ftp|imap|pop3|smtp)s$/) {
+ my $cproto = $1;
if(!$stunnel) {
# we can't run ftps tests without stunnel
return "no stunnel";
}
- if($runcert{'ftps'} && ($runcert{'ftps'} ne $certfile)) {
+ if($runcert{$what} && ($runcert{$what} ne $certfile)) {
# stop server when running and using a different cert
- if(stopserver('ftps')) {
- return "failed stopping FTPS server with different cert";
+ if(stopserver($what)) {
+ return "failed stopping $what server with different cert";
}
}
- if($torture && $run{'ftp'} &&
- !responsive_pingpong_server("ftp", "", $verbose)) {
- if(stopserver('ftp')) {
- return "failed stopping unresponsive FTP server";
+ if($torture && $run{$cproto} &&
+ !responsive_pingpong_server($cproto, "", $verbose)) {
+ if(stopserver($cproto)) {
+ return "failed stopping unresponsive $cproto server";
}
}
- if(!$run{'ftp'}) {
- ($pid, $pid2) = runpingpongserver("ftp", "", $verbose);
+ if(!$run{$cproto}) {
+ ($pid, $pid2) = runpingpongserver($cproto, "", $verbose);
if($pid <= 0) {
- return "failed starting FTP server";
+ return "failed starting $cproto server";
}
- printf ("* pid ftp => %d %d\n", $pid, $pid2) if($verbose);
- $run{'ftp'}="$pid $pid2";
+ printf ("* pid $cproto => %d %d\n", $pid, $pid2) if($verbose);
+ $run{$cproto}="$pid $pid2";
}
- if(!$run{'ftps'}) {
- ($pid, $pid2, $PORT{'ftps'}) =
- runftpsserver($verbose, "", $certfile);
+ if(!$run{$what}) {
+ ($pid, $pid2, $PORT{$what}) =
+ runsecureserver($verbose, "", $certfile, $what,
+ protoport($cproto));
if($pid <= 0) {
- return "failed starting FTPS server (stunnel)";
+ return "failed starting $what server (stunnel)";
}
- logmsg sprintf("* pid ftps => %d %d\n", $pid, $pid2)
+ logmsg sprintf("* pid $what => %d %d\n", $pid, $pid2)
if($verbose);
- $run{'ftps'}="$pid $pid2";
+ $run{$what}="$pid $pid2";
}
}
elsif($what eq "file") {