diff options
Diffstat (limited to 'tests/runtests.pl')
-rwxr-xr-x | tests/runtests.pl | 95 |
1 files changed, 91 insertions, 4 deletions
diff --git a/tests/runtests.pl b/tests/runtests.pl index 6b1410e4d..c44b03fb5 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -78,6 +78,7 @@ use serverhelp qw( servername_str servername_canon server_pidfilename + server_portfilename server_logfilename ); @@ -123,6 +124,7 @@ my $base = 8990; # base port number my $minport; # minimum used port number my $maxport; # maximum used port number +my $MQTTPORT; # MQTT server port my $HTTPPORT; # HTTP server port my $HTTP6PORT; # HTTP IPv6 server port my $HTTPSPORT; # HTTPS (stunnel) server port @@ -326,6 +328,7 @@ my $run_event_based; # run curl with --test-event to test the event API 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 +my %serverportfile;# all server port file names, identified by server id my %runcert; # cert file currently in use by an ssl running server # torture test variables @@ -399,7 +402,8 @@ delete $ENV{'SSL_CERT_PATH'} if($ENV{'SSL_CERT_PATH'}); delete $ENV{'CURL_CA_BUNDLE'} if($ENV{'CURL_CA_BUNDLE'}); ####################################################################### -# Load serverpidfile hash with pidfile names for all possible servers. +# Load serverpidfile and serverportfile hashes with file names for all +# possible servers. # sub init_serverpidfile_hash { for my $proto (('ftp', 'http', 'imap', 'pop3', 'smtp', 'http/2')) { @@ -409,17 +413,21 @@ sub init_serverpidfile_hash { my $serv = servername_id("$proto$ssl", $ipvnum, $idnum); my $pidf = server_pidfilename("$proto$ssl", $ipvnum, $idnum); $serverpidfile{$serv} = $pidf; + my $portf = server_portfilename("$proto$ssl", $ipvnum, $idnum); + $serverportfile{$serv} = $portf; } } } } for my $proto (('tftp', 'sftp', 'socks', 'ssh', 'rtsp', 'gopher', 'httptls', - 'dict', 'smb', 'smbs', 'telnet')) { + 'dict', 'smb', 'smbs', 'telnet', 'mqtt')) { 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; + my $portf = server_portfilename($proto, $ipvnum, $idnum); + $serverportfile{$serv} = $portf; } } } @@ -428,6 +436,8 @@ sub init_serverpidfile_hash { my $serv = servername_id("$proto$ssl", "unix", 1); my $pidf = server_pidfilename("$proto$ssl", "unix", 1); $serverpidfile{$serv} = $pidf; + my $portf = server_portfilename("$proto$ssl", "unix", 1); + $serverportfile{$serv} = $portf; } } } @@ -2165,6 +2175,67 @@ sub runsshserver { ####################################################################### # Start the socks server # +sub runmqttserver { + my ($id, $verbose, $ipv6) = @_; + my $ip=$HOSTIP; + my $port = $MQTTPORT; + my $proto = 'mqtt'; + my $ipvnum = 4; + my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1; + my $server; + my $srvrname; + my $pidfile; + my $portfile; + my $logfile; + my $flags = ""; + + $server = servername_id($proto, $ipvnum, $idnum); + $pidfile = $serverpidfile{$server}; + $portfile = $serverportfile{$server}; + + # don't retry if the server doesn't work + if ($doesntrun{$pidfile}) { + return (0,0); + } + + my $pid = processexists($pidfile); + if($pid > 0) { + stopserver($server, "$pid"); + } + unlink($pidfile) if(-f $pidfile); + + $srvrname = servername_str($proto, $ipvnum, $idnum); + + $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum); + + # start our MQTT server - on a random port! + my $cmd="server/mqttd".exe_ext('SRV'). + " --port 0 ". + " --pidfile $pidfile". + " --portfile $portfile". + " --config $FTPDCMD"; + my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0); + + if($sockspid <= 0 || !pidexists($sockspid)) { + # it is NOT alive + logmsg "RUN: failed to start the $srvrname server\n"; + stopserver($server, "$pid2"); + $doesntrun{$pidfile} = 1; + return (0,0); + } + + $MQTTPORT = pidfromfile($portfile); + + if($verbose) { + logmsg "RUN: $srvrname server is now running PID $pid2 on PORT $MQTTPORT\n"; + } + + return ($pid2, $sockspid); +} + +####################################################################### +# Start the socks server +# sub runsocksserver { my ($id, $verbose, $ipv6) = @_; my $ip=$HOSTIP; @@ -3124,6 +3195,7 @@ sub subVariables { $$thing =~ s/%HTTP2PORT/$HTTP2PORT/g; $$thing =~ s/%HTTPPORT/$HTTPPORT/g; $$thing =~ s/%PROXYPORT/$HTTPPROXYPORT/g; + $$thing =~ s/%MQTTPORT/$MQTTPORT/g; $$thing =~ s/%IMAP6PORT/$IMAP6PORT/g; $$thing =~ s/%IMAPPORT/$IMAPPORT/g; @@ -3684,9 +3756,14 @@ sub singletest { if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-include/)) { $inc = " --include"; } - $cmdargs = "$out$inc "; - $cmdargs .= "--trace-ascii log/trace$testnum "; + + if($cmdhash{'option'} && ($cmdhash{'option'} =~ /binary-trace/)) { + $cmdargs .= "--trace log/trace$testnum "; + } + else { + $cmdargs .= "--trace-ascii log/trace$testnum "; + } $cmdargs .= "--trace-time "; if($evbased) { $cmdargs .= "--test-event "; @@ -4802,6 +4879,16 @@ sub startservers { $run{'socks'}="$pid $pid2"; } } + elsif($what eq "mqtt" ) { + if(!$run{'mqtt'}) { + ($pid, $pid2) = runmqttserver("", $verbose); + if($pid <= 0) { + return "failed starting mqtt server"; + } + printf ("* pid mqtt => %d %d\n", $pid, $pid2) if($verbose); + $run{'mqtt'}="$pid $pid2"; + } + } elsif($what eq "http-unix") { if($torture && $run{'http-unix'} && !responsive_http_server("http", $verbose, "unix", $HTTPUNIXPATH)) { |