mirror of
https://github.com/lexmount/moli.git
synced 2026-09-28 16:01:39 +00:00
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
54 lines
2.6 KiB
Python
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()
|