]> granicus.if.org Git - curl/commitdiff
sws: Added writedelay HTTP server command
authorDan Fandrich <dan@coneharvesters.com>
Fri, 1 Oct 2010 22:21:59 +0000 (00:21 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 1 Oct 2010 22:21:59 +0000 (00:21 +0200)
This delays between write operations, hopefully making it easier
to spot problems where libcurl doesn't flush the socket properly
before waiting for the next response.

tests/FILEFORMAT
tests/data/test1117
tests/server/sws.c

index 131d145112adf3498c02f2bcfc181ce2e9db2126..fb162a358138c97735cd26165d67d1fdc43e0858 100644 (file)
@@ -124,6 +124,7 @@ auth_required   if this is set and a POST/PUT is made without auth, the
                 server will NOT wait for the full request body to get sent
 idle            do nothing after receiving the request, just "sit idle"
 stream          continuously send data to the client, never-ending
+writedelay: [secs] delay this amount between reply packets
 pipe: [num]     tell the server to expect this many HTTP requests before
                 sending back anything, to allow pipelining tests
 skip: [num]     instructs the server to ignore reading this many bytes from a PUT
index 25737bcd2c89585d1c327011b506201b67ff0ae9..5b696112b1b1f21fdec3dab9f96ac70c4c820f60 100644 (file)
@@ -13,9 +13,10 @@ Range
 HTTP/1.1 416 Requested Range Not Satisfiable\r
 Date: Thu, 09 Sep 2010 14:49:00 GMT\r
 Accept-Ranges: bytes\r
-Content-Length: 6\r
+Content-Length: 115\r
 \r
-Error
+This is a long error message that is large enough that the test server is
+guaranteed to split it into two packets.
 </data>
 
 <data1>
@@ -28,6 +29,10 @@ Content-Type: text/plain
 \r
 partial body
 </data1>
+
+<servercmd>
+writedelay: 1
+</servercmd>
 </reply>
 
 # Client-side
@@ -49,8 +54,10 @@ HTTP with invalid range then another URL
 HTTP/1.1 416 Requested Range Not Satisfiable\r
 Date: Thu, 09 Sep 2010 14:49:00 GMT\r
 Accept-Ranges: bytes\r
-Content-Length: 6\r
+Content-Length: 115\r
 \r
+This is a long error message that is large enough that the test server is
+guaranteed to split it into two packets.
 HTTP/1.1 206 Partial Content\r
 Date: Thu, 09 Sep 2010 14:49:01 GMT\r
 Accept-Ranges: bytes\r
index 8a93b3b8dd6f12495a02058f8bb6338a3ab7edc5..a4c040bd2b81bb0ed80e488d927283ba46e45dbd 100644 (file)
@@ -105,6 +105,8 @@ struct httprequest {
   size_t cl;      /* Content-Length of the incoming request */
   bool digest;    /* Authorization digest header found */
   bool ntlm;      /* Authorization ntlm header found */
+  int writedelay; /* if non-zero, delay this number of seconds between
+                     writes in the response */
   int pipe;       /* if non-zero, expect this many requests to do a "piped"
                      request/response */
   int skip;       /* if non-zero, the server is instructed to not read this
@@ -435,6 +437,10 @@ static int ProcessRequest(struct httprequest *req)
             logmsg("instructed to skip this number of bytes %d", num);
             req->skip = num;
           }
+          else if(1 == sscanf(cmd, "writedelay: %d", &num)) {
+            logmsg("instructed to delay %d secs between packets", num);
+            req->writedelay = num;
+          }
           else {
             logmsg("funny instruction found: %s", cmd);
           }
@@ -745,6 +751,7 @@ static int get_request(curl_socket_t sock, struct httprequest *req)
   req->ntlm = FALSE;
   req->pipe = 0;
   req->skip = 0;
+  req->writedelay = 0;
   req->rcmd = RCMD_NORMALREQ;
   req->prot_version = 0;
   req->pipelining = FALSE;
@@ -1015,6 +1022,10 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
     else {
       logmsg("Sent off %zd bytes", written);
     }
+    if (req->writedelay) {
+      logmsg("Pausing %d seconds", req->writedelay);
+      sleep(req->writedelay);
+    }
     /* write to file as well */
     fwrite(buffer, 1, (size_t)written, dump);
     if(got_exit_signal)