1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
# mypy: allow-untyped-defs
import logging
import os
import pickle
import platform
import pytest
import localpaths # type: ignore
from . import serve
from .serve import ConfigBuilder, inject_script
logger = logging.getLogger()
@pytest.mark.skipif(platform.uname()[0] == "Windows",
reason="Expected contents are platform-dependent")
def test_make_hosts_file_nix():
with ConfigBuilder(logger,
ports={"http": [8000]},
browser_host="foo.bar",
alternate_hosts={"alt": "foo2.bar"},
subdomains={"a", "b"},
not_subdomains={"x, y"}) as c:
hosts = serve.make_hosts_file(c, "192.168.42.42")
lines = hosts.split("\n")
assert lines == [
"# Start web-platform-tests hosts",
"192.168.42.42\tfoo.bar",
"192.168.42.42\ta.foo.bar",
"192.168.42.42\tb.foo.bar",
"192.168.42.42\tfoo2.bar",
"192.168.42.42\ta.foo2.bar",
"192.168.42.42\tb.foo2.bar",
"# End web-platform-tests hosts",
"",
]
@pytest.mark.skipif(platform.uname()[0] != "Windows",
reason="Expected contents are platform-dependent")
def test_make_hosts_file_windows():
with ConfigBuilder(logger,
ports={"http": [8000]},
browser_host="foo.bar",
alternate_hosts={"alt": "foo2.bar"},
subdomains={"a", "b"},
not_subdomains={"x", "y"}) as c:
hosts = serve.make_hosts_file(c, "192.168.42.42")
lines = hosts.split("\n")
assert lines == [
"# Start web-platform-tests hosts",
"192.168.42.42\tfoo.bar",
"192.168.42.42\ta.foo.bar",
"192.168.42.42\tb.foo.bar",
"192.168.42.42\tfoo2.bar",
"192.168.42.42\ta.foo2.bar",
"192.168.42.42\tb.foo2.bar",
"0.0.0.0\tx.foo.bar",
"0.0.0.0\ty.foo.bar",
"0.0.0.0\tx.foo2.bar",
"0.0.0.0\ty.foo2.bar",
"# End web-platform-tests hosts",
"",
]
def test_ws_doc_root_default():
with ConfigBuilder(logger) as c:
assert c.doc_root == localpaths.repo_root
assert c.ws_doc_root == os.path.join(localpaths.repo_root, "websockets", "handlers")
assert c.paths["ws_doc_root"] == c.ws_doc_root
def test_init_ws_doc_root():
with ConfigBuilder(logger, ws_doc_root="/") as c:
assert c.doc_root == localpaths.repo_root # check this hasn't changed
assert c.ws_doc_root == "/"
assert c.paths["ws_doc_root"] == c.ws_doc_root
def test_set_ws_doc_root():
cb = ConfigBuilder(logger)
cb.ws_doc_root = "/"
with cb as c:
assert c.doc_root == localpaths.repo_root # check this hasn't changed
assert c.ws_doc_root == "/"
assert c.paths["ws_doc_root"] == c.ws_doc_root
def test_pickle():
# Ensure that the config object can be pickled
with ConfigBuilder(logger) as c:
pickle.dumps(c)
def test_alternate_host_unspecified():
ConfigBuilder(logger, browser_host="web-platform.test")
@pytest.mark.parametrize("primary, alternate", [
("web-platform.test", "web-platform.test"),
("a.web-platform.test", "web-platform.test"),
("web-platform.test", "a.web-platform.test"),
("a.web-platform.test", "a.web-platform.test"),
])
def test_alternate_host_invalid(primary, alternate):
with pytest.raises(ValueError):
ConfigBuilder(logger, browser_host=primary, alternate_hosts={"alt": alternate})
@pytest.mark.parametrize("primary, alternate", [
("web-platform.test", "not-web-platform.test"),
("a.web-platform.test", "b.web-platform.test"),
("web-platform-tests.dev", "web-platform-tests.live"),
])
def test_alternate_host_valid(primary, alternate):
ConfigBuilder(logger, browser_host=primary, alternate_hosts={"alt": alternate})
# A token marking the location of expected script injection.
INJECT_SCRIPT_MARKER = b"<!-- inject here -->"
def test_inject_script_after_head():
html = b"""<!DOCTYPE html>
<html>
<head>
<!-- inject here --><script src="test.js"></script>
</head>
<body>
</body>
</html>"""
assert INJECT_SCRIPT_MARKER in html
assert inject_script(html.replace(INJECT_SCRIPT_MARKER, b""), INJECT_SCRIPT_MARKER) == html
def test_inject_script_no_html_head():
html = b"""<!DOCTYPE html>
<!-- inject here --><div></div>"""
assert INJECT_SCRIPT_MARKER in html
assert inject_script(html.replace(INJECT_SCRIPT_MARKER, b""), INJECT_SCRIPT_MARKER) == html
def test_inject_script_no_doctype():
html = b"""<!-- inject here --><div></div>"""
assert INJECT_SCRIPT_MARKER in html
assert inject_script(html.replace(INJECT_SCRIPT_MARKER, b""), INJECT_SCRIPT_MARKER) == html
def test_inject_script_parse_error():
html = b"""<!--<!-- inject here --><div></div>"""
assert INJECT_SCRIPT_MARKER in html
# On a parse error, the script should not be injected and the original content should be
# returned.
assert INJECT_SCRIPT_MARKER not in inject_script(html.replace(INJECT_SCRIPT_MARKER, b""), INJECT_SCRIPT_MARKER)
|