From 0f39c2b1919727904f4fac2d79cb41dc6bfe41fe Mon Sep 17 00:00:00 2001 From: Xtreak Date: Thu, 30 May 2019 15:30:29 +0530 Subject: [PATCH] bpo-37015: Ensure tasks created by _accept_connection2 due to AsyncMock are completed (GH-13661) From 3.8 async functions used with mock.patch return an `AsyncMock`. `_accept_connection2` is an async function where create_task is also mocked. Don't mock `create_task` so that tasks are created out of coroutine returned by `AsyncMock` and the tasks are completed. https://bugs.python.org/issue37015 --- Lib/test/test_asyncio/test_selector_events.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_asyncio/test_selector_events.py b/Lib/test/test_asyncio/test_selector_events.py index 2e52e9df5c3..68b7853b2eb 100644 --- a/Lib/test/test_asyncio/test_selector_events.py +++ b/Lib/test/test_asyncio/test_selector_events.py @@ -363,14 +363,16 @@ class BaseSelectorEventLoopTests(test_utils.TestCase): sock.accept.return_value = (mock.Mock(), mock.Mock()) backlog = 100 # Mock the coroutine generation for a connection to prevent - # warnings related to un-awaited coroutines. + # warnings related to un-awaited coroutines. _accept_connection2 + # is an async function that is patched with AsyncMock. create_task + # creates a task out of coroutine returned by AsyncMock, so use + # asyncio.sleep(0) to ensure created tasks are complete to avoid + # task pending warnings. mock_obj = mock.patch.object with mock_obj(self.loop, '_accept_connection2') as accept2_mock: - accept2_mock.return_value = None - with mock_obj(self.loop, 'create_task') as task_mock: - task_mock.return_value = None - self.loop._accept_connection( - mock.Mock(), sock, backlog=backlog) + self.loop._accept_connection( + mock.Mock(), sock, backlog=backlog) + self.loop.run_until_complete(asyncio.sleep(0)) self.assertEqual(sock.accept.call_count, backlog)