Skip to content

Commit b809a39

Browse files
Bug 1988955 - [wdspec] Add tests for network.getData with dataType request r=whimboo
Differential Revision: https://phabricator.services.mozilla.com/D267828
1 parent aea8b51 commit b809a39

File tree

8 files changed

+321
-91
lines changed

8 files changed

+321
-91
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import pytest
2+
import webdriver.bidi.error as error
3+
4+
pytestmark = pytest.mark.asyncio
5+
6+
7+
async def test_request_and_response_same_collector(
8+
bidi_session, url, setup_collected_data
9+
):
10+
[request, _] = await setup_collected_data(
11+
fetch_url=url(
12+
"/webdriver/tests/support/http_handlers/headers.py?content=somecontent"
13+
),
14+
fetch_post_data="somedata",
15+
data_types=["request", "response"],
16+
)
17+
data = await bidi_session.network.get_data(request=request, data_type="request")
18+
assert data["type"] == "string"
19+
assert data["value"] == "somedata"
20+
21+
data = await bidi_session.network.get_data(request=request, data_type="response")
22+
assert data["type"] == "string"
23+
assert data["value"] == "somecontent"
24+
25+
26+
async def test_request_and_response_different_collectors(
27+
bidi_session, url, add_data_collector, setup_collected_data
28+
):
29+
request_collector = await add_data_collector(
30+
collector_type="blob", data_types=["request"], max_encoded_data_size=1000
31+
)
32+
[request, response_collector] = await setup_collected_data(
33+
fetch_url=url(
34+
"/webdriver/tests/support/http_handlers/headers.py?content=somecontent"
35+
),
36+
fetch_post_data="somedata",
37+
data_types=["response"],
38+
)
39+
40+
# Check that both request and response data can be retrieved
41+
data = await bidi_session.network.get_data(request=request, data_type="request")
42+
assert data["type"] == "string"
43+
assert data["value"] == "somedata"
44+
45+
data = await bidi_session.network.get_data(request=request, data_type="response")
46+
assert data["type"] == "string"
47+
assert data["value"] == "somecontent"
48+
49+
# Check that the request data can only be retrieved with the request collector
50+
await bidi_session.network.get_data(
51+
request=request, data_type="request", collector=request_collector
52+
)
53+
with pytest.raises(error.NoSuchNetworkDataException):
54+
await bidi_session.network.get_data(
55+
request=request, data_type="request", collector=response_collector
56+
)
57+
58+
# Check that the response data can only be retrieved with the response collector
59+
await bidi_session.network.get_data(
60+
request=request, data_type="response", collector=response_collector
61+
)
62+
with pytest.raises(error.NoSuchNetworkDataException):
63+
await bidi_session.network.get_data(
64+
request=request, data_type="response", collector=request_collector
65+
)
66+
67+
# Remove the response collector
68+
await bidi_session.network.remove_data_collector(collector=response_collector)
69+
70+
# Check request data can still be retrieved, but not the response data.
71+
await bidi_session.network.get_data(request=request, data_type="request")
72+
with pytest.raises(error.NoSuchNetworkDataException):
73+
await bidi_session.network.get_data(request=request, data_type="response")
Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import pytest
22
import webdriver.bidi.error as error
33

4-
from .. import PAGE_EMPTY_TEXT, RESPONSE_COMPLETED_EVENT
4+
from .. import BEFORE_REQUEST_SENT_EVENT, PAGE_EMPTY_TEXT, RESPONSE_COMPLETED_EVENT
55

66
pytestmark = pytest.mark.asyncio
77

88

