|
1 | 1 | # pylint: disable=locally-disabled, missing-class-docstring, missing-function-docstring, redefined-outer-name, too-few-public-methods, missing-module-docstring |
2 | 2 |
|
3 | 3 | import asyncio |
| 4 | +import uuid |
4 | 5 | from multiprocessing import Manager, Process |
5 | 6 |
|
6 | 7 | import pytest |
|
29 | 30 | from tests.support.webhook_notifier import run_server |
30 | 31 |
|
31 | 32 | _manager = Manager() |
32 | | -_queues = _manager.list() |
| 33 | +_queues = _manager.dict() |
33 | 34 |
|
34 | 35 |
|
35 | 36 | @pytest.fixture(scope="session", autouse=True) |
@@ -59,9 +60,10 @@ def start_server(): |
59 | 60 | @pytest.fixture |
60 | 61 | def event_queue(): |
61 | 62 | q = _manager.Queue() |
62 | | - _queues.append(q) |
| 63 | + key = str(uuid.uuid4()) |
| 64 | + _queues[key] = q |
63 | 65 | yield q |
64 | | - _queues.remove(q) |
| 66 | + del _queues[key] |
65 | 67 |
|
66 | 68 |
|
67 | 69 | class TestConnectingToServer: |
@@ -126,7 +128,7 @@ async def test_room_created_deleted( |
126 | 128 | notifier_task.cancel() |
127 | 129 |
|
128 | 130 | for event in event_checks: |
129 | | - self.assert_event(event, event_queue) |
| 131 | + self.assert_event(event, event_queue, room.id) |
130 | 132 |
|
131 | 133 | @pytest.mark.asyncio |
132 | 134 | async def test_peer_connected_disconnected( |
@@ -165,7 +167,7 @@ async def test_peer_connected_disconnected( |
165 | 167 | peer_socket_task.cancel() |
166 | 168 |
|
167 | 169 | for event in event_checks: |
168 | | - self.assert_event(event, event_queue) |
| 170 | + self.assert_event(event, event_queue, room.id) |
169 | 171 |
|
170 | 172 | @pytest.mark.asyncio |
171 | 173 | async def test_peer_connected_room_deleted( |
@@ -202,8 +204,13 @@ async def test_peer_connected_room_deleted( |
202 | 204 | peer_socket_task.cancel() |
203 | 205 |
|
204 | 206 | for event in event_checks: |
205 | | - self.assert_event(event, event_queue) |
206 | | - |
207 | | - def assert_event(self, event, event_queue): |
208 | | - data = event_queue.get(timeout=5) |
209 | | - assert data == event or isinstance(data, event) |
| 207 | + self.assert_event(event, event_queue, room.id) |
| 208 | + |
| 209 | + def assert_event(self, event, event_queue, room_id=None): |
| 210 | + for _ in range(20): |
| 211 | + data = event_queue.get(timeout=10) |
| 212 | + if room_id and data.room_id != room_id: |
| 213 | + continue |
| 214 | + assert data == event or isinstance(data, event), ( |
| 215 | + f"Expected {event} but last received: {data}" |
| 216 | + ) |
0 commit comments