async def test_protocol_handle_protocol_error(protocol: H11Protocol) -> None: await protocol.handle(RawData(data=b"broken nonsense\r\n\r\n")) protocol.send.assert_called() assert protocol.send.call_args_list == [ call( RawData( data= b"HTTP/1.1 400 \r\ncontent-length: 0\r\nconnection: close\r\n" b"date: Thu, 01 Jan 1970 01:23:20 GMT\r\nserver: hypercorn-h11\r\n\r\n" )), call(RawData(data=b"")), call(Closed()), ]
async def test_protocol_handle_closed(protocol: H11Protocol) -> None: await protocol.handle( RawData( data= b"GET / HTTP/1.1\r\nHost: hypercorn\r\nConnection: close\r\n\r\n")) stream = protocol.stream await protocol.handle(Closed()) stream.handle.assert_called() assert stream.handle.call_args_list == [ call( Request( stream_id=1, headers=[(b"host", b"hypercorn"), (b"connection", b"close")], http_version="1.1", method="GET", raw_path=b"/", )), call(EndBody(stream_id=1)), call(StreamClosed(stream_id=1)), ]
async def test_protocol_handle_max_incomplete(monkeypatch: MonkeyPatch) -> None: config = Config() config.h11_max_incomplete_size = 5 MockHTTPStream = AsyncMock() # noqa: N806 MockHTTPStream.return_value = AsyncMock(spec=HTTPStream) monkeypatch.setattr(hypercorn.protocol.h11, "HTTPStream", MockHTTPStream) MockEvent = AsyncMock() # noqa: N806 MockEvent.return_value = AsyncMock(spec=IOEvent) protocol = H11Protocol(config, False, None, None, CoroutineMock(), CoroutineMock(), MockEvent) await protocol.handle(RawData(data=b"GET / HTTP/1.1\r\nHost: hypercorn\r\n")) protocol.send.assert_called() assert protocol.send.call_args_list == [ call( RawData( data=b"HTTP/1.1 400 \r\ncontent-length: 0\r\nconnection: close\r\n" b"date: Thu, 01 Jan 1970 01:23:20 GMT\r\nserver: hypercorn-h11\r\n\r\n" ) ), call(RawData(data=b"")), call(Closed()), ]
async def _read_data(self) -> None: try: return await _read_data_orig(self) except Exception: await self.protocol.handle(Closed())
headers=[(b"content-length", b"5")])) await protocol.stream_send(Body(stream_id=1, data=b"hello")) protocol.send.assert_called() assert protocol.send.call_args_list == [ call( RawData( data= b"HTTP/1.1 200 \r\ncontent-length: 5\r\ndate: Thu, 01 Jan 1970 01:23:20 GMT\r\nserver: hypercorn-h11\r\nconnection: close\r\n\r\n" # noqa: E501 )), call(RawData(data=b"hello")), ] @pytest.mark.asyncio @pytest.mark.parametrize("keep_alive, expected", [(True, Updated()), (False, Closed())]) async def test_protocol_send_stream_closed(keep_alive: bool, expected: Any, protocol: H11Protocol) -> None: data = b"GET / HTTP/1.1\r\nHost: hypercorn\r\n" if keep_alive: data += b"\r\n" else: data += b"Connection: close\r\n\r\n" await protocol.handle(RawData(data=data)) await protocol.stream_send( Response(stream_id=1, status_code=200, headers=[])) await protocol.stream_send(EndBody(stream_id=1)) await protocol.stream_send(StreamClosed(stream_id=1)) protocol.send.assert_called() assert protocol.send.call_args_list[2] == call(expected)
async def test_protocol_handle_protocol_error(protocol: H2Protocol) -> None: await protocol.handle(RawData(data=b"broken nonsense\r\n\r\n")) protocol.send.assert_called() assert protocol.send.call_args_list == [call(Closed())]
Response(stream_id=1, status_code=200, headers=[(b"content-length", b"5")]) ) await protocol.stream_send(Body(stream_id=1, data=b"hello")) protocol.send.assert_called() assert protocol.send.call_args_list == [ call( RawData( data=b"HTTP/1.1 200 \r\ncontent-length: 5\r\ndate: Thu, 01 Jan 1970 01:23:20 GMT\r\nserver: hypercorn-h11\r\nconnection: close\r\n\r\n" # noqa: E501 ) ), call(RawData(data=b"hello")), ] @pytest.mark.asyncio @pytest.mark.parametrize("keep_alive, expected", [(True, Updated()), (False, Closed())]) async def test_protocol_send_stream_closed( keep_alive: bool, expected: Any, protocol: H11Protocol ) -> None: data = b"GET / HTTP/1.1\r\nHost: hypercorn\r\n" if keep_alive: data += b"\r\n" else: data += b"Connection: close\r\n\r\n" await protocol.handle(RawData(data=data)) await protocol.stream_send(Response(stream_id=1, status_code=200, headers=[])) await protocol.stream_send(EndBody(stream_id=1)) await protocol.stream_send(StreamClosed(stream_id=1)) protocol.send.assert_called() assert protocol.send.call_args_list[2] == call(expected)