scorecard: add support for http: testing

Add option `--http-plain` to test against httpd without
using TLS.

Closes #21805
This commit is contained in:
Stefan Eissing 2026-05-29 11:06:58 +02:00 committed by Daniel Stenberg
parent 722b59b3ab
commit 24874a4f04
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2

View file

@ -240,6 +240,7 @@ class ScoreRunner:
with_flame: bool = False,
socks_args: Optional[List[str]] = None,
limit_rate: Optional[str] = None,
http_plain: bool = False,
suppress_cl: bool = False):
self.verbose = verbose
self.env = env
@ -254,6 +255,8 @@ class ScoreRunner:
self._socks_args = socks_args
self._limit_rate_num = 0
self._limit_rate = limit_rate
self._http_plain = http_plain
self._scheme = 'http' if http_plain else 'https'
if self._limit_rate:
m = re.match(r'(\d+(\.\d+)?)([gmkb])?', self._limit_rate.lower())
if not m:
@ -300,7 +303,7 @@ class ScoreRunner:
curl = self.mk_curl_client()
args = [
'--http3-only' if self.protocol == 'h3' else '--http2',
f'--{ipv}', f'https://{authority}/'
f'--{ipv}', f'{self._scheme}://{authority}/'
]
r = curl.run_direct(args=args, with_stats=True)
if r.exit_code == 0 and len(r.stats) == 1:
@ -456,7 +459,7 @@ class ScoreRunner:
'sval': Card.fmt_size(fsize)
}]
self.info(f'{row[0]["sval"]} downloads...')
url = f'https://{self.env.domain1}:{self.server_port}/score{row[0]["sval"]}.data'
url = f'{self._scheme}://{self.env.domain1}:{self.server_port}/score{row[0]["sval"]}.data'
if 'single' in cols:
row.append(self.dl_single(url=url, nsamples=nsamples))
if count > 1:
@ -578,7 +581,7 @@ class ScoreRunner:
'sval': Card.fmt_size(fsize)
}]
self.info(f'{row[0]["sval"]} uploads...')
url = f'https://{self.env.domain1}:{self.server_port}/curltest/put'
url = f'{self._scheme}://{self.env.domain1}:{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)
@ -635,7 +638,7 @@ class ScoreRunner:
return Card.mk_reqs_cell(samples, profiles, errors)
def requests(self, count: int, meta: Dict[str, Any]) -> Dict[str, Any]:
url = f'https://{self.env.domain1}:{self.server_port}/reqs10.data'
url = f'{self._scheme}://{self.env.domain1}:{self.server_port}/reqs10.data'
fsize = 10 * 1024
cols = ['size', 'total']
rows = []
@ -839,7 +842,7 @@ def run_score(args, protocol):
server_port = env.h3_port
else:
server_descr = f'httpd/{env.httpd_version()}'
server_port = env.https_port
server_port = env.http_port if args.http_plain else env.https_port
card = ScoreRunner(env=env,
protocol=protocol,
server_descr=server_descr,
@ -849,7 +852,8 @@ def run_score(args, protocol):
upload_parallel=args.upload_parallel,
with_flame=args.flame,
socks_args=socks_args,
limit_rate=args.limit_rate)
limit_rate=args.limit_rate,
http_plain=args.http_plain)
card.setup_resources(server_docs, downloads)
cards.append(card)
@ -961,6 +965,8 @@ def main():
default = False, help="produce a flame graph on curl")
parser.add_argument("--limit-rate", action='store', type=str,
default=None, help="use curl's --limit-rate")
parser.add_argument("--http-plain", action='store_true',
default=False, help="run http: test instead of https:")
parser.add_argument("-H", "--handshakes", action='store_true',
default=False, help="evaluate handshakes only")