Files
moli/moli-benchmark/tests/test_wpt_fixture_cache_control.py

37 lines
1.8 KiB
Python

import tempfile
import unittest
from pathlib import Path
from urllib.parse import urlencode
from urllib.request import Request, urlopen
from moli_benchmark.wpt_cross.server import WptFixtureServer
class WptFixtureCacheControlTests(unittest.TestCase):
def test_explicit_cache_control_precedes_fixture_default(self) -> None:
with tempfile.TemporaryDirectory() as root:
root_path = Path(root)
(root_path / "resources").mkdir()
(root_path / "resources/testharness.js").write_text("// testharness")
(root_path / "module.json").write_text('{"value": 1}')
sidecar = root_path / "module.json.headers"
with WptFixtureServer(root_path) as server:
for header, pipe, expected in (
(None, "", ["no-store"]),
("max-age=600", "", ["max-age=600"]),
("", "", [""]),
(None, "header(Cache-Control,max-age=30)", ["max-age=30"]),
(None, "header(cache-control,public)", ["public"]),
):
if header is None:
sidecar.unlink(missing_ok=True)
else:
sidecar.write_text("cAcHe-CoNtRoL: " + header + "\n")
for method in ("GET", "HEAD"):
with self.subTest(header=header, pipe=pipe, method=method):
url = server.base_url + "/module.json?" + urlencode({"pipe": pipe})
with urlopen(Request(url, method=method), timeout=2) as response:
self.assertEqual(response.status, 200)
self.assertEqual(response.headers.get_all("Cache-Control"), expected)
self.assertEqual(response.read(), b"" if method == "HEAD" else b'{"value": 1}')