Skip to content

Commit ad8f6fe

Browse files
author
Thiago Perrotta
committed
test: add network interception continue request invalidation tests
create create_blocked_request helper
1 parent 78f708b commit ad8f6fe

File tree

3 files changed

+125
-1
lines changed

3 files changed

+125
-1
lines changed

tools/webdriver/webdriver/bidi/modules/network.py

+24-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ def __init__(self, pattern: str):
4141
class Network(BidiModule):
4242
@command
4343
def add_intercept(
44-
self, phases: List[str], url_patterns: Optional[List[URLPattern]] = None
44+
self,
45+
phases: List[str],
46+
url_patterns: Optional[List[URLPattern]] = None
4547
) -> Mapping[str, Any]:
4648
params: MutableMapping[str, Any] = {
4749
"phases": phases,
@@ -57,6 +59,27 @@ def _add_intercept(self, result: Mapping[str, Any]) -> Any:
5759
assert result["intercept"] is not None
5860
return result["intercept"]
5961

62+
@command
63+
def continue_request(self,
64+
request: str,
65+
method: Optional[str] = None,
66+
url: Optional[str] = None) -> Mapping[str, Any]:
67+
params: MutableMapping[str, Any] = {
68+
"request": request,
69+
}
70+
71+
if method is not None:
72+
params["method"] = method
73+
74+
if url is not None:
75+
params["url"] = url
76+
77+
# TODO: Add body.
78+
# TODO: Add cookies.
79+
# TODO: Add headers.
80+
81+
return params
82+
6083
@command
6184
def fail_request(self, request: str) -> Mapping[str, Any]:
6285
params: MutableMapping[str, Any] = {"request": request}

webdriver/tests/bidi/network/continue_request/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import asyncio
2+
import pytest
3+
import webdriver.bidi.error as error
4+
from webdriver.bidi.modules.script import ScriptEvaluateResultException
5+
6+
pytestmark = pytest.mark.asyncio
7+
8+
PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt"
9+
10+
11+
@pytest.mark.parametrize("value", [None, False, 42, {}, []])
12+
async def test_params_request_invalid_type(bidi_session, value):
13+
with pytest.raises(error.InvalidArgumentException):
14+
await bidi_session.network.continue_request(request=value)
15+
16+
17+
@pytest.mark.parametrize("value", ["", "foo"])
18+
async def test_params_request_invalid_value(bidi_session, value):
19+
with pytest.raises(error.NoSuchRequestException):
20+
await bidi_session.network.continue_request(request=value)
21+
22+
23+
async def test_params_request_no_such_request(bidi_session, setup_network_test,
24+
wait_for_event, fetch, url):
25+
await setup_network_test(events=[
26+
"network.responseCompleted",
27+
])
28+
on_response_completed = wait_for_event("network.responseCompleted")
29+
30+
text_url = url(PAGE_EMPTY_TEXT)
31+
await fetch(text_url)
32+
33+
response_completed_event = await on_response_completed
34+
request = response_completed_event["request"]["request"]
35+
36+
with pytest.raises(error.NoSuchRequestException):
37+
await bidi_session.network.continue_request(request=request)
38+
39+
40+
@pytest.mark.parametrize("value", [False, 42, {}, []])
41+
async def test_params_method_invalid_type(bidi_session, value,
42+
setup_network_test, url, fetch,
43+
wait_for_event, add_intercept):
44+
request = await create_blocked_request(setup_network_test, url,
45+
add_intercept, fetch,
46+
wait_for_event)
47+
48+
with pytest.raises(error.InvalidArgumentException):
49+
await bidi_session.network.continue_request(request=request,
50+
method=value)
51+
52+
53+
@pytest.mark.parametrize("value", [False, 42, {}, []])
54+
async def test_params_url_invalid_type(bidi_session, value, setup_network_test,
55+
url, fetch, wait_for_event,
56+
add_intercept):
57+
request = await create_blocked_request(setup_network_test, url,
58+
add_intercept, fetch,
59+
wait_for_event)
60+
61+
with pytest.raises(error.InvalidArgumentException):
62+
await bidi_session.network.continue_request(request=request, url=value)
63+
64+
65+
@pytest.mark.parametrize("protocol", ["http", "https"])
66+
@pytest.mark.parametrize("value", [":invalid", "#invalid"])
67+
async def test_params_url_invalid_value(bidi_session, protocol, value,
68+
setup_network_test, url, fetch,
69+
wait_for_event, add_intercept):
70+
request = await create_blocked_request(setup_network_test, url,
71+
add_intercept, fetch,
72+
wait_for_event)
73+
74+
with pytest.raises(error.InvalidArgumentException):
75+
await bidi_session.network.continue_request(
76+
request=request, url=f"{protocol}://{value}")
77+
78+
79+
# TODO: Add body.
80+
# TODO: Add cookies.
81+
# TODO: Add headers.
82+
83+
84+
async def create_blocked_request(setup_network_test, url, add_intercept, fetch,
85+
wait_for_event):
86+
await setup_network_test(events=["network.beforeRequestSent"])
87+
88+
text_url = url(PAGE_EMPTY_TEXT)
89+
await add_intercept(
90+
phases=["beforeRequestSent"],
91+
url_patterns=[{
92+
"type": "string",
93+
"pattern": text_url,
94+
}],
95+
)
96+
97+
asyncio.ensure_future(fetch(text_url))
98+
event = await wait_for_event("network.beforeRequestSent")
99+
request = event["request"]["request"]
100+
101+
return request

0 commit comments

Comments
 (0)