Skip to content

Commit a09c0e2

Browse files
author
rodrigo.nogueira
committed
Add tests for release guard coverage
1 parent a90c6db commit a09c0e2

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

tests/test_client_response.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)