9+
@pytest.mark.parametrize("data_type", ["request", "response"])
910
async def test_max_encoded_data_size(
1011
bidi_session,
1112
add_data_collector,
@@ -14,37 +15,42 @@ async def test_max_encoded_data_size(
1415
wait_for_future_safe,
1516
url,
1617
fetch,
18+
data_type,
1719
):
1820
context = await bidi_session.browsing_context.create(type_hint="tab")
1921
await setup_network_test(
20-
events=[RESPONSE_COMPLETED_EVENT], context=context["context"]
22+
events=[BEFORE_REQUEST_SENT_EVENT, RESPONSE_COMPLETED_EVENT],
23+
context=context["context"],
2124
)
2225

23-
small_collector = await add_data_collector(max_encoded_data_size=1)
24-
big_collector = await add_data_collector(max_encoded_data_size=100000)
26+
small_collector = await add_data_collector(
27+
max_encoded_data_size=1, data_types=[data_type]
28+
)
29+
big_collector = await add_data_collector(
30+
max_encoded_data_size=100000, data_types=[data_type]
31+
)
2532

2633
# Trigger a request in `context`
2734
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
28-
await fetch(url(PAGE_EMPTY_TEXT), context=context)
35+
36+
post_data = "somedata" if data_type == "request" else None
37+
await fetch(url(PAGE_EMPTY_TEXT), post_data=post_data, context=context)
38+
2939
event = await wait_for_future_safe(on_response_completed)
3040
request = event["request"]["request"]
3141

3242
# request data can be retrieved with big_collector or with no collector
3343
# argument
3444
await bidi_session.network.get_data(
35-
request=request, data_type="response", collector=big_collector
36-
)
37-
await bidi_session.network.get_data(
38-
request=request, data_type="response"
45+
request=request, data_type=data_type, collector=big_collector
3946
)
47+
await bidi_session.network.get_data(request=request, data_type=data_type)
4048
with pytest.raises(error.NoSuchNetworkDataException):
4149
await bidi_session.network.get_data(
42-
request=request, data_type="response", collector=small_collector
50+
request=request, data_type=data_type, collector=small_collector
4351
)
4452

4553
# Remove big_collector and check the collected data can no longer be accessed
4654
await bidi_session.network.remove_data_collector(collector=big_collector)
4755
with pytest.raises(error.NoSuchNetworkDataException):
48-
await bidi_session.network.get_data(
49-
request=request, data_type="response"
50-
)
56+
await bidi_session.network.get_data(request=request, data_type=data_type)

testing/web-platform/tests/webdriver/tests/bidi/network/disown_data/request.py renamed to testing/web-platform/tests/webdriver/tests/bidi/network/disown_data/data_type.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,28 @@
66
pytestmark = pytest.mark.asyncio
77

88

9-
async def test_request(
9+
@pytest.mark.parametrize("data_type", ["request", "response"])
10+
async def test_data_type(
1011
bidi_session,
1112
url,
1213
setup_collected_data,
14+
data_type,
1315
):
14-
[request, collector] = await setup_collected_data(fetch_url=url(PAGE_EMPTY_TEXT))
16+
[request, collector] = await setup_collected_data(
17+
fetch_url=url(PAGE_EMPTY_TEXT),
18+
fetch_post_data="somedata",
19+
data_types=[data_type],
20+
)
1521
await bidi_session.network.disown_data(
16-
request=request, data_type="response", collector=collector
22+
request=request, data_type=data_type, collector=collector
1723
)
1824

1925
# Check that after calling disown data, you can no longer get or disown the
2026
# data.
2127
with pytest.raises(error.NoSuchNetworkDataException):
2228
await bidi_session.network.disown_data(
23-
request=request, data_type="response", collector=collector
29+
request=request, data_type=data_type, collector=collector
2430
)
2531

2632
with pytest.raises(error.NoSuchNetworkDataException):
27-
await bidi_session.network.get_data(request=request, data_type="response")
33+
await bidi_session.network.get_data(request=request, data_type=data_type)

testing/web-platform/tests/webdriver/tests/bidi/network/disown_data/invalid.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,28 @@ async def test_params_data_type_invalid_value(bidi_session, value):
4949
)
5050

5151

52+
@pytest.mark.parametrize(
53+
"collector_data_type", ["request", "response"]
54+
)
55+
async def test_params_data_type_mismatch(
56+
bidi_session, url, setup_collected_data, collector_data_type
57+
):
58+
[request, collector] = await setup_collected_data(
59+
fetch_url=url(PAGE_EMPTY_TEXT),
60+
data_types=[collector_data_type],
61+
)
62+
63+
if collector_data_type == "request":
64+
data_type = "response"
65+
else:
66+
data_type = "request"
67+
68+
with pytest.raises(error.NoSuchNetworkDataException):
69+
await bidi_session.network.disown_data(
70+
request=request, data_type=data_type, collector=collector
71+
)
72+
73+
5274
@pytest.mark.parametrize("value", [None, False, 42, {}, []])
5375
async def test_params_collector_invalid_type(bidi_session, value):
5476
with pytest.raises(error.InvalidArgumentException):
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
import base64
2+
import pytest
3+
import webdriver.bidi.error as error
4+
5+
from tests.support.asserts import assert_png
6+
7+
from .. import (
8+
BEFORE_REQUEST_SENT_EVENT,
9+
PAGE_DATA_URL_IMAGE,
10+
PAGE_EMPTY_IMAGE,
11+
PAGE_EMPTY_TEXT,
12+
PAGE_OTHER_TEXT,
13+
RESPONSE_COMPLETED_EVENT,
14+
)
15+
16+
pytestmark = pytest.mark.asyncio
17+
18+
19+
@pytest.mark.parametrize(
20+
"file, expected_value", [(PAGE_EMPTY_TEXT, "empty\n"), (PAGE_OTHER_TEXT, "other\n")]
21+
)
22+
async def test_data_type_response_text_file(
23+
bidi_session, url, setup_collected_data, file, expected_value
24+
):
25+
[request, _] = await setup_collected_data(fetch_url=url(file))
26+
data = await bidi_session.network.get_data(request=request, data_type="response")
27+
28+
assert data["type"] == "string"
29+
assert data["value"] == expected_value
30+
31+
32+
async def test_data_type_response_base64_file(
33+
bidi_session,
34+
url,
35+
setup_collected_data,
36+
):
37+
[request, _] = await setup_collected_data(fetch_url=url(PAGE_EMPTY_IMAGE))
38+
data = await bidi_session.network.get_data(request=request, data_type="response")
39+
40+
assert data["type"] == "base64"
41+
assert isinstance(data["value"], str)
42+
assert_png(data["value"])
43+
44+
45+
async def test_data_type_response_data_scheme_text(
46+
bidi_session, url, setup_collected_data,
47+
):
48+
expected_value = "loremipsum"
49+
[request, _] = await setup_collected_data(fetch_url=f"data:text/plain,{expected_value}")
50+
data = await bidi_session.network.get_data(request=request, data_type="response")
51+
52+
assert data["type"] == "string"
53+
assert data["value"] == expected_value
54+
55+
56+
async def test_data_type_response_data_scheme_image(
57+
bidi_session, url, setup_collected_data,
58+
):
59+
expected_value = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
60+
[request, _] = await setup_collected_data(fetch_url=f"data:image/png;base64,{expected_value}")
61+
data = await bidi_session.network.get_data(request=request, data_type="response")
62+
63+
assert data["type"] == "base64"
64+
assert data["value"] == expected_value
65+
66+
67+
async def test_data_type_response_empty_response(
68+
bidi_session,
69+
inline,
70+
setup_collected_data,
71+
):
72+
empty_url = inline("", doctype="js")
73+
[request, _] = await setup_collected_data(fetch_url=empty_url)
74+
75+
data = await bidi_session.network.get_data(request=request, data_type="response")
76+
77+
assert data["type"] == "string"
78+
assert data["value"] == ""
79+
80+
81+
async def test_data_type_request_text(bidi_session, url, setup_collected_data):
82+
[request, _] = await setup_collected_data(
83+
fetch_url=url(PAGE_EMPTY_TEXT),
84+
fetch_post_data="somedata",
85+
data_types=["request"],
86+
)
87+
data = await bidi_session.network.get_data(request=request, data_type="request")
88+
89+
assert data["type"] == "string"
90+
assert data["value"] == "somedata"
91+
92+
93+
async def test_data_type_request_text_multipart(bidi_session, url, setup_collected_data):
94+
[request, _] = await setup_collected_data(
95+
fetch_url=url(PAGE_EMPTY_TEXT),
96+
fetch_post_data={"foo": 1, "bar": 2},
97+
data_types=["request"],
98+
)
99+
100+
data = await bidi_session.network.get_data(request=request, data_type="request")
101+
assert data["type"] == "string"
102+
assert 'form-data; name="foo"' in data["value"]
103+
assert 'form-data; name="bar"' in data["value"]
104+
105+
106+
async def test_data_type_request_image(bidi_session, url, setup_collected_data):
107+
expected_image = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
108+
[request, _] = await setup_collected_data(
109+
fetch_url=url(PAGE_EMPTY_TEXT),
110+
fetch_post_data={
111+
"test_image": {
112+
"filename": "image.png",
113+
"type": "image/png",
114+
"value": expected_image,
115+
}
116+
},
117+
data_types=["request"],
118+
)
119+
120+
data = await bidi_session.network.get_data(request=request, data_type="request")
121+
assert data["type"] == "base64"
122+
assert isinstance(data["value"], str)
123+
124+
decoded_image = base64.b64decode(expected_image)
125+
decoded_value = base64.b64decode(data["value"])
126+
assert decoded_image in decoded_value
127+
128+
129+
async def test_data_type_request_no_postdata(bidi_session, url, setup_collected_data):
130+
[request, _] = await setup_collected_data(
131+
fetch_url=url(PAGE_EMPTY_TEXT),
132+
data_types=["request"],
133+
)
134+
with pytest.raises(error.NoSuchNetworkDataException):
135+
await bidi_session.network.get_data(request=request, data_type="request")

testing/web-platform/tests/webdriver/tests/bidi/network/get_data/invalid.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,25 @@ async def test_params_data_type_invalid_value(
3636
with pytest.raises(error.InvalidArgumentException):
3737
await bidi_session.network.get_data(request=request, data_type=value)
3838

39+
@pytest.mark.parametrize(
40+
"collector_data_type", ["request", "response"]
41+
)
42+
async def test_params_data_type_mismatch(
43+
bidi_session, url, setup_collected_data, collector_data_type
44+
):
45+
[request, collector] = await setup_collected_data(
46+
fetch_url=url(PAGE_EMPTY_TEXT),
47+
data_types=[collector_data_type],
48+
)
49+
50+
if collector_data_type == "request":
51+
data_type = "response"
52+
else:
53+
data_type = "request"
54+
55+
with pytest.raises(error.NoSuchNetworkDataException):
56+
await bidi_session.network.get_data(request=request, data_type=data_type)
57+
3958

4059
@pytest.mark.parametrize("value", [False, 42, {}, []])
4160
async def test_params_collector_invalid_type(

0 commit comments

Comments
 (0)