Skip to content

Commit 7900f4c

Browse files
Switch from context manager to a straight binding to avoid deadlock
1 parent 26ba67e commit 7900f4c

1 file changed

Lines changed: 26 additions & 20 deletions

File tree

tests/river_fixtures/clientserver.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,32 +38,38 @@ async def client(
3838
transport_options: TransportOptions,
3939
no_logging_error: NoErrors,
4040
) -> AsyncGenerator[Client, None]:
41+
binding = None
4142
try:
42-
async with serve(server.serve, "127.0.0.1") as binding:
43-
sockets = list(binding.sockets)
44-
assert len(sockets) == 1, "Too many sockets!"
45-
socket = sockets[0]
43+
binding = await serve(server.serve, "127.0.0.1")
44+
sockets = list(binding.sockets)
45+
assert len(sockets) == 1, "Too many sockets!"
46+
socket = sockets[0]
4647

47-
async def websocket_uri_factory() -> UriAndMetadata[None]:
48-
return {
49-
"uri": "ws://%s:%d" % socket.getsockname(),
50-
"metadata": None,
51-
}
48+
async def websocket_uri_factory() -> UriAndMetadata[None]:
49+
return {
50+
"uri": "ws://%s:%d" % socket.getsockname(),
51+
"metadata": None,
52+
}
53+
54+
client: Client[Literal[None]] = Client[None](
55+
uri_and_metadata_factory=websocket_uri_factory,
56+
client_id="test_client",
57+
server_id="test_server",
58+
transport_options=transport_options,
59+
)
60+
try:
61+
yield client
62+
finally:
63+
logging.debug("Start closing test client : %s", "test_client")
64+
await client.close()
5265

53-
client: Client[Literal[None]] = Client[None](
54-
uri_and_metadata_factory=websocket_uri_factory,
55-
client_id="test_client",
56-
server_id="test_server",
57-
transport_options=transport_options,
58-
)
59-
try:
60-
yield client
61-
finally:
62-
logging.debug("Start closing test client : %s", "test_client")
63-
await client.close()
6466
finally:
6567
await asyncio.sleep(1)
6668
logging.debug("Start closing test server")
69+
if binding:
70+
binding.close()
6771
await server.close()
72+
if binding:
73+
await binding.wait_closed()
6874
# Server should close normally
6975
no_logging_error()

0 commit comments

Comments
 (0)