Skip to content

Commit 7b1e50b

Browse files
committed
test: have websockets failures report *which* one
1 parent c8e14b1 commit 7b1e50b

File tree

2 files changed

+55
-10
lines changed

2 files changed

+55
-10
lines changed

tests/test_web_websocket.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,12 @@ def test_can_prepare_unknown_protocol(make_request: _RequestMaker) -> None:
215215
assert WebSocketReady(True, None) == ws.can_prepare(req)
216216

217217

218+
def test_can_prepare_invalid_method(make_request: _RequestMaker) -> None:
219+
req = make_request("POST", "/")
220+
ws = web.WebSocketResponse()
221+
assert WebSocketReady(False, None) == ws.can_prepare(req)
222+
223+
218224
def test_can_prepare_without_upgrade(make_request: _RequestMaker) -> None:
219225
req = make_request("GET", "/", headers=CIMultiDict({}))
220226
ws = web.WebSocketResponse()
@@ -369,11 +375,11 @@ async def test_close_idempotent(make_request: _RequestMaker) -> None:
369375
assert close_code == 0
370376

371377

372-
async def test_prepare_post_method_ok(make_request: _RequestMaker) -> None:
378+
async def test_prepare_invalid_method(make_request: _RequestMaker) -> None:
373379
req = make_request("POST", "/")
374380
ws = web.WebSocketResponse()
375-
await ws.prepare(req)
376-
assert ws.prepared
381+
with pytest.raises(web.HTTPMethodNotAllowed):
382+
await ws.prepare(req)
377383

378384

379385
async def test_prepare_without_upgrade(make_request: _RequestMaker) -> None:

tests/test_websocket_handshake.py

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,29 +40,60 @@ def gen_ws_headers(
4040
return hdrs, key
4141

4242

43+
async def test_not_get() -> None:
44+
ws = web.WebSocketResponse()
45+
req = make_mocked_request("POST", "/")
46+
with pytest.raises(web.HTTPMethodNotAllowed):
47+
await ws.prepare(req)
48+
49+
50+
async def test_inappropriate_method() -> None:
51+
ws = web.WebSocketResponse()
52+
req = make_mocked_request(
53+
"HEAD",
54+
"/",
55+
headers={
56+
"Upgrade": "websocket",
57+
"Expect": "100-continue",
58+
"Expect": "100-continue",
59+
},
60+
)
61+
with pytest.raises(web.HTTPMethodNotAllowed) as ctx:
62+
await ws.prepare(req)
63+
assert ctx.value.method == "HEAD"
64+
assert ctx.value.allowed_methods == {"GET"}
65+
assert ctx.value.status == 405
66+
67+
4368
async def test_no_upgrade() -> None:
4469
ws = web.WebSocketResponse()
4570
req = make_mocked_request("GET", "/")
46-
with pytest.raises(web.HTTPBadRequest):
71+
with pytest.raises(web.HTTPBadRequest) as ctx:
4772
await ws.prepare(req)
73+
assert "UPGRADE" in ctx.value.text
74+
assert ctx.value.status == 400
4875

4976

5077
async def test_no_connection() -> None:
5178
ws = web.WebSocketResponse()
5279
req = make_mocked_request(
5380
"GET", "/", headers={"Upgrade": "websocket", "Connection": "keep-alive"}
5481
)
55-
with pytest.raises(web.HTTPBadRequest):
82+
with pytest.raises(web.HTTPBadRequest) as ctx:
5683
await ws.prepare(req)
84+
assert "CONNECTION" in ctx.value.text
85+
assert ctx.value.status == 400
5786

5887

5988
async def test_protocol_version_unset() -> None:
6089
ws = web.WebSocketResponse()
6190
req = make_mocked_request(
6291
"GET", "/", headers={"Upgrade": "websocket", "Connection": "upgrade"}
6392
)
64-
with pytest.raises(web.HTTPBadRequest):
93+
with pytest.raises(web.HTTPBadRequest) as ctx:
6594
await ws.prepare(req)
95+
assert "version" in ctx.value.text
96+
assert ctx.value.status == 400
6697

6798

6899
async def test_protocol_version_not_supported() -> None:
@@ -76,8 +107,10 @@ async def test_protocol_version_not_supported() -> None:
76107
"Sec-Websocket-Version": "1",
77108
},
78109
)
79-
with pytest.raises(web.HTTPBadRequest):
110+
with pytest.raises(web.HTTPBadRequest) as ctx:
80111
await ws.prepare(req)
112+
assert "version" in ctx.value.text
113+
assert ctx.value.status == 400
81114

82115

83116
async def test_protocol_key_not_present() -> None:
@@ -91,8 +124,10 @@ async def test_protocol_key_not_present() -> None:
91124
"Sec-Websocket-Version": "13",
92125
},
93126
)
94-
with pytest.raises(web.HTTPBadRequest):
127+
with pytest.raises(web.HTTPBadRequest) as ctx:
95128
await ws.prepare(req)
129+
assert "Handshake" in ctx.value.text
130+
assert ctx.value.status == 400
96131

97132

98133
async def test_protocol_key_invalid() -> None:
@@ -107,8 +142,10 @@ async def test_protocol_key_invalid() -> None:
107142
"Sec-Websocket-Key": "123",
108143
},
109144
)
110-
with pytest.raises(web.HTTPBadRequest):
145+
with pytest.raises(web.HTTPBadRequest) as ctx:
111146
await ws.prepare(req)
147+
assert "Handshake" in ctx.value.text
148+
assert ctx.value.status == 400
112149

113150

114151
async def test_protocol_key_bad_size() -> None:
@@ -125,8 +162,10 @@ async def test_protocol_key_bad_size() -> None:
125162
"Sec-Websocket-Key": val,
126163
},
127164
)
128-
with pytest.raises(web.HTTPBadRequest):
165+
with pytest.raises(web.HTTPBadRequest) as ctx:
129166
await ws.prepare(req)
167+
assert "Handshake" in ctx.value.text
168+
assert ctx.value.status == 400
130169

131170

132171
async def test_handshake_ok() -> None:

0 commit comments

Comments
 (0)