@@ -58,3 +58,45 @@ def test_send_invalid_event() -> None:
5858 client = H11Handshake (CLIENT )
5959 with pytest .raises (LocalProtocolError ):
6060 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