Skip to content

Commit

Permalink
Add test to ensure keep alive expires on time
Browse files Browse the repository at this point in the history
  • Loading branch information
bdraco committed Dec 14, 2024
1 parent c8e502b commit 03f7a3c
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions tests/test_web_functional.py
Original file line number Diff line number Diff line change
Expand Up @@ -2312,3 +2312,41 @@ async def handler(request: web.Request) -> web.Response:
# Make 2nd request which will hit the race condition.
async with client.get("/") as resp:
assert resp.status == 200


async def test_keepalive_expires_on_time(aiohttp_client: AiohttpClient) -> None:
"""Test that the keepalive handle expires on time."""

async def handler(request: web.Request) -> web.Response:
body = await request.read()
assert b"" == body
return web.Response(body=b"OK")

app = web.Application()
app.router.add_route("GET", "/", handler)

connector = aiohttp.TCPConnector(limit=1)
client = await aiohttp_client(app, connector=connector)

loop = asyncio.get_running_loop()
now = loop.time()

# Patch loop time so we can control when the keepalive timeout is processed
with mock.patch.object(loop, "time") as loop_time_mock:
loop_time_mock.return_value = now
resp1 = await client.get("/")
await resp1.read()
request_handler = client.server.handler.connections[0]

# Ensure the keep alive handle is set
assert request_handler._keepalive_handle is not None

# Set the loop time to exactly the keepalive timeout
loop_time_mock.return_value = request_handler._next_keepalive_close_time

# sleep twice to ensure the keep alive timeout is processed
await asyncio.sleep(0)
await asyncio.sleep(0)

# Ensure the keep alive handle expires
assert request_handler._keepalive_handle is None

0 comments on commit 03f7a3c

Please sign in to comment.