async def test_http_request_without_body(request_message: dict) -> None: app = Quart(__name__) scope = { 'headers': [(b'host', b'quart')], 'http_version': '1.0', 'method': 'GET', 'scheme': 'https', 'path': '/', 'query_string': b'', } connection = ASGIHTTPConnection(app, scope) request = connection._create_request_from_scope(lambda: None) queue: asyncio.Queue = asyncio.Queue() queue.put_nowait(request_message) async def receive() -> dict: # This will block after returning the first and only entry return await queue.get() # This test fails with a timeout error if the request body is not received # within 1 second receiver_task = asyncio.ensure_future( connection.handle_messages(request, receive)) body = await asyncio.wait_for(request.body, timeout=1) receiver_task.cancel() assert body == b''
async def test_http_request_without_body(request_message: dict) -> None: app = Quart(__name__) scope: HTTPScope = { "type": "http", "asgi": {}, "http_version": "1.0", "method": "GET", "scheme": "https", "path": "/", "raw_path": b"/", "query_string": b"", "root_path": "", "headers": [(b"host", b"quart")], "client": ("127.0.0.1", 80), "server": None, "extensions": {}, } connection = ASGIHTTPConnection(app, scope) request = connection._create_request_from_scope(lambda: None) # type: ignore queue: asyncio.Queue = asyncio.Queue() queue.put_nowait(request_message) async def receive() -> ASGIReceiveEvent: # This will block after returning the first and only entry return await queue.get() # This test fails with a timeout error if the request body is not received # within 1 second receiver_task = asyncio.ensure_future(connection.handle_messages(request, receive)) body = await asyncio.wait_for(request.body, timeout=1) receiver_task.cancel() assert body == b""
async def test_http_1_0_host_header(headers: list, expected: str) -> None: app = Quart(__name__) scope = { "headers": headers, "http_version": "1.0", "method": "GET", "scheme": "https", "path": "/", "query_string": b"", } connection = ASGIHTTPConnection(app, scope) request = connection._create_request_from_scope(lambda: None) assert request.headers["host"] == expected
def test_http_path_from_absolute_target() -> None: app = Quart(__name__) scope = { "headers": [(b"host", b"quart")], "http_version": "1.1", "method": "GET", "scheme": "https", "path": "http://quart/path", "query_string": b"", } connection = ASGIHTTPConnection(app, scope) request = connection._create_request_from_scope(lambda: None) assert request.path == "/path"
def test_http_path_from_absolute_target() -> None: app = Quart(__name__) scope = { 'headers': [(b'host', b'quart')], 'http_version': '1.1', 'method': 'GET', 'scheme': 'https', 'path': 'http://quart/path', 'query_string': b'', } connection = ASGIHTTPConnection(app, scope) request = connection._create_request_from_scope(lambda: None) assert request.path == '/path'
async def test_http_1_0_host_header(headers: list, expected: str) -> None: app = Quart(__name__) scope = { 'headers': headers, 'http_version': '1.0', 'method': 'GET', 'scheme': 'https', 'path': '/', 'query_string': b'', } connection = ASGIHTTPConnection(app, scope) request = connection._create_request_from_scope(lambda: None) assert request.headers['host'] == expected
def test_http_asgi_scope_from_request() -> None: app = Quart(__name__) scope = { "headers": [(b"host", b"quart")], "http_version": "1.0", "method": "GET", "scheme": "https", "path": "/", "query_string": b"", "test_result": "PASSED", } connection = ASGIHTTPConnection(app, scope) # type: ignore request = connection._create_request_from_scope(lambda: None) # type: ignore assert request.scope["test_result"] == "PASSED" # type: ignore
async def test_http_completion() -> None: # Ensure that the connecion callable returns on completion app = Quart(__name__) scope: HTTPScope = { "type": "http", "asgi": {}, "http_version": "1.1", "method": "GET", "scheme": "https", "path": "/", "raw_path": b"/", "query_string": b"", "root_path": "", "headers": [(b"host", b"quart")], "client": ("127.0.0.1", 80), "server": None, "extensions": {}, } connection = ASGIHTTPConnection(app, scope) queue: asyncio.Queue = asyncio.Queue() queue.put_nowait({"type": "http.request", "body": b"", "more_body": False}) async def receive() -> ASGIReceiveEvent: # This will block after returning the first and only entry return await queue.get() async def send(message: ASGISendEvent) -> None: pass # This test fails if a timeout error is raised here await asyncio.wait_for(connection(receive, send), timeout=1)
async def test_http_completion() -> None: # Ensure that the connecion callable returns on completion app = Quart(__name__) scope = { 'headers': [(b'host', b'quart')], 'http_version': '1.1', 'method': 'GET', "root_path": "", 'scheme': 'https', 'path': '/', 'query_string': b'', } connection = ASGIHTTPConnection(app, scope) queue: asyncio.Queue = asyncio.Queue() queue.put_nowait({'type': 'http.request', 'body': b'', 'more_body': False}) async def receive() -> dict: # This will block after returning the first and only entry return await queue.get() async def send(message: dict) -> None: pass # This test fails if a timeout error is raised here await asyncio.wait_for(connection(receive, send), timeout=1)
async def test_http_1_0_host_header(headers: list, expected: str) -> None: app = Quart(__name__) scope: HTTPScope = { "type": "http", "asgi": {}, "http_version": "1.0", "method": "GET", "scheme": "https", "path": "/", "raw_path": b"/", "query_string": b"", "root_path": "", "headers": headers, "client": ("127.0.0.1", 80), "server": None, "extensions": {}, } connection = ASGIHTTPConnection(app, scope) request = connection._create_request_from_scope(lambda: None) # type: ignore assert request.headers["host"] == expected
def test_http_path_from_absolute_target() -> None: app = Quart(__name__) scope: HTTPScope = { "type": "http", "asgi": {}, "http_version": "1.1", "method": "GET", "scheme": "https", "path": "http://quart/path", "raw_path": b"/", "query_string": b"", "root_path": "", "headers": [(b"host", b"quart")], "client": ("127.0.0.1", 80), "server": None, "extensions": {}, } connection = ASGIHTTPConnection(app, scope) request = connection._create_request_from_scope(lambda: None) # type: ignore assert request.path == "/path"