summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2021-09-04 20:37:56 (GMT)
committerGitHub <noreply@github.com>2021-09-04 20:37:56 (GMT)
commit2ad114ddffbeeef1d20f26571b85a66974295667 (patch)
tree40997876b1e4618229faab16ef91390e554a1bf5
parent9438443a5fff6f96af48ea0eda0ca4e3fa67ae52 (diff)
downloadcpython-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.py80
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):