| 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}' |