| import os |
| import pytest |
| |
| from .env import H2Conf, H2TestEnv |
| |
| |
| def mk_text_file(fpath: str, lines: int): |
| t110 = "" |
| for _ in range(11): |
| t110 += "0123456789" |
| with open(fpath, "w") as fd: |
| for i in range(lines): |
| fd.write("{0:015d}: ".format(i)) # total 128 bytes per line |
| fd.write(t110) |
| fd.write("\n") |
| |
| |
| @pytest.mark.skipif(condition=H2TestEnv.is_unsupported, reason="mod_http2 not supported here") |
| class TestFrameLengths: |
| |
| URI_PATHS = [] |
| |
| @pytest.fixture(autouse=True, scope='class') |
| def _class_scope(self, env): |
| docs_a = os.path.join(env.server_docs_dir, "cgi/files") |
| for fsize in [10, 100]: |
| fname = f'0-{fsize}k.txt' |
| mk_text_file(os.path.join(docs_a, fname), 8 * fsize) |
| self.URI_PATHS.append(f"/files/{fname}") |
| |
| @pytest.mark.parametrize("data_frame_len", [ |
| 99, 1024, 8192 |
| ]) |
| def test_h2_107_01(self, env, data_frame_len): |
| conf = H2Conf(env, extras={ |
| f'cgi.{env.http_tld}': [ |
| f'H2MaxDataFrameLen {data_frame_len}', |
| ] |
| }) |
| conf.add_vhost_cgi() |
| conf.install() |
| assert env.apache_restart() == 0 |
| for p in self.URI_PATHS: |
| url = env.mkurl("https", "cgi", p) |
| r = env.nghttp().get(url, options=[ |
| '--header=Accept-Encoding: none', |
| ]) |
| assert r.response["status"] == 200 |
| assert len(r.results["data_lengths"]) > 0, f'{r}' |
| too_large = [ x for x in r.results["data_lengths"] if x > data_frame_len] |
| assert len(too_large) == 0, f'{p}: {r.results["data_lengths"]}' |