|
1 | 1 | # pylint:disable=unused-argument |
2 | 2 | # pylint:disable=redefined-outer-name |
3 | 3 |
|
4 | | -import asyncio |
5 | 4 | from collections.abc import AsyncIterable, AsyncIterator, Callable |
6 | 5 | from contextlib import _AsyncGeneratorContextManager, asynccontextmanager |
7 | 6 | from unittest.mock import AsyncMock |
8 | 7 |
|
9 | 8 | import pytest |
10 | 9 | import socketio |
11 | 10 | from aiohttp import web |
12 | | -from aiohttp.test_utils import TestServer |
13 | 11 | from models_library.api_schemas_webserver.socketio import SocketIORoomStr |
14 | 12 | from models_library.users import UserID |
15 | 13 | from pytest_mock import MockerFixture |
|
20 | 18 |
|
21 | 19 |
|
22 | 20 | @pytest.fixture |
23 | | -async def socketio_server_factory() -> Callable[ |
24 | | - [RabbitSettings], _AsyncGeneratorContextManager[AsyncServer] |
25 | | -]: |
| 21 | +async def socketio_server_factory() -> ( |
| 22 | + Callable[[RabbitSettings], _AsyncGeneratorContextManager[AsyncServer]] |
| 23 | +): |
26 | 24 | @asynccontextmanager |
27 | 25 | async def _(rabbit_settings: RabbitSettings) -> AsyncIterator[AsyncServer]: |
28 | 26 | # Same configuration as simcore_service_webserver/socketio/server.py |
@@ -56,27 +54,18 @@ async def web_server( |
56 | 54 | aiohttp_app = web.Application() |
57 | 55 | socketio_server.attach(aiohttp_app) |
58 | 56 |
|
59 | | - async def _lifespan( |
60 | | - server: TestServer, started: asyncio.Event, teardown: asyncio.Event |
61 | | - ): |
62 | | - # NOTE: this is necessary to avoid blocking comms between client and this server |
63 | | - await server.start_server() |
64 | | - started.set() # notifies started |
65 | | - await teardown.wait() # keeps test0server until needs to close |
66 | | - await server.close() |
| 57 | + server_port = unused_tcp_port_factory() |
67 | 58 |
|
68 | | - setup = asyncio.Event() |
69 | | - teardown = asyncio.Event() |
| 59 | + runner = web.AppRunner(aiohttp_app) |
| 60 | + await runner.setup() |
70 | 61 |
|
71 | | - server = TestServer(aiohttp_app, port=unused_tcp_port_factory()) |
72 | | - t = asyncio.create_task(_lifespan(server, setup, teardown), name="server-lifespan") |
| 62 | + site = web.TCPSite(runner, "localhost", server_port) |
| 63 | + await site.start() |
73 | 64 |
|
74 | | - await setup.wait() |
| 65 | + yield URL(f"http://localhost:{server_port}") |
75 | 66 |
|
76 | | - yield URL(server.make_url("/")) |
77 | | - |
78 | | - assert t |
79 | | - teardown.set() |
| 67 | + await site.stop() |
| 68 | + await runner.cleanup() |
80 | 69 |
|
81 | 70 |
|
82 | 71 | @pytest.fixture |
|
0 commit comments