@@ -286,6 +286,78 @@ async def test_release(loop: asyncio.AbstractEventLoop, session: ClientSession)
286286 assert response ._connection is None
287287
288288
289+ async def test_wait_released_releases_connection (
290+ loop : asyncio .AbstractEventLoop , session : ClientSession
291+ ) -> None :
292+ url = URL ("http://def-cl-resp.org" )
293+ response = ClientResponse (
294+ "get" ,
295+ url ,
296+ writer = None ,
297+ continue100 = None ,
298+ timer = TimerNoop (),
299+ traces = [],
300+ loop = loop ,
301+ session = session ,
302+ request_headers = CIMultiDict [str ](),
303+ original_url = url ,
304+ )
305+ conn = response ._connection = mock .Mock ()
306+
307+ await response ._wait_released ()
308+
309+ conn .release .assert_called_once_with ()
310+ assert response ._connection is None
311+
312+
313+ async def test_wait_released_skips_release_without_connection (
314+ loop : asyncio .AbstractEventLoop , session : ClientSession
315+ ) -> None :
316+ url = URL ("http://def-cl-resp.org" )
317+ response = ClientResponse (
318+ "get" ,
319+ url ,
320+ writer = None ,
321+ continue100 = None ,
322+ timer = TimerNoop (),
323+ traces = [],
324+ loop = loop ,
325+ session = session ,
326+ request_headers = CIMultiDict [str ](),
327+ original_url = url ,
328+ )
329+ response ._connection = None
330+
331+ with mock .patch .object (response , "_release_connection" ) as release_connection :
332+ await response ._wait_released ()
333+
334+ release_connection .assert_not_called ()
335+
336+
337+ async def test_wait_for_close_skips_release_if_already_released (
338+ loop : asyncio .AbstractEventLoop , session : ClientSession
339+ ) -> None :
340+ url = URL ("http://def-cl-resp.org" )
341+ response = ClientResponse (
342+ "get" ,
343+ url ,
344+ writer = None ,
345+ continue100 = None ,
346+ timer = TimerNoop (),
347+ traces = [],
348+ loop = loop ,
349+ session = session ,
350+ request_headers = CIMultiDict [str ](),
351+ original_url = url ,
352+ )
353+ response ._released = True
354+
355+ with mock .patch .object (response , "release" ) as release :
356+ await response .wait_for_close ()
357+
358+ release .assert_not_called ()
359+
360+
289361@pytest .mark .skipif (
290362 sys .implementation .name != "cpython" ,
291363 reason = "Other implementations has different GC strategies" ,
0 commit comments