]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tests: increase sws timeout for more robust testing
authorStefan Eissing <stefan@eissing.org>
Thu, 6 Apr 2023 09:19:46 +0000 (11:19 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 6 Apr 2023 14:28:34 +0000 (16:28 +0200)
- for https CONNECT forwarding, this was fixed at 5 seconds
  which led to spurious CI test failures
- add --keepalive parameter to sws to control this
- let httpserver use 30 seconds

Closes #10898

tests/http-server.pl
tests/runtests.pl
tests/server/sws.c

index bc5af7bcf87dd3f122f95dcea352deef9ac1f4ac..b96e7e9e483d9c50bce10a72e62f49043bbc3847 100755 (executable)
@@ -53,6 +53,7 @@ my $portfile;        # port number file
 my $logfile;         # log file
 my $cmdfile;         # command file
 my $connect;         # IP to connect to on CONNECT
+my $keepalive_secs;  # number of seconds to keep idle connections
 my $srcdir;
 my $gopher = 0;
 
@@ -126,6 +127,12 @@ while(@ARGV) {
             shift @ARGV;
         }
     }
+    elsif($ARGV[0] eq '--keepalive') {
+        if($ARGV[1]) {
+            $keepalive_secs = $ARGV[1];
+            shift @ARGV;
+        }
+    }
     elsif($ARGV[0] eq '--id') {
         if($ARGV[1] =~ /^(\d+)$/) {
             $idnum = $1 if($1 > 0);
@@ -171,6 +178,7 @@ $flags .= "--pidfile \"$pidfile\" ".
     "--portfile \"$portfile\" ";
 $flags .= "--gopher " if($gopher);
 $flags .= "--connect $connect " if($connect);
+$flags .= "--keepalive $keepalive_secs " if($keepalive_secs);
 if($ipvnum eq 'unix') {
     $flags .= "--unix-socket '$unix_socket' ";
 } else {
index 487cc0d39d097f14494e623e5f3a7af03846595f..6d4d4757ac6bebcdee755fe2cc608003d5ea755f 100755 (executable)
@@ -1552,6 +1552,8 @@ sub runhttpserver {
     my $idnum = 1;
     my $exe = "$perl $srcdir/http-server.pl";
     my $verbose_flag = "--verbose ";
+    my $keepalive_secs = 30; # forwarded to sws, was 5 by default which
+                             # led to pukes in CI jobs
 
     if($alt eq "ipv6") {
         # if IPv6, use a different setup
@@ -1590,6 +1592,7 @@ sub runhttpserver {
     my $flags = "";
     $flags .= "--gopher " if($proto eq "gopher");
     $flags .= "--connect $HOSTIP " if($alt eq "proxy");
+    $flags .= "--keepalive $keepalive_secs ";
     $flags .= $verbose_flag if($debugprotocol);
     $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
     $flags .= "--logdir \"$LOGDIR\" ";
index 1b9ec6216bc92af88e694e337ca13c617880c784..76215dfc7be883463d5433bd742cd06fb5b22f8f 100644 (file)
@@ -146,8 +146,8 @@ static void storerequest(const char *reqbuf, size_t totalsize);
 #endif
 
 const char *serverlogfile = DEFAULT_LOGFILE;
-const char *logdir = "log";
-char loglockfile[256];
+static const char *logdir = "log";
+static char loglockfile[256];
 
 #define SWSVERSION "curl test suite HTTP server/0.1"
 
@@ -1391,7 +1391,8 @@ static curl_socket_t connect_to(const char *ipaddr, unsigned short port)
 static void http_connect(curl_socket_t *infdp,
                          curl_socket_t rootfd,
                          const char *ipaddr,
-                         unsigned short ipport)
+                         unsigned short ipport,
+                         int keepalive_secs)
 {
   curl_socket_t serverfd[2] = {CURL_SOCKET_BAD, CURL_SOCKET_BAD};
   curl_socket_t clientfd[2] = {CURL_SOCKET_BAD, CURL_SOCKET_BAD};
@@ -1747,7 +1748,7 @@ static void http_connect(curl_socket_t *infdp,
     } /* (rc > 0) */
     else {
       timeout_count++;
-      if(timeout_count > 5) {
+      if(timeout_count > keepalive_secs) {
         logmsg("CONNECT proxy timeout after %d idle seconds!", timeout_count);
         break;
       }
@@ -1867,7 +1868,8 @@ static curl_socket_t accept_connection(curl_socket_t sock)
    is no data waiting, or < 0 if it should be closed */
 static int service_connection(curl_socket_t msgsock, struct httprequest *req,
                               curl_socket_t listensock,
-                              const char *connecthost)
+                              const char *connecthost,
+                              int keepalive_secs)
 {
   if(got_exit_signal)
     return -1;
@@ -1914,7 +1916,8 @@ static int service_connection(curl_socket_t msgsock, struct httprequest *req,
       return 1;
     }
     else {
-      http_connect(&msgsock, listensock, connecthost, req->connect_port);
+      http_connect(&msgsock, listensock, connecthost, req->connect_port,
+                   keepalive_secs);
       return -1;
     }
   }
@@ -1960,6 +1963,7 @@ int main(int argc, char *argv[])
   const char *socket_type = "IPv4";
   char port_str[11];
   const char *location_str = port_str;
+  int keepalive_secs = 5;
 
   /* a default CONNECT port is basically pointless but still ... */
   size_t socket_idx;
@@ -2059,6 +2063,21 @@ int main(int argc, char *argv[])
         arg++;
       }
     }
+    else if(!strcmp("--keepalive", argv[arg])) {
+      arg++;
+      if(argc>arg) {
+        char *endptr;
+        unsigned long ulnum = strtoul(argv[arg], &endptr, 10);
+        if((endptr != argv[arg] + strlen(argv[arg])) ||
+           (ulnum && ((ulnum < 0UL) || (ulnum > 65535UL)))) {
+          fprintf(stderr, "sws: invalid --keepalive argument (%s), must "
+                          "be number of seconds\n", argv[arg]);
+          return 0;
+        }
+        keepalive_secs = curlx_ultous(ulnum);
+        arg++;
+      }
+    }
     else if(!strcmp("--connect", argv[arg])) {
       /* The connect host IP number that the proxy will connect to no matter
          what the client asks for, but also use this as a hint that we run as
@@ -2320,7 +2339,7 @@ int main(int argc, char *argv[])
         /* Service this connection until it has nothing available */
         do {
           rc = service_connection(all_sockets[socket_idx], req, sock,
-                                  connecthost);
+                                  connecthost, keepalive_secs);
           if(got_exit_signal)
             goto sws_cleanup;