Skip to content

Commit c8c3d5f

Browse files
authored
[PR #10898/a4be2cb backport][3.12] Cleanup tests to ensure connector cleanup and resource management (#10900)
1 parent d4eaf55 commit c8c3d5f

File tree

2 files changed

+69
-55
lines changed

2 files changed

+69
-55
lines changed

tests/test_connector.py

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -307,80 +307,90 @@ async def test_close(loop) -> None:
307307

308308
async def test_get(loop: asyncio.AbstractEventLoop, key: ConnectionKey) -> None:
309309
conn = aiohttp.BaseConnector()
310-
assert await conn._get(key, []) is None
310+
try:
311+
assert await conn._get(key, []) is None
311312

312-
proto = create_mocked_conn(loop)
313-
conn._conns[key] = deque([(proto, loop.time())])
314-
connection = await conn._get(key, [])
315-
assert connection is not None
316-
assert connection.protocol == proto
317-
connection.close()
318-
await conn.close()
313+
proto = create_mocked_conn(loop)
314+
conn._conns[key] = deque([(proto, loop.time())])
315+
connection = await conn._get(key, [])
316+
assert connection is not None
317+
assert connection.protocol == proto
318+
connection.close()
319+
finally:
320+
await conn.close()
319321

320322

321323
async def test_get_unconnected_proto(loop) -> None:
322324
conn = aiohttp.BaseConnector()
323325
key = ConnectionKey("localhost", 80, False, False, None, None, None)
324-
assert await conn._get(key, []) is None
325-
326-
proto = create_mocked_conn(loop)
327-
conn._conns[key] = deque([(proto, loop.time())])
328-
connection = await conn._get(key, [])
329-
assert connection is not None
330-
assert connection.protocol == proto
331-
connection.close()
326+
try:
327+
assert await conn._get(key, []) is None
332328

333-
assert await conn._get(key, []) is None
334-
conn._conns[key] = deque([(proto, loop.time())])
335-
proto.is_connected = lambda *args: False
336-
assert await conn._get(key, []) is None
337-
await conn.close()
329+
proto = create_mocked_conn(loop)
330+
conn._conns[key] = deque([(proto, loop.time())])
331+
connection = await conn._get(key, [])
332+
assert connection is not None
333+
assert connection.protocol == proto
334+
connection.close()
335+
336+
assert await conn._get(key, []) is None
337+
conn._conns[key] = deque([(proto, loop.time())])
338+
proto.is_connected = lambda *args: False
339+
assert await conn._get(key, []) is None
340+
finally:
341+
await conn.close()
338342

339343

340344
async def test_get_unconnected_proto_ssl(loop) -> None:
341345
conn = aiohttp.BaseConnector()
342346
key = ConnectionKey("localhost", 80, True, False, None, None, None)
343-
assert await conn._get(key, []) is None
344-
345-
proto = create_mocked_conn(loop)
346-
conn._conns[key] = deque([(proto, loop.time())])
347-
connection = await conn._get(key, [])
348-
assert connection is not None
349-
assert connection.protocol == proto
350-
connection.close()
347+
try:
348+
assert await conn._get(key, []) is None
351349

352-
assert await conn._get(key, []) is None
353-
conn._conns[key] = deque([(proto, loop.time())])
354-
proto.is_connected = lambda *args: False
355-
assert await conn._get(key, []) is None
356-
await conn.close()
350+
proto = create_mocked_conn(loop)
351+
conn._conns[key] = deque([(proto, loop.time())])
352+
connection = await conn._get(key, [])
353+
assert connection is not None
354+
assert connection.protocol == proto
355+
connection.close()
356+
357+
assert await conn._get(key, []) is None
358+
conn._conns[key] = deque([(proto, loop.time())])
359+
proto.is_connected = lambda *args: False
360+
assert await conn._get(key, []) is None
361+
finally:
362+
await conn.close()
357363

358364

359365
async def test_get_expired(loop: asyncio.AbstractEventLoop) -> None:
360366
conn = aiohttp.BaseConnector()
361367
key = ConnectionKey("localhost", 80, False, False, None, None, None)
362-
assert await conn._get(key, []) is None
368+
try:
369+
assert await conn._get(key, []) is None
363370

364-
proto = mock.Mock()
365-
conn._conns[key] = deque([(proto, loop.time() - 1000)])
366-
assert await conn._get(key, []) is None
367-
assert not conn._conns
368-
await conn.close()
371+
proto = create_mocked_conn(loop)
372+
conn._conns[key] = deque([(proto, loop.time() - 1000)])
373+
assert await conn._get(key, []) is None
374+
assert not conn._conns
375+
finally:
376+
await conn.close()
369377

370378

371379
@pytest.mark.usefixtures("enable_cleanup_closed")
372380
async def test_get_expired_ssl(loop: asyncio.AbstractEventLoop) -> None:
373381
conn = aiohttp.BaseConnector(enable_cleanup_closed=True)
374382
key = ConnectionKey("localhost", 80, True, False, None, None, None)
375-
assert await conn._get(key, []) is None
383+
try:
384+
assert await conn._get(key, []) is None
376385

377-
proto = mock.Mock()
378-
transport = proto.transport
379-
conn._conns[key] = deque([(proto, loop.time() - 1000)])
380-
assert await conn._get(key, []) is None
381-
assert not conn._conns
382-
assert conn._cleanup_closed_transports == [transport]
383-
await conn.close()
386+
proto = create_mocked_conn(loop)
387+
transport = proto.transport
388+
conn._conns[key] = deque([(proto, loop.time() - 1000)])
389+
assert await conn._get(key, []) is None
390+
assert not conn._conns
391+
assert conn._cleanup_closed_transports == [transport]
392+
finally:
393+
await conn.close()
384394

385395

386396
async def test_release_acquired(loop, key) -> None:

tests/test_proxy_functional.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -220,14 +220,18 @@ async def test_uvloop_secure_https_proxy(
220220
"""Ensure HTTPS sites are accessible through a secure proxy without warning when using uvloop."""
221221
conn = aiohttp.TCPConnector()
222222
sess = aiohttp.ClientSession(connector=conn)
223-
url = URL("https://example.com")
224-
225-
async with sess.get(url, proxy=secure_proxy_url, ssl=client_ssl_ctx) as response:
226-
assert response.status == 200
223+
try:
224+
url = URL("https://example.com")
227225

228-
await sess.close()
229-
await conn.close()
230-
await asyncio.sleep(0.1)
226+
async with sess.get(
227+
url, proxy=secure_proxy_url, ssl=client_ssl_ctx
228+
) as response:
229+
assert response.status == 200
230+
finally:
231+
await sess.close()
232+
await conn.close()
233+
await asyncio.sleep(0)
234+
await asyncio.sleep(0.1)
231235

232236

233237
@pytest.fixture

0 commit comments

Comments
 (0)