diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-09-04 20:37:56 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-04 20:37:56 (GMT) |
commit | 2ad114ddffbeeef1d20f26571b85a66974295667 (patch) | |
tree | 40997876b1e4618229faab16ef91390e554a1bf5 | |
parent | 9438443a5fff6f96af48ea0eda0ca4e3fa67ae52 (diff) | |
download | cpython-2ad114ddffbeeef1d20f26571b85a66974295667.zip cpython-2ad114ddffbeeef1d20f26571b85a66974295667.tar.gz cpython-2ad114ddffbeeef1d20f26571b85a66974295667.tar.bz2 |
[3.10] bpo-45097: Add more tests for shutdown_asyncgens() (GH-28154) (GH-28159)
* bpo-45097: Add more tests for shutdown_asyncgens() (GH-28154)
(cherry picked from commit c2970fdec52788b6d9ff419ab7e31f255d87433d)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
-rw-r--r-- | Lib/test/test_asyncgen.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/Lib/test/test_asyncgen.py b/Lib/test/test_asyncgen.py index 77c15c0..0814451 100644 --- a/Lib/test/test_asyncgen.py +++ b/Lib/test/test_asyncgen.py @@ -3,6 +3,7 @@ import types import unittest from test.support.import_helper import import_module +from test.support import gc_collect asyncio = import_module("asyncio") @@ -1287,6 +1288,85 @@ class AsyncGenAsyncioTest(unittest.TestCase): self.assertEqual(finalized, 2) + def test_async_gen_asyncio_shutdown_02(self): + messages = [] + + def exception_handler(loop, context): + messages.append(context) + + async def async_iterate(): + yield 1 + yield 2 + + it = async_iterate() + async def main(): + loop = asyncio.get_running_loop() + loop.set_exception_handler(exception_handler) + + async for i in it: + break + + asyncio.run(main()) + + self.assertEqual(messages, []) + + def test_async_gen_asyncio_shutdown_exception_01(self): + messages = [] + + def exception_handler(loop, context): + messages.append(context) + + async def async_iterate(): + try: + yield 1 + yield 2 + finally: + 1/0 + + it = async_iterate() + async def main(): + loop = asyncio.get_running_loop() + loop.set_exception_handler(exception_handler) + + async for i in it: + break + + asyncio.run(main()) + + message, = messages + self.assertEqual(message['asyncgen'], it) + self.assertIsInstance(message['exception'], ZeroDivisionError) + self.assertIn('an error occurred during closing of asynchronous generator', + message['message']) + + def test_async_gen_asyncio_shutdown_exception_02(self): + messages = [] + + def exception_handler(loop, context): + messages.append(context) + + async def async_iterate(): + try: + yield 1 + yield 2 + finally: + 1/0 + + async def main(): + loop = asyncio.get_running_loop() + loop.set_exception_handler(exception_handler) + + async for i in async_iterate(): + break + gc_collect() + + asyncio.run(main()) + + message, = messages + self.assertIsInstance(message['exception'], ZeroDivisionError) + self.assertIn('unhandled exception during asyncio.run() shutdown', + message['message']) + def test_async_gen_expression_01(self): async def arange(n): for i in range(n): |