diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-08-16 09:54:58 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-16 09:54:58 (GMT) |
commit | 8516ca500eb45ecf997a471f003df02a9eb767ce (patch) | |
tree | 25c97a453f062a430139ac47ba5eecb474e7b89c | |
parent | 1960409a6dcbd1e3527f02b523bd27df9086dd77 (diff) | |
download | cpython-8516ca500eb45ecf997a471f003df02a9eb767ce.zip cpython-8516ca500eb45ecf997a471f003df02a9eb767ce.tar.gz cpython-8516ca500eb45ecf997a471f003df02a9eb767ce.tar.bz2 |
bpo-44911: Fixed IsolatedAsyncioTestCase from throwing an exception on leaked tasks (GH-27765)
(cherry picked from commit 2cb1a6806c0cefab0c3a40fdd428a89a4392570e)
Co-authored-by: Bar Harel <bar.harel@biocatch.com>
-rw-r--r-- | Lib/unittest/async_case.py | 2 | ||||
-rw-r--r-- | Lib/unittest/test/test_async_case.py | 20 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2021-08-14-00-55-16.bpo-44911.uk3hYk.rst | 1 |
3 files changed, 22 insertions, 1 deletions
diff --git a/Lib/unittest/async_case.py b/Lib/unittest/async_case.py index 520213c..86ed704 100644 --- a/Lib/unittest/async_case.py +++ b/Lib/unittest/async_case.py @@ -135,7 +135,7 @@ class IsolatedAsyncioTestCase(TestCase): task.cancel() loop.run_until_complete( - asyncio.gather(*to_cancel, loop=loop, return_exceptions=True)) + asyncio.gather(*to_cancel, return_exceptions=True)) for task in to_cancel: if task.cancelled(): diff --git a/Lib/unittest/test/test_async_case.py b/Lib/unittest/test/test_async_case.py index d01864b..6e48b9e 100644 --- a/Lib/unittest/test/test_async_case.py +++ b/Lib/unittest/test/test_async_case.py @@ -216,6 +216,26 @@ class TestAsyncCase(unittest.TestCase): output = test.run() self.assertFalse(output.wasSuccessful()) + def test_cancellation_hanging_tasks(self): + cancelled = False + class Test(unittest.IsolatedAsyncioTestCase): + async def test_leaking_task(self): + async def coro(): + nonlocal cancelled + try: + await asyncio.sleep(1) + except asyncio.CancelledError: + cancelled = True + raise + + # Leave this running in the background + asyncio.create_task(coro()) + + test = Test("test_leaking_task") + output = test.run() + self.assertTrue(cancelled) + + if __name__ == "__main__": diff --git a/Misc/NEWS.d/next/Library/2021-08-14-00-55-16.bpo-44911.uk3hYk.rst b/Misc/NEWS.d/next/Library/2021-08-14-00-55-16.bpo-44911.uk3hYk.rst new file mode 100644 index 0000000..f8aed69 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-08-14-00-55-16.bpo-44911.uk3hYk.rst @@ -0,0 +1 @@ +:class:`~unittest.IsolatedAsyncioTestCase` will no longer throw an exception while cancelling leaked tasks. Patch by Bar Harel.
\ No newline at end of file |