Files
moli/moli-benchmark/tests/test_wpt_header_count.py
ldm0 569a74f520 fix(wpt): match the wptserve header count limit
Accept the 253-header WPT fixtures using the same bounded 512-header limit as wptserve. Exercise both request and response parsing while retaining count and line-length rejection.

Source: 8aa635acc5
2026-09-15 13:11:01 +08:00

54 lines
2.6 KiB
Python

from __future__ import annotations
import tempfile
import unittest
from http.client import HTTPConnection
from pathlib import Path
from unittest.mock import patch
from moli_benchmark.wpt_cross.server import WptFixtureServer
class HeaderCountFixtureTests(unittest.TestCase):
def test_more_than_250_request_and_response_headers_are_supported(self) -> None:
with tempfile.TemporaryDirectory() as root:
directory = Path(root)
(directory / "resources").mkdir()
(directory / "resources/testharness.js").write_text("// testharness")
(directory / "headers.txt").write_text("ok")
(directory / "headers.txt.headers").write_text(
"\n".join(f"X-Response-{index}: value-{index}" for index in range(253))
)
with patch("moli_benchmark.wpt_cross.server._global_ipv6_address", return_value=None), WptFixtureServer(directory) as server:
connection = HTTPConnection("127.0.0.1", server.port, timeout=2)
self.addCleanup(connection.close)
connection.request("GET", "/headers.txt", headers={
f"X-Request-{index}": f"value-{index}" for index in range(253)
})
response = connection.getresponse()
self.assertEqual(response.status, 200)
self.assertEqual(response.read(), b"ok")
for index in range(253):
self.assertEqual(response.headers[f"X-Response-{index}"], f"value-{index}")
def test_header_count_and_line_length_remain_bounded(self) -> None:
with tempfile.TemporaryDirectory() as root:
directory = Path(root)
(directory / "resources").mkdir()
(directory / "resources/testharness.js").write_text("// testharness")
with patch("moli_benchmark.wpt_cross.server._global_ipv6_address", return_value=None), WptFixtureServer(directory) as server:
for headers in ({f"val{index}": "value" for index in range(512)}, {"X-Long": "x" * (64 * 1024)}):
with self.subTest(header_count=len(headers)):
connection = HTTPConnection("127.0.0.1", server.port, timeout=2)
try:
connection.request("GET", "/fetch/api/resources/status.py", headers=headers)
response = connection.getresponse()
self.assertEqual(response.status, 431)
response.read()
finally:
connection.close()
if __name__ == "__main__":
unittest.main()