pytest: tweak counts
Lower some iteration counts for tests where they do not seem to add value. Raise speed limits somewhat to shave off a second or two. Closes #14689
This commit is contained in:
parent
29610e5f3d
commit
0ae3fadb7c
@ -27,6 +27,7 @@
|
||||
import difflib
|
||||
import filecmp
|
||||
import logging
|
||||
import math
|
||||
import os
|
||||
from datetime import timedelta
|
||||
import pytest
|
||||
@ -77,23 +78,24 @@ class TestDownload:
|
||||
|
||||
# download 100 files sequentially
|
||||
@pytest.mark.parametrize("proto", ['http/1.1', 'h2', 'h3'])
|
||||
def test_02_03_download_100_sequential(self, env: Env,
|
||||
httpd, nghttpx, repeat, proto):
|
||||
def test_02_03_download_sequential(self, env: Env,
|
||||
httpd, nghttpx, repeat, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
count = 10
|
||||
curl = CurlClient(env=env)
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/data.json?[0-99]'
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/data.json?[0-{count-1}]'
|
||||
r = curl.http_download(urls=[urln], alpn_proto=proto)
|
||||
r.check_response(http_status=200, count=100, connect_count=1)
|
||||
r.check_response(http_status=200, count=count, connect_count=1)
|
||||
|
||||
# download 100 files parallel
|
||||
@pytest.mark.parametrize("proto", ['http/1.1', 'h2', 'h3'])
|
||||
def test_02_04_download_20_parallel(self, env: Env,
|
||||
httpd, nghttpx, repeat, proto):
|
||||
def test_02_04_download_parallel(self, env: Env,
|
||||
httpd, nghttpx, repeat, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
count = 20
|
||||
max_parallel = 10
|
||||
count = 10
|
||||
max_parallel = 5
|
||||
curl = CurlClient(env=env)
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/data.json?[0-{count-1}]'
|
||||
r = curl.http_download(urls=[urln], alpn_proto=proto, extra_args=[
|
||||
@ -183,7 +185,7 @@ class TestDownload:
|
||||
httpd, nghttpx, repeat, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
count = 20
|
||||
count = 5
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/data-1m?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
r = curl.http_download(urls=[urln], alpn_proto=proto)
|
||||
@ -194,7 +196,7 @@ class TestDownload:
|
||||
httpd, nghttpx, repeat, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
count = 20
|
||||
count = 5
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/data-1m?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
r = curl.http_download(urls=[urln], alpn_proto=proto, extra_args=[
|
||||
@ -209,7 +211,7 @@ class TestDownload:
|
||||
httpd, nghttpx, repeat, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
count = 10
|
||||
count = 3
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/data-10m?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
r = curl.http_download(urls=[urln], alpn_proto=proto)
|
||||
@ -224,7 +226,7 @@ class TestDownload:
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 10
|
||||
count = 3
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/data-10m?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
r = curl.http_download(urls=[urln], alpn_proto=proto, extra_args=[
|
||||
@ -237,7 +239,7 @@ class TestDownload:
|
||||
httpd, nghttpx, repeat, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
count = 50
|
||||
count = 5
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/data-10m?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
r = curl.http_download(urls=[urln], alpn_proto=proto, extra_args=[
|
||||
@ -250,7 +252,7 @@ class TestDownload:
|
||||
httpd, nghttpx, repeat, proto):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
count = 50
|
||||
count = 5
|
||||
urln = f'http://{env.domain1}:{env.http_port}/data-10m?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
r = curl.http_download(urls=[urln], alpn_proto=proto, extra_args=[
|
||||
@ -264,7 +266,7 @@ class TestDownload:
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 10
|
||||
count = 5
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/not-found?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
r = curl.http_download(urls=[urln], alpn_proto=proto, extra_args=[
|
||||
@ -278,7 +280,7 @@ class TestDownload:
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 10
|
||||
count = 5
|
||||
urln = f'https://{env.authority_for(env.domain1, proto)}/not-found?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
r = curl.http_download(urls=[urln], alpn_proto=proto, extra_args=[
|
||||
@ -306,7 +308,7 @@ class TestDownload:
|
||||
# ok, make 100 downloads with 2 parallel running and they
|
||||
# are expected to stumble into the issue when using `lib/http2.c`
|
||||
# from curl 7.88.0
|
||||
count = 100
|
||||
count = 5
|
||||
urln = f'https://{env.authority_for(env.domain1, "h2")}/data-1m?[0-{count-1}]'
|
||||
curl = CurlClient(env=env)
|
||||
r = curl.http_download(urls=[urln], alpn_proto="h2", extra_args=[
|
||||
@ -326,7 +328,7 @@ class TestDownload:
|
||||
def test_02_21_lib_serial(self, env: Env, httpd, nghttpx, proto, pause_offset, repeat):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
count = 2 if proto == 'http/1.1' else 10
|
||||
count = 2
|
||||
docname = 'data-10m'
|
||||
url = f'https://localhost:{env.https_port}/{docname}'
|
||||
client = LocalClient(name='h2-download', env=env)
|
||||
@ -345,7 +347,7 @@ class TestDownload:
|
||||
def test_02_22_lib_parallel_resume(self, env: Env, httpd, nghttpx, proto, pause_offset, repeat):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
count = 2 if proto == 'http/1.1' else 10
|
||||
count = 2
|
||||
max_parallel = 5
|
||||
docname = 'data-10m'
|
||||
url = f'https://localhost:{env.https_port}/{docname}'
|
||||
@ -369,13 +371,11 @@ class TestDownload:
|
||||
pytest.skip('OpenSSL QUIC fails here')
|
||||
if proto == 'h3' and env.ci_run and env.curl_uses_lib('quiche'):
|
||||
pytest.skip("fails in CI, but works locally for unknown reasons")
|
||||
count = 10
|
||||
max_parallel = 5
|
||||
if proto in ['h2', 'h3']:
|
||||
count = 200
|
||||
max_parallel = 100
|
||||
pause_offset = 64 * 1024
|
||||
else:
|
||||
count = 10
|
||||
max_parallel = 5
|
||||
pause_offset = 12 * 1024
|
||||
docname = 'data-1m'
|
||||
url = f'https://localhost:{env.https_port}/{docname}'
|
||||
@ -400,13 +400,11 @@ class TestDownload:
|
||||
pytest.skip('OpenSSL QUIC fails here')
|
||||
if proto == 'h3' and env.ci_run and env.curl_uses_lib('quiche'):
|
||||
pytest.skip("fails in CI, but works locally for unknown reasons")
|
||||
count = 10
|
||||
max_parallel = 5
|
||||
if proto in ['h2', 'h3']:
|
||||
count = 200
|
||||
max_parallel = 100
|
||||
abort_offset = 64 * 1024
|
||||
else:
|
||||
count = 10
|
||||
max_parallel = 5
|
||||
abort_offset = 12 * 1024
|
||||
docname = 'data-1m'
|
||||
url = f'https://localhost:{env.https_port}/{docname}'
|
||||
@ -431,13 +429,11 @@ class TestDownload:
|
||||
pytest.skip('OpenSSL QUIC fails here')
|
||||
if proto == 'h3' and env.ci_run and env.curl_uses_lib('quiche'):
|
||||
pytest.skip("fails in CI, but works locally for unknown reasons")
|
||||
count = 10
|
||||
max_parallel = 5
|
||||
if proto in ['h2', 'h3']:
|
||||
count = 200
|
||||
max_parallel = 100
|
||||
fail_offset = 64 * 1024
|
||||
else:
|
||||
count = 10
|
||||
max_parallel = 5
|
||||
fail_offset = 12 * 1024
|
||||
docname = 'data-1m'
|
||||
url = f'https://localhost:{env.https_port}/{docname}'
|
||||
@ -454,19 +450,22 @@ class TestDownload:
|
||||
self.check_downloads(client, srcfile, count, complete=False)
|
||||
|
||||
# speed limited download
|
||||
@pytest.mark.parametrize("proto", ['h2', 'h3'])
|
||||
@pytest.mark.parametrize("proto", ['http/1.1', 'h2', 'h3'])
|
||||
def test_02_24_speed_limit(self, env: Env, httpd, nghttpx, proto, repeat):
|
||||
if proto == 'h3' and not env.have_h3():
|
||||
pytest.skip("h3 not supported")
|
||||
count = 1
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/data-1m'
|
||||
curl = CurlClient(env=env)
|
||||
speed_limit = 384 * 1024
|
||||
min_duration = math.floor((1024 * 1024)/speed_limit)
|
||||
r = curl.http_download(urls=[url], alpn_proto=proto, extra_args=[
|
||||
'--limit-rate', f'{196 * 1024}'
|
||||
'--limit-rate', f'{speed_limit}'
|
||||
])
|
||||
r.check_response(count=count, http_status=200)
|
||||
assert r.duration > timedelta(seconds=4), \
|
||||
f'rate limited transfer should take more than 4s, not {r.duration}'
|
||||
assert r.duration > timedelta(seconds=min_duration), \
|
||||
f'rate limited transfer should take more than {min_duration}s, '\
|
||||
f'not {r.duration}'
|
||||
|
||||
# make extreme parallel h2 upgrades, check invalid conn reuse
|
||||
# before protocol switch has happened
|
||||
@ -552,7 +551,7 @@ class TestDownload:
|
||||
@pytest.mark.parametrize("pause_offset", [0, 10*1024, 100*1023, 640000])
|
||||
@pytest.mark.parametrize("proto", ['http/1.1', 'h2', 'h3'])
|
||||
def test_02_29_h2_lib_serial(self, env: Env, httpd, nghttpx, proto, pause_offset, repeat):
|
||||
count = 2 if proto == 'http/1.1' else 10
|
||||
count = 2
|
||||
docname = 'data-10m'
|
||||
url = f'https://localhost:{env.https_port}/{docname}'
|
||||
client = LocalClient(name='h2-download', env=env)
|
||||
|
||||
@ -89,7 +89,7 @@ class TestUpload:
|
||||
pytest.skip("h3 not supported")
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
count = 50
|
||||
count = 20
|
||||
data = '0123456789'
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-{count-1}]'
|
||||
@ -107,7 +107,7 @@ class TestUpload:
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
# limit since we use a separate connection in h1
|
||||
count = 50
|
||||
count = 20
|
||||
data = '0123456789'
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-{count-1}]'
|
||||
@ -126,7 +126,7 @@ class TestUpload:
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-100k')
|
||||
count = 20
|
||||
count = 10
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-{count-1}]'
|
||||
r = curl.http_upload(urls=[url], data=f'@{fdata}', alpn_proto=proto)
|
||||
@ -163,7 +163,7 @@ class TestUpload:
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
# limit since we use a separate connection in h1
|
||||
count = 20
|
||||
count = 10
|
||||
data = '0123456789'
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-{count-1}]'
|
||||
@ -183,7 +183,7 @@ class TestUpload:
|
||||
pytest.skip("msh3 stalls here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-100k')
|
||||
# limit since we use a separate connection in h1
|
||||
count = 20
|
||||
count = 10
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-{count-1}]'
|
||||
r = curl.http_upload(urls=[url], data=f'@{fdata}', alpn_proto=proto,
|
||||
@ -199,7 +199,7 @@ class TestUpload:
|
||||
if proto == 'h3' and env.curl_uses_lib('msh3'):
|
||||
pytest.skip("msh3 stalls here")
|
||||
fdata = os.path.join(env.gen_dir, 'data-10m')
|
||||
count = 100
|
||||
count = 20
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}'\
|
||||
f'/curltest/tweak?status=400&delay=5ms&chunks=1&body_error=reset&id=[0-{count-1}]'
|
||||
@ -526,7 +526,7 @@ class TestUpload:
|
||||
count = 1
|
||||
fdata = os.path.join(env.gen_dir, 'data-100k')
|
||||
up_len = 100 * 1024
|
||||
speed_limit = 20 * 1024
|
||||
speed_limit = 50 * 1024
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/put?id=[0-0]'
|
||||
r = curl.http_put(urls=[url], fdata=fdata, alpn_proto=proto,
|
||||
@ -545,7 +545,7 @@ class TestUpload:
|
||||
pytest.skip("h3 not supported")
|
||||
count = 1
|
||||
fdata = os.path.join(env.gen_dir, 'data-100k')
|
||||
speed_limit = 20 * 1024
|
||||
speed_limit = 50 * 1024
|
||||
curl = CurlClient(env=env)
|
||||
url = f'https://{env.authority_for(env.domain1, proto)}/curltest/echo?id=[0-0]'
|
||||
r = curl.http_upload(urls=[url], data=f'@{fdata}', alpn_proto=proto,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user