summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Grainger <tagrain@gmail.com>2022-07-21 11:35:20 (GMT)
committerGitHub <noreply@github.com>2022-07-21 11:35:20 (GMT)
commit834bd5dd766cf212fb20d65d8a046c62a33006d4 (patch)
tree33c617bec299410655f9e1fdce41d7be533bf103
parentb1924b10069fb797845284552fb9da931b1ffdb9 (diff)
downloadcpython-834bd5dd766cf212fb20d65d8a046c62a33006d4.zip
cpython-834bd5dd766cf212fb20d65d8a046c62a33006d4.tar.gz
cpython-834bd5dd766cf212fb20d65d8a046c62a33006d4.tar.bz2
gh-95010: Fix asyncio GenericWatcherTests.test_create_subprocess_fails_with_inactive_watcher (GH-95009)
The test was never run, because it was missing the TestCase class. The test failed because the wrong attribute was patched.
-rw-r--r--Lib/test/test_asyncio/test_subprocess.py46
1 files changed, 26 insertions, 20 deletions
diff --git a/Lib/test/test_asyncio/test_subprocess.py b/Lib/test/test_asyncio/test_subprocess.py
index 305330a..961c463 100644
--- a/Lib/test/test_asyncio/test_subprocess.py
+++ b/Lib/test/test_asyncio/test_subprocess.py
@@ -700,34 +700,40 @@ if sys.platform != 'win32':
test_utils.TestCase):
Watcher = unix_events.PidfdChildWatcher
-else:
- # Windows
- class SubprocessProactorTests(SubprocessMixin, test_utils.TestCase):
-
- def setUp(self):
- super().setUp()
- self.loop = asyncio.ProactorEventLoop()
- self.set_event_loop(self.loop)
+ class GenericWatcherTests(test_utils.TestCase):
-class GenericWatcherTests:
+ def test_create_subprocess_fails_with_inactive_watcher(self):
+ watcher = mock.create_autospec(
+ asyncio.AbstractChildWatcher,
+ **{"__enter__.return_value.is_active.return_value": False}
+ )
- def test_create_subprocess_fails_with_inactive_watcher(self):
+ async def execute():
+ asyncio.set_child_watcher(watcher)
- async def execute():
- watcher = mock.create_authspec(asyncio.AbstractChildWatcher)
- watcher.is_active.return_value = False
- asyncio.set_child_watcher(watcher)
+ with self.assertRaises(RuntimeError):
+ await subprocess.create_subprocess_exec(
+ os_helper.FakePath(sys.executable), '-c', 'pass')
- with self.assertRaises(RuntimeError):
- await subprocess.create_subprocess_exec(
- os_helper.FakePath(sys.executable), '-c', 'pass')
+ watcher.add_child_handler.assert_not_called()
- watcher.add_child_handler.assert_not_called()
-
- self.assertIsNone(self.loop.run_until_complete(execute()))
+ with asyncio.Runner(loop_factory=asyncio.new_event_loop) as runner:
+ self.assertIsNone(runner.run(execute()))
+ self.assertListEqual(watcher.mock_calls, [
+ mock.call.__enter__(),
+ mock.call.__enter__().is_active(),
+ mock.call.__exit__(RuntimeError, mock.ANY, mock.ANY),
+ ])
+else:
+ # Windows
+ class SubprocessProactorTests(SubprocessMixin, test_utils.TestCase):
+ def setUp(self):
+ super().setUp()
+ self.loop = asyncio.ProactorEventLoop()
+ self.set_event_loop(self.loop)
if __name__ == '__main__':