]> granicus.if.org Git - python/commitdiff
bpo-37015: Ensure tasks created by _accept_connection2 due to AsyncMock are completed...
authorXtreak <tir.karthi@gmail.com>
Thu, 30 May 2019 10:00:29 +0000 (15:30 +0530)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 30 May 2019 10:00:29 +0000 (03:00 -0700)
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

index 2e52e9df5c3b6e71095cbf36d48e920016d1d790..68b7853b2eba242f9f17ed1c9b491983ec2b8f32 100644 (file)
@@ -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)