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