75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
import inspect
|
|
import json
|
|
import os
|
|
import pytest
|
|
|
|
from .env import H2Conf, H2TestEnv
|
|
|
|
|
|
@pytest.mark.skipif(condition=H2TestEnv.is_unsupported, reason="mod_http2 not supported here")
|
|
class TestTiming:
|
|
|
|
LOGFILE = ""
|
|
|
|
@pytest.fixture(autouse=True, scope='class')
|
|
def _class_scope(self, env):
|
|
TestTiming.LOGFILE = os.path.join(env.server_logs_dir, "test_009")
|
|
if os.path.isfile(TestTiming.LOGFILE):
|
|
os.remove(TestTiming.LOGFILE)
|
|
conf = H2Conf(env=env)
|
|
conf.add([
|
|
"CustomLog logs/test_009 combined"
|
|
])
|
|
conf.add_vhost_cgi()
|
|
conf.add_vhost_test1()
|
|
conf.install()
|
|
assert env.apache_restart() == 0
|
|
|
|
# check that we get a positive time_taken reported on a simple GET
|
|
def test_h2_009_01(self, env):
|
|
path = '/002.jpg'
|
|
url = env.mkurl("https", "test1", f'{path}?01')
|
|
args = [
|
|
env.h2load, "-n", "1", "-c", "1", "-m", "1",
|
|
f"--connect-to=localhost:{env.https_port}",
|
|
f"--base-uri={url}", url
|
|
]
|
|
r = env.run(args)
|
|
# Restart for logs to be flushed out
|
|
assert env.apache_restart() == 0
|
|
found = False
|
|
for line in open(TestTiming.LOGFILE).readlines():
|
|
e = json.loads(line)
|
|
if e['request'] == f'GET {path}?01 HTTP/2.0':
|
|
assert e['time_taken'] > 0
|
|
found = True
|
|
assert found, f'request not found in {TestTiming.LOGFILE}'
|
|
|
|
# test issue #253, where time_taken in a keepalive situation is not
|
|
# reported until the next request arrives
|
|
def test_h2_009_02(self, env):
|
|
baseurl = env.mkurl("https", "test1", '/')
|
|
tscript = os.path.join(env.gen_dir, 'h2load-timing-009_02')
|
|
with open(tscript, 'w') as fd:
|
|
fd.write('\n'.join([
|
|
f'0.0\t/002.jpg?02a', # 1st request right away
|
|
f'1000.0\t/002.jpg?02b', # 2nd a second later
|
|
]))
|
|
args = [
|
|
env.h2load,
|
|
f'--timing-script-file={tscript}',
|
|
f"--connect-to=localhost:{env.https_port}",
|
|
f"--base-uri={baseurl}"
|
|
]
|
|
r = env.run(args)
|
|
# Restart for logs to be flushed out
|
|
assert env.apache_restart() == 0
|
|
found = False
|
|
for line in open(TestTiming.LOGFILE).readlines():
|
|
e = json.loads(line)
|
|
if e['request'] == f'GET /002.jpg?02a HTTP/2.0':
|
|
assert e['time_taken'] > 0
|
|
assert e['time_taken'] < 500 * 1000, f'time for 1st request not reported correctly'
|
|
found = True
|
|
assert found, f'request not found in {TestTiming.LOGFILE}'
|