]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
test579: improve robustness
authorStefan Eissing <stefan@eissing.org>
Thu, 8 Aug 2024 11:26:10 +0000 (13:26 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 9 Aug 2024 07:39:17 +0000 (09:39 +0200)
Log progress only at start and end of transfer to give normalized
output when upload data is only partially sent or temporarily blocked.

Fixes test with CURL_DBG_SOCK_WBLOCK=90 set.

Closes #14454

tests/data/test579
tests/libtest/lib579.c

index 68fce50d4d0477a03121cad48d108ac1ddf6fba9..eaee6e323573e41073248d1e757ceb439c6f2781 100644 (file)
@@ -76,14 +76,10 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER %LOGDIR/ip%TESTNUMBER
 # Verify data after the test has been "shot"
 <verify>
 <file name="%LOGDIR/ip%TESTNUMBER">
-Progress callback called with UL 0 out of 0
-Progress callback called with UL 5 out of 0
-Progress callback called with UL 0 out of 0
-Progress callback called with UL 8 out of 0
-Progress callback called with UL 16 out of 0
-Progress callback called with UL 26 out of 0
-Progress callback called with UL 61 out of 0
-Progress callback called with UL 66 out of 0
+Progress: start UL 0/0
+Progress: end UL 5/0
+Progress: start UL 0/0
+Progress: end UL 66/0
 </file>
 </verify>
 </testcase>
index 8b46e29d34213ca4f810616003d039ffd9728299..7e314c308c79f13220563bf3a2582150e075f8fe 100644 (file)
@@ -38,31 +38,38 @@ struct WriteThis {
   int counter;
 };
 
+static bool started = FALSE;
+static size_t last_ul = 0;
+static size_t last_ul_total = 0;
+
+static void progress_final_report(void)
+{
+  FILE *moo = fopen(libtest_arg2, "ab");
+  fprintf(moo, "Progress: end UL %zu/%zu\n", last_ul, last_ul_total);
+  started = FALSE;
+  fclose(moo);
+}
+
 static int progress_callback(void *clientp, double dltotal, double dlnow,
                              double ultotal, double ulnow)
 {
-  static int prev_ultotal = -1;
-  static int prev_ulnow = -1;
   (void)clientp; /* UNUSED */
   (void)dltotal; /* UNUSED */
   (void)dlnow; /* UNUSED */
 
-  /* to avoid depending on timing, which will cause this progress function to
-     get called a different number of times depending on circumstances, we
-     only log these lines if the numbers are different from the previous
-     invoke */
-  if((prev_ultotal != (int)ultotal) ||
-     (prev_ulnow != (int)ulnow)) {
+  if(started && ulnow <= 0.0 && last_ul) {
+    progress_final_report();
+  }
 
+  last_ul = (size_t)ulnow;
+  last_ul_total = (size_t)ultotal;
+  if(!started) {
     FILE *moo = fopen(libtest_arg2, "ab");
-    if(moo) {
-      fprintf(moo, "Progress callback called with UL %d out of %d\n",
-              (int)ulnow, (int)ultotal);
-      fclose(moo);
-    }
-    prev_ulnow = (int) ulnow;
-    prev_ultotal = (int) ultotal;
+    fprintf(moo, "Progress: start UL %zu/%zu\n", last_ul, last_ul_total);
+    started = TRUE;
+    fclose(moo);
   }
+
   return 0;
 }
 
@@ -146,6 +153,8 @@ CURLcode test(char *URL)
   /* Perform the request, res will get the return code */
   res = curl_easy_perform(curl);
 
+  progress_final_report();
+
 test_cleanup:
 
   /* clean up the headers list */