Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
async def test_keep_alive_timeout(event_loop: asyncio.AbstractEventLoop) -> None:
transport = MockTransport()
config = Config()
config.keep_alive_timeout = 0.01
server = HTTPServer(event_loop, config, transport, "") # type: ignore
server.start_keep_alive_timeout()
assert not transport.closed.is_set()
await asyncio.sleep(2 * config.keep_alive_timeout)
assert transport.closed.is_set()
async def _protocol(monkeypatch: MonkeyPatch) -> H11Protocol:
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)
return H11Protocol(Config(), False, None, None, CoroutineMock(), CoroutineMock(), MockEvent)
async def test_startup_failure() -> None:
lifespan = Lifespan(lifespan_failure, Config())
with pytest.raises(LifespanFailure) as exc_info:
async with trio.open_nursery() as lifespan_nursery:
await lifespan_nursery.start(lifespan.handle_lifespan)
await lifespan.wait_for_startup()
assert str(exc_info.value) == "Lifespan failure in startup. 'Failure'"
def test_create_sockets_unix(monkeypatch: MonkeyPatch) -> None:
mock_socket = Mock()
monkeypatch.setattr(socket, "socket", mock_socket)
monkeypatch.setattr(os, "chown", Mock())
config = Config()
config.bind = ["unix:/tmp/hypercorn.sock"]
sockets = config.create_sockets()
sock = sockets.insecure_sockets[0]
mock_socket.assert_called_with(socket.AF_UNIX, socket.SOCK_STREAM)
sock.setsockopt.assert_called_with(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # type: ignore
sock.bind.assert_called_with("/tmp/hypercorn.sock") # type: ignore
sock.setblocking.assert_called_with(False) # type: ignore
sock.set_inheritable.assert_called_with(True) # type: ignore
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"
)
),
async def test_post_response_keep_alive_timeout(event_loop: asyncio.AbstractEventLoop) -> None:
config = Config()
config.keep_alive_timeout = 0.01
transport = MockTransport()
server = H11Server(echo_framework, event_loop, config, transport) # type: ignore
server.pause_writing()
server.data_received(b"GET / HTTP/1.1\r\nHost: hypercorn\r\n\r\n")
await asyncio.sleep(2 * config.keep_alive_timeout)
assert not transport.closed.is_set()
server.resume_writing()
await asyncio.sleep(2 * config.keep_alive_timeout)
assert transport.closed.is_set()
async def test_http2_request(nursery: trio._core._run.Nursery) -> None:
client_stream, server_stream = trio.testing.memory_stream_pair()
server_stream.transport_stream = Mock(return_value=PropertyMock(return_value=MockSocket()))
server_stream.do_handshake = CoroutineMock()
server_stream.selected_alpn_protocol = Mock(return_value="h2")
server = TCPServer(sanity_framework, Config(), server_stream)
nursery.start_soon(server.run)
client = h2.connection.H2Connection()
client.initiate_connection()
await client_stream.send_all(client.data_to_send())
stream_id = client.get_next_available_stream_id()
client.send_headers(
stream_id,
[
(":method", "GET"),
(":path", "/"),
(":authority", "hypercorn"),
(":scheme", "https"),
("content-length", "%d" % len(SANITY_BODY)),
],
)
client.send_data(stream_id, SANITY_BODY)
def test_create_sockets_multiple(monkeypatch: MonkeyPatch) -> None:
mock_socket = Mock()
monkeypatch.setattr(socket, "socket", mock_socket)
monkeypatch.setattr(os, "chown", Mock())
config = Config()
config.bind = ["127.0.0.1", "unix:/tmp/hypercorn.sock"]
sockets = config.create_sockets()
assert len(sockets.insecure_sockets) == 2
def _load_config(config_path: Optional[str]) -> Config:
if config_path is None:
return Config()
elif config_path.startswith("python:"):
return Config.from_pyfile(config_path[len("python:") :])
else:
return Config.from_toml(config_path)
import signal
import uvloop
from hypercorn.asyncio import serve
from hypercorn.config import Config
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
shutdown_event = asyncio.Event()
def _signal_handler(*_: Any) -> None:
shutdown_event.set()
loop.add_signal_handler(signal.SIGTERM, _signal_handler)
loop.add_signal_handler(signal.SIGINT, _signal_handler)
config = Config()
config.bind = ["0.0.0.0:9009"]
loop.run_until_complete(
serve(
app,
config,
shutdown_trigger=shutdown_event.wait # type: ignore
)