@@ -40,29 +40,60 @@ def gen_ws_headers(
40
40
return hdrs , key
41
41
42
42
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
+
43
68
async def test_no_upgrade () -> None :
44
69
ws = web .WebSocketResponse ()
45
70
req = make_mocked_request ("GET" , "/" )
46
- with pytest .raises (web .HTTPBadRequest ):
71
+ with pytest .raises (web .HTTPBadRequest ) as ctx :
47
72
await ws .prepare (req )
73
+ assert "UPGRADE" in ctx .value .text
74
+ assert ctx .value .status == 400
48
75
49
76
50
77
async def test_no_connection () -> None :
51
78
ws = web .WebSocketResponse ()
52
79
req = make_mocked_request (
53
80
"GET" , "/" , headers = {"Upgrade" : "websocket" , "Connection" : "keep-alive" }
54
81
)
55
- with pytest .raises (web .HTTPBadRequest ):
82
+ with pytest .raises (web .HTTPBadRequest ) as ctx :
56
83
await ws .prepare (req )
84
+ assert "CONNECTION" in ctx .value .text
85
+ assert ctx .value .status == 400
57
86
58
87
59
88
async def test_protocol_version_unset () -> None :
60
89
ws = web .WebSocketResponse ()
61
90
req = make_mocked_request (
62
91
"GET" , "/" , headers = {"Upgrade" : "websocket" , "Connection" : "upgrade" }
63
92
)
64
- with pytest .raises (web .HTTPBadRequest ):
93
+ with pytest .raises (web .HTTPBadRequest ) as ctx :
65
94
await ws .prepare (req )
95
+ assert "version" in ctx .value .text
96
+ assert ctx .value .status == 400
66
97
67
98
68
99
async def test_protocol_version_not_supported () -> None :
@@ -76,8 +107,10 @@ async def test_protocol_version_not_supported() -> None:
76
107
"Sec-Websocket-Version" : "1" ,
77
108
},
78
109
)
79
- with pytest .raises (web .HTTPBadRequest ):
110
+ with pytest .raises (web .HTTPBadRequest ) as ctx :
80
111
await ws .prepare (req )
112
+ assert "version" in ctx .value .text
113
+ assert ctx .value .status == 400
81
114
82
115
83
116
async def test_protocol_key_not_present () -> None :
@@ -91,8 +124,10 @@ async def test_protocol_key_not_present() -> None:
91
124
"Sec-Websocket-Version" : "13" ,
92
125
},
93
126
)
94
- with pytest .raises (web .HTTPBadRequest ):
127
+ with pytest .raises (web .HTTPBadRequest ) as ctx :
95
128
await ws .prepare (req )
129
+ assert "Handshake" in ctx .value .text
130
+ assert ctx .value .status == 400
96
131
97
132
98
133
async def test_protocol_key_invalid () -> None :
@@ -107,8 +142,10 @@ async def test_protocol_key_invalid() -> None:
107
142
"Sec-Websocket-Key" : "123" ,
108
143
},
109
144
)
110
- with pytest .raises (web .HTTPBadRequest ):
145
+ with pytest .raises (web .HTTPBadRequest ) as ctx :
111
146
await ws .prepare (req )
147
+ assert "Handshake" in ctx .value .text
148
+ assert ctx .value .status == 400
112
149
113
150
114
151
async def test_protocol_key_bad_size () -> None :
@@ -125,8 +162,10 @@ async def test_protocol_key_bad_size() -> None:
125
162
"Sec-Websocket-Key" : val ,
126
163
},
127
164
)
128
- with pytest .raises (web .HTTPBadRequest ):
165
+ with pytest .raises (web .HTTPBadRequest ) as ctx :
129
166
await ws .prepare (req )
167
+ assert "Handshake" in ctx .value .text
168
+ assert ctx .value .status == 400
130
169
131
170
132
171
async def test_handshake_ok () -> None :
0 commit comments