summaryrefslogtreecommitdiffstatshomepage
path: root/tests/net_hosted/asyncio_start_server.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/net_hosted/asyncio_start_server.py')
-rw-r--r--tests/net_hosted/asyncio_start_server.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/net_hosted/asyncio_start_server.py b/tests/net_hosted/asyncio_start_server.py
index 3162218981..e76faf7edb 100644
--- a/tests/net_hosted/asyncio_start_server.py
+++ b/tests/net_hosted/asyncio_start_server.py
@@ -22,6 +22,44 @@ async def test():
print("sleep")
await asyncio.sleep(0)
+ # Test that cancellation works before the server starts if
+ # the subsequent code raises.
+ print("create server3")
+ server3 = await asyncio.start_server(None, "0.0.0.0", 8000)
+ try:
+ async with server3:
+ raise OSError
+ except OSError as er:
+ print("OSError")
+
+ # Test that closing doesn't raise CancelledError.
+ print("create server4")
+ server4 = await asyncio.start_server(None, "0.0.0.0", 8000)
+ server4.close()
+ await server4.wait_closed()
+ print("server4 closed")
+
+ # Test that cancelling the task will still raise CancelledError, checking
+ # edge cases around how many times the tasks have been re-scheduled by
+ # sleep.
+ async def task(n):
+ print("create task server", n)
+ srv = await asyncio.start_server(None, "0.0.0.0", 8000)
+ await srv.wait_closed()
+ # This should be unreachable.
+ print("task finished")
+
+ for num_sleep in range(0, 5):
+ print("sleep", num_sleep)
+ t = asyncio.create_task(task(num_sleep))
+ for _ in range(num_sleep):
+ await asyncio.sleep(0)
+ t.cancel()
+ try:
+ await t
+ except asyncio.CancelledError:
+ print("CancelledError")
+
print("done")