Skip to content

Commit c7727bc

Browse files
committed
fix testsuite: apply hardening to awaiting grpc server stop
8bca31f1261ef8a4780968732402052c1ff28f34
1 parent 9c88376 commit c7727bc

File tree

1 file changed

+15
-4
lines changed
  • testsuite/pytest_plugins/pytest_userver/plugins/grpc

1 file changed

+15
-4
lines changed

testsuite/pytest_plugins/pytest_userver/plugins/grpc/mockserver.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,25 @@ async def grpc_mockserver(grpc_mockserver_endpoint) -> grpc.aio.Server:
8484
"""
8585
server = grpc.aio.server()
8686
server.add_insecure_port(grpc_mockserver_endpoint)
87-
server_task = asyncio.create_task(server.start())
87+
await server.start()
8888

8989
try:
9090
yield server
9191
finally:
92-
await asyncio.shield(server.stop(grace=None))
93-
await asyncio.shield(server.wait_for_termination())
94-
await asyncio.shield(server_task)
92+
93+
async def stop_server():
94+
await server.stop(grace=None)
95+
await server.wait_for_termination()
96+
97+
stop_server_task = asyncio.shield(asyncio.create_task(stop_server()))
98+
# asyncio.shield does not protect our await from cancellations, and we
99+
# really need to wait for the server stopping before continuing.
100+
try:
101+
await stop_server_task
102+
except asyncio.CancelledError:
103+
await stop_server_task
104+
# Propagate cancellation when we are done
105+
raise
95106

96107

97108
@pytest.fixture(scope='session')

0 commit comments

Comments
 (0)