wip(sync): use Daphne as live_server for tests

Also clean dependencies.

We still use the channels live server for our tests, but do not use it
anymore for the actual websocket handling.
This commit is contained in:
Yohan Boniface 2025-01-03 10:56:28 +01:00
parent 460a0c9997
commit ab7119e0a4
3 changed files with 22 additions and 43 deletions

View file

@ -54,6 +54,7 @@ dev = [
"isort==5.13.2",
]
test = [
"daphne==4.1.2",
"factory-boy==3.3.1",
"playwright>=1.39",
"pytest==8.3.4",
@ -70,10 +71,7 @@ s3 = [
"django-storages[s3]==1.14.4",
]
sync = [
"channels==4.2.0",
"daphne==4.1.2",
"pydantic==2.10.5",
"websockets==13.1",
]
[project.scripts]

View file

@ -1,13 +1,12 @@
import os
import re
import subprocess
import time
from pathlib import Path
import pytest
from channels.testing import ChannelsLiveServerTestCase
from daphne.testing import DaphneProcess
from playwright.sync_api import expect
from umap.asgi import application
from ..base import mock_tiles
@ -68,35 +67,17 @@ def login(new_page, settings, live_server):
return do_login
@pytest.fixture
def websocket_server():
# Find the test-settings, and put them in the current environment
settings_path = (Path(__file__).parent.parent / "settings.py").absolute().as_posix()
os.environ["UMAP_SETTINGS"] = settings_path
ds_proc = subprocess.Popen(
[
"umap",
"run_websocket_server",
],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
time.sleep(2)
# Ensure it started properly before yielding
assert not ds_proc.poll(), ds_proc.stdout.read().decode("utf-8")
yield ds_proc
# Shut it down at the end of the pytest session
ds_proc.terminate()
@pytest.fixture(scope="function")
def channels_live_server(request, settings):
server = ChannelsLiveServerTestCase()
server.serve_static = False
server._pre_setup()
settings.WEBSOCKET_FRONT_URI = f"{server.live_server_ws_url}/ws/sync/{{id}}/"
def asgi_live_server(request, settings):
request.getfixturevalue("transactional_db")
server = DaphneProcess("localhost", lambda: application)
server.start()
server.ready.wait()
port = server.port.value
settings.WEBSOCKET_FRONT_URI = f"ws://localhost:{port}/ws/sync/{{id}}/"
server.url = f"http://localhost:{port}"
yield server
server._post_teardown()
server.terminate()
server.join()

View file

@ -12,7 +12,7 @@ DATALAYER_UPDATE = re.compile(r".*/datalayer/update/.*")
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_markers(
new_page, live_server, channels_live_server, tilelayer
new_page, live_server, asgi_live_server, tilelayer
):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
@ -80,7 +80,7 @@ def test_websocket_connection_can_sync_markers(
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_polygons(
context, live_server, channels_live_server, tilelayer
context, live_server, asgi_live_server, tilelayer
):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
@ -164,7 +164,7 @@ def test_websocket_connection_can_sync_polygons(
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_map_properties(
new_page, live_server, channels_live_server, tilelayer
new_page, live_server, asgi_live_server, tilelayer
):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
@ -198,7 +198,7 @@ def test_websocket_connection_can_sync_map_properties(
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_datalayer_properties(
new_page, live_server, channels_live_server, tilelayer
new_page, live_server, asgi_live_server, tilelayer
):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
@ -227,7 +227,7 @@ def test_websocket_connection_can_sync_datalayer_properties(
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_cloned_polygons(
context, live_server, channels_live_server, tilelayer
context, live_server, asgi_live_server, tilelayer
):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
@ -290,7 +290,7 @@ def test_websocket_connection_can_sync_cloned_polygons(
@pytest.mark.xdist_group(name="websockets")
def test_websocket_connection_can_sync_late_joining_peer(
new_page, live_server, channels_live_server, tilelayer
new_page, live_server, asgi_live_server, tilelayer
):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
@ -351,7 +351,7 @@ def test_websocket_connection_can_sync_late_joining_peer(
@pytest.mark.xdist_group(name="websockets")
def test_should_sync_datalayers(new_page, live_server, channels_live_server, tilelayer):
def test_should_sync_datalayers(new_page, live_server, asgi_live_server, tilelayer):
map = MapFactory(name="sync", edit_status=Map.ANONYMOUS)
map.settings["properties"]["syncEnabled"] = True
map.save()
@ -490,7 +490,7 @@ def test_should_sync_datalayers_delete(
@pytest.mark.xdist_group(name="websockets")
def test_create_and_sync_map(
new_page, live_server, channels_live_server, tilelayer, login, user
new_page, live_server, asgi_live_server, tilelayer, login, user
):
# Create a syncable map with peerA
peerA = login(user, prefix="Page A")