Skip to content

Commit a4be2cb

Browse files
authored
Cleanup tests to ensure connector cleanup and resource management (#10898)
1 parent 802152a commit a4be2cb

File tree

2 files changed

+67
-54
lines changed

2 files changed

+67
-54
lines changed

tests/test_connector.py

Lines changed: 56 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,6 @@ async def test_create_conn() -> None:
290290
conn = aiohttp.BaseConnector()
291291
with pytest.raises(NotImplementedError):
292292
await conn._create_connection(object(), [], object()) # type: ignore[arg-type]
293-
294293
await conn.close()
295294

296295

@@ -318,80 +317,90 @@ async def test_close(key: ConnectionKey) -> None:
318317

319318
async def test_get(loop: asyncio.AbstractEventLoop, key: ConnectionKey) -> None:
320319
conn = aiohttp.BaseConnector()
321-
assert await conn._get(key, []) is None
320+
try:
321+
assert await conn._get(key, []) is None
322322

323-
proto = create_mocked_conn(loop)
324-
conn._conns[key] = deque([(proto, loop.time())])
325-
connection = await conn._get(key, [])
326-
assert connection is not None
327-
assert connection.protocol == proto
328-
connection.close()
329-
await conn.close()
323+
proto = create_mocked_conn(loop)
324+
conn._conns[key] = deque([(proto, loop.time())])
325+
connection = await conn._get(key, [])
326+
assert connection is not None
327+
assert connection.protocol == proto
328+
connection.close()
329+
finally:
330+
await conn.close()
330331

331332

332333
async def test_get_unconnected_proto(loop: asyncio.AbstractEventLoop) -> None:
333334
conn = aiohttp.BaseConnector()
334335
key = ConnectionKey("localhost", 80, False, False, None, None, None)
335-
assert await conn._get(key, []) is None
336+
try:
337+
assert await conn._get(key, []) is None
336338

337-
proto = create_mocked_conn(loop)
338-
conn._conns[key] = deque([(proto, loop.time())])
339-
connection = await conn._get(key, [])
340-
assert connection is not None
341-
assert connection.protocol == proto
342-
connection.close()
339+
proto = create_mocked_conn(loop)
340+
conn._conns[key] = deque([(proto, loop.time())])
341+
connection = await conn._get(key, [])
342+
assert connection is not None
343+
assert connection.protocol == proto
344+
connection.close()
343345

344-
assert await conn._get(key, []) is None
345-
conn._conns[key] = deque([(proto, loop.time())])
346-
proto.is_connected = lambda *args: False
347-
assert await conn._get(key, []) is None
348-
await conn.close()
346+
assert await conn._get(key, []) is None
347+
conn._conns[key] = deque([(proto, loop.time())])
348+
proto.is_connected = lambda *args: False
349+
assert await conn._get(key, []) is None
350+
finally:
351+
await conn.close()
349352

350353

351354
async def test_get_unconnected_proto_ssl(loop: asyncio.AbstractEventLoop) -> None:
352355
conn = aiohttp.BaseConnector()
353356
key = ConnectionKey("localhost", 80, True, False, None, None, None)
354-
assert await conn._get(key, []) is None
357+
try:
358+
assert await conn._get(key, []) is None
355359

356-
proto = create_mocked_conn(loop)
357-
conn._conns[key] = deque([(proto, loop.time())])
358-
connection = await conn._get(key, [])
359-
assert connection is not None
360-
assert connection.protocol == proto
361-
connection.close()
360+
proto = create_mocked_conn(loop)
361+
conn._conns[key] = deque([(proto, loop.time())])
362+
connection = await conn._get(key, [])
363+
assert connection is not None
364+
assert connection.protocol == proto
365+
connection.close()
362366

363-
assert await conn._get(key, []) is None
364-
conn._conns[key] = deque([(proto, loop.time())])
365-
proto.is_connected = lambda *args: False
366-
assert await conn._get(key, []) is None
367-
await conn.close()
367+
assert await conn._get(key, []) is None
368+
conn._conns[key] = deque([(proto, loop.time())])
369+
proto.is_connected = lambda *args: False
370+
assert await conn._get(key, []) is None
371+
finally:
372+
await conn.close()
368373

369374

370375
async def test_get_expired(loop: asyncio.AbstractEventLoop) -> None:
371376
conn = aiohttp.BaseConnector()
372377
key = ConnectionKey("localhost", 80, False, False, None, None, None)
373-
assert await conn._get(key, []) is None
378+
try:
379+
assert await conn._get(key, []) is None
374380

375-
proto = create_mocked_conn(loop)
376-
conn._conns[key] = deque([(proto, loop.time() - 1000)])
377-
assert await conn._get(key, []) is None
378-
assert not conn._conns
379-
await conn.close()
381+
proto = create_mocked_conn(loop)
382+
conn._conns[key] = deque([(proto, loop.time() - 1000)])
383+
assert await conn._get(key, []) is None
384+
assert not conn._conns
385+
finally:
386+
await conn.close()
380387

381388

382389
@pytest.mark.usefixtures("enable_cleanup_closed")
383390
async def test_get_expired_ssl(loop: asyncio.AbstractEventLoop) -> None:
384391
conn = aiohttp.BaseConnector(enable_cleanup_closed=True)
385392
key = ConnectionKey("localhost", 80, True, False, None, None, None)
386-
assert await conn._get(key, []) is None
393+
try:
394+
assert await conn._get(key, []) is None
387395

388-
proto = create_mocked_conn(loop)
389-
transport = proto.transport
390-
conn._conns[key] = deque([(proto, loop.time() - 1000)])
391-
assert await conn._get(key, []) is None
392-
assert not conn._conns
393-
assert conn._cleanup_closed_transports == [transport]
394-
await conn.close()
396+
proto = create_mocked_conn(loop)
397+
transport = proto.transport
398+
conn._conns[key] = deque([(proto, loop.time() - 1000)])
399+
assert await conn._get(key, []) is None
400+
assert not conn._conns
401+
assert conn._cleanup_closed_transports == [transport]
402+
finally:
403+
await conn.close()
395404

396405

397406
async def test_release_acquired(key: ConnectionKey) -> None:

tests/test_proxy_functional.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -257,14 +257,18 @@ async def test_uvloop_secure_https_proxy(
257257
"""Ensure HTTPS sites are accessible through a secure proxy without warning when using uvloop."""
258258
conn = aiohttp.TCPConnector()
259259
sess = aiohttp.ClientSession(connector=conn)
260-
url = URL("https://example.com")
261-
262-
async with sess.get(url, proxy=secure_proxy_url, ssl=client_ssl_ctx) as response:
263-
assert response.status == 200
260+
try:
261+
url = URL("https://example.com")
264262

265-
await sess.close()
266-
await conn.close()
267-
await asyncio.sleep(0.1)
263+
async with sess.get(
264+
url, proxy=secure_proxy_url, ssl=client_ssl_ctx
265+
) as response:
266+
assert response.status == 200
267+
finally:
268+
await sess.close()
269+
await conn.close()
270+
await asyncio.sleep(0)
271+
await asyncio.sleep(0.1)
268272

269273

270274
@pytest.fixture

0 commit comments

Comments
 (0)