@@ -58,3 +58,45 @@ def test_send_invalid_event() -> None:
58
58
client = H11Handshake (CLIENT )
59
59
with pytest .raises (LocalProtocolError ):
60
60
client .send (Ping ())
61
+
62
+
63
+ def test_h11_multiple_headers_handshake () -> None :
64
+ server = H11Handshake (SERVER )
65
+ data = (
66
+ b"GET wss://api.website.xyz/ws HTTP/1.1\r \n "
67
+ b"Host: api.website.xyz\r \n "
68
+ b"Connection: Upgrade\r \n "
69
+ b"Pragma: no-cache\r \n "
70
+ b"Cache-Control: no-cache\r \n "
71
+ b"User-Agent: Mozilla/5.0 (X11; Linux x86_64) "
72
+ b"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36\r \n "
73
+ b"Upgrade: websocket\r \n "
74
+ b"Origin: https://website.xyz\r \n "
75
+ b"Sec-WebSocket-Version: 13\r \n "
76
+ b"Accept-Encoding: gzip, deflate, br\r \n "
77
+ b"Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r \n "
78
+ b"Sec-WebSocket-Key: tOzeAzi9xK7ADxxEdTzmaA==\r \n "
79
+ b"Sec-WebSocket-Extensions: this-extension; isnt-seen, even-tho, it-should-be\r \n "
80
+ b"Sec-WebSocket-Protocol: there-protocols\r \n "
81
+ b"Sec-WebSocket-Protocol: arent-seen\r \n "
82
+ b"Sec-WebSocket-Extensions: this-extension; were-gonna-see, and-another-extension; were-also; gonna-see=100; percent\r \n " # noqa: E501
83
+ b"Sec-WebSocket-Protocol: only-these-protocols, are-seen, from-the-request-object\r \n "
84
+ b"\r \n "
85
+ )
86
+ server .receive_data (data )
87
+ request = next (server .events ())
88
+ assert isinstance (request , Request )
89
+ assert request .subprotocols == [
90
+ "there-protocols" ,
91
+ "arent-seen" ,
92
+ "only-these-protocols" ,
93
+ "are-seen" ,
94
+ "from-the-request-object" ,
95
+ ]
96
+ assert request .extensions == [
97
+ "this-extension; isnt-seen" ,
98
+ "even-tho" ,
99
+ "it-should-be" ,
100
+ "this-extension; were-gonna-see" ,
101
+ "and-another-extension; were-also; gonna-see=100; percent" ,
102
+ ]
0 commit comments