| 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") | |
| @H2TestEnv.needs_h2load("1.41.0", reason="h2load misses --connect-to option") | |
| 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}' |