def test_server() -> None: h2_ssl_mock = Mock() h2_ssl_mock.selected_alpn_protocol.return_value = 'h2' transport = Mock() transport.get_extra_info.return_value = h2_ssl_mock server = Server(Mock(), Mock(), Mock(), '', 5) server.connection_made(transport) assert isinstance(server._server, H2Server) transport.get_extra_info.return_value = None server.connection_made(transport) assert isinstance(server._server, H11Server)
async def test_invalid_upgrade( serving_app: Quart, event_loop: asyncio.AbstractEventLoop, ) -> None: server = Server(serving_app, event_loop, None, '', 5) # type: ignore transport = MockTransport() server.connection_made(transport) # type: ignore server.data_received( b'GET / HTTP/1.1\r\n' b'Host: localhost\r\n' b'Upgrade: pigeon\r\n' b'Connection: close\r\n' b'\r\n', ) await transport.closed.wait() assert transport.data.startswith(b'HTTP/1.1 200')
async def test_invalid_upgrade( event_loop: asyncio.AbstractEventLoop, monkeypatch: MonkeyPatch, ) -> None: monkeypatch.setattr(quart.serving._base, 'time', lambda: 1512229395) server = Server(Mock(), event_loop, None, '', 5) # type: ignore transport = MockTransport() server.connection_made(transport) # type: ignore server.data_received( b'GET / HTTP/1.1\r\n' b'Host: localhost\r\n' b'Upgrade: pigeon\r\n' b'\r\n', ) await transport.closed.wait() assert transport.data == ( b'HTTP/1.1 400 \r\ncontent-length: 0\r\nconnection: close\r\n' b'date: Sat, 02 Dec 2017 15:43:15 GMT\r\nserver: quart-h11\r\n\r\n')
async def test_h2c_upgrade( serving_app: Quart, event_loop: asyncio.AbstractEventLoop, monkeypatch: MonkeyPatch, ) -> None: monkeypatch.setattr(quart.serving._base, 'time', lambda: 1512229395) server = Server(serving_app, event_loop, None, '', 5) # type: ignore transport = MockTransport() server.connection_made(transport) # type: ignore server.data_received( b'GET / HTTP/1.1\r\n' b'Host: localhost\r\n' b'Upgrade: h2c\r\n' b'\r\n', ) await transport.updated.wait() assert transport.data.startswith( b'HTTP/1.1 101 \r\nupgrade: h2c\r\n' b'date: Sat, 02 Dec 2017 15:43:15 GMT\r\nserver: quart-h11\r\n\r\n')
async def test_h2c_upgrade_with_body( serving_app: Quart, event_loop: asyncio.AbstractEventLoop, monkeypatch: MonkeyPatch, ) -> None: monkeypatch.setattr(quart.serving._base, 'time', lambda: 1512229395) server = Server(serving_app, event_loop, None, '', 5) # type: ignore transport = MockTransport() server.connection_made(transport) # type: ignore server.data_received( b'POST / HTTP/1.1\r\n' b'Host: localhost\r\n' b'Upgrade: h2c\r\n' b'Content-Length: 7\r\n' b'Content-Type: application/x-www-form-urlencoded\r\n' b'\r\n' b'foo=bar', ) await transport.updated.wait() assert transport.data.startswith(b'HTTP/1.1 200')
async def test_websocket_upgrade( serving_app: Quart, event_loop: asyncio.AbstractEventLoop, monkeypatch: MonkeyPatch, ) -> None: monkeypatch.setattr(quart.serving._base, 'time', lambda: 1512229395) server = Server(serving_app, event_loop, None, '', 5) # type: ignore transport = MockTransport() server.connection_made(transport) # type: ignore server.data_received( b'GET /ws HTTP/1.1\r\n' b'Host: localhost\r\n' b'Upgrade: websocket\r\n' b'Connection: Upgrade\r\n' b'Sec-WebSocket-Key: NA63HJnrvVYlgKt6wI58Yw==\r\n' b'Sec-WebSocket-Version: 13\r\n' b'\r\n', ) await transport.updated.wait() assert transport.data == ( b'HTTP/1.1 101 \r\nupgrade: WebSocket\r\nconnection: Upgrade\r\n' b'sec-websocket-accept: 3jdXMDZiy2+b842JYmwUB4ilUxc=\r\n\r\n')