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