mirror of
https://github.com/python/cpython.git
synced 2025-07-23 11:15:24 +00:00
[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 c2970fdec5
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
9438443a5f
commit
2ad114ddff
1 changed files with 80 additions and 0 deletions
|
@ -3,6 +3,7 @@ import types
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from test.support.import_helper import import_module
|
from test.support.import_helper import import_module
|
||||||
|
from test.support import gc_collect
|
||||||
asyncio = import_module("asyncio")
|
asyncio = import_module("asyncio")
|
||||||
|
|
||||||
|
|
||||||
|
@ -1287,6 +1288,85 @@ class AsyncGenAsyncioTest(unittest.TestCase):
|
||||||
|
|
||||||
self.assertEqual(finalized, 2)
|
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):
|
def test_async_gen_expression_01(self):
|
||||||
async def arange(n):
|
async def arange(n):
|
||||||
for i in range(n):
|
for i in range(n):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue