|
1 |
| -import functools |
| 1 | +from functools import partial |
2 | 2 |
|
3 | 3 | import pytest
|
4 |
| -import trio.hazmat |
5 |
| -import trio.ssl |
6 |
| -import trio.testing |
| 4 | +import trio |
7 | 5 | import trustme
|
8 | 6 | from async_generator import async_generator, yield_
|
9 | 7 | from trio_websocket import *
|
|
17 | 15 | async def echo_server(nursery):
|
18 | 16 | ''' A server that reads one message, sends back the same message,
|
19 | 17 | then closes the connection. '''
|
20 |
| - serve_fn = functools.partial(serve_websocket, echo_handler, HOST, 0, |
21 |
| - ssl_context=None) |
| 18 | + serve_fn = partial(serve_websocket, echo_handler, HOST, 0, ssl_context=None) |
22 | 19 | server = await nursery.start(serve_fn)
|
23 | 20 | await yield_(server)
|
24 | 21 |
|
@@ -123,7 +120,7 @@ async def test_serve_ssl(nursery):
|
123 | 120 | async def test_serve_handler_nursery(nursery):
|
124 | 121 | task = trio.hazmat.current_task()
|
125 | 122 | async with trio.open_nursery() as handler_nursery:
|
126 |
| - serve_with_nursery = functools.partial(serve_websocket, echo_handler, |
| 123 | + serve_with_nursery = partial(serve_websocket, echo_handler, |
127 | 124 | HOST, 0, None, handler_nursery=handler_nursery)
|
128 | 125 | server = await nursery.start(serve_with_nursery)
|
129 | 126 | port = server.port
|
@@ -241,7 +238,7 @@ async def handler(stream):
|
241 | 238 | msg = await server.get_message()
|
242 | 239 | assert msg == 'Hello from client!'
|
243 | 240 | assert server.is_closed
|
244 |
| - serve_fn = functools.partial(trio.serve_tcp, handler, 0, host=HOST) |
| 241 | + serve_fn = partial(trio.serve_tcp, handler, 0, host=HOST) |
245 | 242 | listeners = await nursery.start(serve_fn)
|
246 | 243 | port = listeners[0].socket.getsockname()[1]
|
247 | 244 | async with open_websocket(HOST, port, RESOURCE, use_ssl=False) as client:
|
@@ -269,9 +266,24 @@ async def handler(stream):
|
269 | 266 | await stream.aclose()
|
270 | 267 | with pytest.raises(ConnectionClosed):
|
271 | 268 | await server.send_message('Hello from client!')
|
272 |
| - serve_fn = functools.partial(trio.serve_tcp, handler, 0, host=HOST) |
| 269 | + serve_fn = partial(trio.serve_tcp, handler, 0, host=HOST) |
273 | 270 | listeners = await nursery.start(serve_fn)
|
274 | 271 | port = listeners[0].socket.getsockname()[1]
|
275 | 272 | async with open_websocket(HOST, port, RESOURCE, use_ssl=False) as client:
|
276 | 273 | with pytest.raises(ConnectionClosed):
|
277 | 274 | await client.get_message()
|
| 275 | + |
| 276 | + |
| 277 | +async def test_server_handler_exit(nursery, autojump_clock): |
| 278 | + async def handler(connection): |
| 279 | + await trio.sleep(1) |
| 280 | + |
| 281 | + server = await nursery.start( |
| 282 | + partial(serve_websocket, handler, HOST, 0, ssl_context=None)) |
| 283 | + |
| 284 | + # connection should close when server handler exists |
| 285 | + with trio.fail_after(2): |
| 286 | + async with open_websocket( |
| 287 | + HOST, server.port, '/', use_ssl=False) as connection: |
| 288 | + with pytest.raises(ConnectionClosed): |
| 289 | + await connection.get_message() |
0 commit comments