]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
scorecard: more params for upload tests
authorStefan Eissing <stefan@eissing.org>
Fri, 31 Oct 2025 15:44:38 +0000 (16:44 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 31 Oct 2025 22:27:59 +0000 (23:27 +0100)
Add --upload-parallel=n for controlling upload parallelism. Make upload
processing similar to download processing.

Closes #19302

tests/http/scorecard.py

index d987fc586b3f86548e9384752da19d7768c6dfba..6afb9c74016adee684e86c9458c2dedd5cb26099 100644 (file)
@@ -194,6 +194,7 @@ class ScoreRunner:
                  verbose: int,
                  curl_verbose: int,
                  download_parallel: int = 0,
+                 upload_parallel: int = 0,
                  server_addr: Optional[str] = None,
                  with_flame: bool = False,
                  socks_args: Optional[List[str]] = None,
@@ -206,6 +207,7 @@ class ScoreRunner:
         self.server_port = server_port
         self._silent_curl = not curl_verbose
         self._download_parallel = download_parallel
+        self._upload_parallel = upload_parallel
         self._with_flame = with_flame
         self._socks_args = socks_args
         self._limit_rate = limit_rate
@@ -472,11 +474,13 @@ class ScoreRunner:
 
     def uploads(self, count: int, fsizes: List[int], meta: Dict[str, Any]) -> Dict[str, Any]:
         nsamples = meta['samples']
-        max_parallel = self._download_parallel if self._download_parallel > 0 else count
-        url = f'https://{self.env.domain2}:{self.server_port}/curltest/put'
-        cols = ['size', 'single']
+        max_parallel = self._upload_parallel if self._upload_parallel > 0 else count
+        cols = ['size']
+        if not self._upload_parallel:
+            cols.append('single')
+            if count > 1:
+                cols.append(f'serial({count})')
         if count > 1:
-            cols.append(f'serial({count})')
             cols.append(f'parallel({count}x{max_parallel})')
         rows = []
         for fsize in fsizes:
@@ -484,14 +488,16 @@ class ScoreRunner:
                 'val': fsize,
                 'sval': Card.fmt_size(fsize)
             }]
+            self.info(f'{row[0]["sval"]} uploads...')
+            url = f'https://{self.env.domain2}:{self.server_port}/curltest/put'
             fname = f'upload{row[0]["sval"]}.data'
             fpath = self._make_docs_file(docs_dir=self.env.gen_dir,
                                          fname=fname, fsize=fsize)
-
-            self.info(f'{row[0]["sval"]} uploads...')
-            row.append(self.ul_single(url=url, fpath=fpath, nsamples=nsamples))
+            if 'single' in cols:
+                row.append(self.ul_single(url=url, fpath=fpath, nsamples=nsamples))
             if count > 1:
-                row.append(self.ul_serial(url=url, fpath=fpath, count=count, nsamples=nsamples))
+                if 'single' in cols:
+                    row.append(self.ul_serial(url=url, fpath=fpath, count=count, nsamples=nsamples))
                 row.append(self.ul_parallel(url=url, fpath=fpath, count=count, nsamples=nsamples))
             rows.append(row)
             self.info('done.\n')
@@ -723,6 +729,7 @@ def run_score(args, protocol):
                                verbose=args.verbose,
                                curl_verbose=args.curl_verbose,
                                download_parallel=args.download_parallel,
+                               upload_parallel=args.upload_parallel,
                                with_flame=args.flame,
                                socks_args=socks_args,
                                limit_rate=args.limit_rate)
@@ -750,6 +757,7 @@ def run_score(args, protocol):
                                server_port=server_port,
                                verbose=args.verbose, curl_verbose=args.curl_verbose,
                                download_parallel=args.download_parallel,
+                               upload_parallel=args.upload_parallel,
                                with_flame=args.flame,
                                socks_args=socks_args,
                                limit_rate=args.limit_rate)
@@ -777,6 +785,7 @@ def run_score(args, protocol):
                                server_port=server_port,
                                verbose=args.verbose, curl_verbose=args.curl_verbose,
                                download_parallel=args.download_parallel,
+                               upload_parallel=args.upload_parallel,
                                with_flame=args.flame,
                                socks_args=socks_args,
                                limit_rate=args.limit_rate)
@@ -887,6 +896,9 @@ def main():
     parser.add_argument("--upload-count", action='store', type=int,
                         metavar='number', default=50,
                         help="perform that many uploads")
+    parser.add_argument("--upload-parallel", action='store', type=int,
+                        metavar='number', default=0,
+                        help="perform that many uploads in parallel (default all)")
 
     parser.add_argument("-r", "--requests", action='store_true',
                         default=False, help="evaluate requests")