15
15
16
16
import pytest
17
17
from aiohappyeyeballs import AddrInfoType
18
+ from pytest_mock import MockerFixture
18
19
from yarl import URL
19
20
20
21
import aiohttp
@@ -355,6 +356,7 @@ async def test_get_expired(loop: asyncio.AbstractEventLoop) -> None:
355
356
await conn.close()
356
357
357
358
359
+ @pytest.mark.usefixtures("enable_cleanup_closed")
358
360
async def test_get_expired_ssl(loop: asyncio.AbstractEventLoop) -> None:
359
361
conn = aiohttp.BaseConnector(enable_cleanup_closed=True)
360
362
key = ConnectionKey("localhost", 80, True, False, None, None, None)
@@ -421,9 +423,16 @@ async def test_release(loop, key) -> None:
421
423
await conn.close()
422
424
423
425
424
- async def test_release_ssl_transport(loop, ssl_key) -> None:
425
- conn = aiohttp.BaseConnector(loop=loop, enable_cleanup_closed=True)
426
- conn._release_waiter = mock.Mock()
426
+ @pytest.mark.usefixtures("enable_cleanup_closed")
427
+ async def test_release_ssl_transport(
428
+ loop: asyncio.AbstractEventLoop, ssl_key: ConnectionKey
429
+ ) -> None:
430
+ conn = aiohttp.BaseConnector(enable_cleanup_closed=True)
431
+ with mock.patch.object(conn, "_release_waiter", autospec=True, spec_set=True):
432
+ proto = create_mocked_conn(loop)
433
+ transport = proto.transport
434
+ conn._acquired.add(proto)
435
+ conn._acquired_per_host[ssl_key].add(proto)
427
436
428
437
proto = mock.Mock()
429
438
transport = proto.transport
@@ -1678,6 +1687,7 @@ async def test_close_during_connect(loop: asyncio.AbstractEventLoop) -> None:
1678
1687
assert proto.close.called
1679
1688
1680
1689
1690
+ @pytest.mark.usefixtures("enable_cleanup_closed")
1681
1691
async def test_ctor_cleanup() -> None:
1682
1692
loop = mock.Mock()
1683
1693
loop.time.return_value = 1.5
@@ -1711,8 +1721,11 @@ async def test_cleanup(key: ConnectionKey) -> None:
1711
1721
assert conn._cleanup_handle is None
1712
1722
1713
1723
1714
- async def test_cleanup_close_ssl_transport(ssl_key) -> None:
1715
- proto = mock.Mock()
1724
+ @pytest.mark.usefixtures("enable_cleanup_closed")
1725
+ async def test_cleanup_close_ssl_transport(
1726
+ loop: asyncio.AbstractEventLoop, ssl_key: ConnectionKey
1727
+ ) -> None:
1728
+ proto = create_mocked_conn(loop)
1716
1729
transport = proto.transport
1717
1730
testset: DefaultDict[ConnectionKey, Deque[Tuple[ResponseHandler, float]]] = (
1718
1731
defaultdict(deque)
@@ -1779,7 +1792,10 @@ async def test_cleanup3(loop: asyncio.AbstractEventLoop, key: ConnectionKey) ->
1779
1792
await conn.close()
1780
1793
1781
1794
1782
- async def test_cleanup_closed(loop, mocker) -> None:
1795
+ @pytest.mark.usefixtures("enable_cleanup_closed")
1796
+ async def test_cleanup_closed(
1797
+ loop: asyncio.AbstractEventLoop, mocker: MockerFixture
1798
+ ) -> None:
1783
1799
if not hasattr(loop, "__dict__"):
1784
1800
pytest.skip("can not override loop attributes")
1785
1801
@@ -1796,8 +1812,19 @@ async def test_cleanup_closed(loop, mocker) -> None:
1796
1812
assert cleanup_closed_handle.cancel.called
1797
1813
1798
1814
1799
- async def test_cleanup_closed_disabled(loop, mocker) -> None:
1800
- conn = aiohttp.BaseConnector(loop=loop, enable_cleanup_closed=False)
1815
+ async def test_cleanup_closed_is_noop_on_fixed_cpython() -> None:
1816
+ """Ensure that enable_cleanup_closed is a noop on fixed Python versions."""
1817
+ with mock.patch("aiohttp.connector.NEEDS_CLEANUP_CLOSED", False), pytest.warns(
1818
+ DeprecationWarning, match="cleanup_closed ignored"
1819
+ ):
1820
+ conn = aiohttp.BaseConnector(enable_cleanup_closed=True)
1821
+ assert conn._cleanup_closed_disabled is True
1822
+
1823
+
1824
+ async def test_cleanup_closed_disabled(
1825
+ loop: asyncio.AbstractEventLoop, mocker: MockerFixture
1826
+ ) -> None:
1827
+ conn = aiohttp.BaseConnector(enable_cleanup_closed=False)
1801
1828
1802
1829
tr = mock.Mock()
1803
1830
conn._cleanup_closed_transports = [tr]
@@ -2303,8 +2330,11 @@ async def test_close_abort_closed_transports(loop: asyncio.AbstractEventLoop) ->
2303
2330
assert conn.closed
2304
2331
2305
2332
2306
- async def test_close_cancels_cleanup_closed_handle(loop) -> None:
2307
- conn = aiohttp.BaseConnector(loop=loop, enable_cleanup_closed=True)
2333
+ @pytest.mark.usefixtures("enable_cleanup_closed")
2334
+ async def test_close_cancels_cleanup_closed_handle(
2335
+ loop: asyncio.AbstractEventLoop,
2336
+ ) -> None:
2337
+ conn = aiohttp.BaseConnector(enable_cleanup_closed=True)
2308
2338
assert conn._cleanup_closed_handle is not None
2309
2339
await conn.close()
2310
2340
assert conn._cleanup_closed_handle is None
0 commit comments