relay preparing for public internet

This commit is contained in:
Dobromir Popov
2026-07-09 08:01:22 +02:00
parent 9ec4ca9ce1
commit 6ba8546c55
8 changed files with 344 additions and 26 deletions

View File

@@ -451,6 +451,8 @@ def test_tracker_derives_relay_url_from_public_self_url():
with urllib.request.urlopen(f"http://127.0.0.1:{port}/v1/network/map", timeout=5) as resp:
body = _json.loads(resp.read())
assert body["relay_url"] == "wss://ai.neuron.d-popov.com/ws"
assert body["relay"]["mode"] == "external"
assert body["relay"]["url"] == "wss://ai.neuron.d-popov.com/ws"
finally:
tracker.stop()
@@ -501,10 +503,46 @@ def test_tracker_network_map_exposes_relay_and_registered_peer():
tracker.stop()
assert body["relay_url"] == "wss://ai.neuron.d-popov.com/ws"
assert body["relay"]["mode"] == "external"
assert body["nodes"][0]["relay_addr"] == "wss://ai.neuron.d-popov.com/rpc/peer123"
assert body["nodes"][0]["peer_id"] == "peer123"
def test_tracker_can_embed_relay_server_and_advertise_it():
import json as _json
import urllib.request
import websockets.sync.client as wsc # type: ignore[import]
from meshnet_tracker.server import TrackerServer
tracker = TrackerServer(
host="127.0.0.1",
port=0,
embedded_relay=True,
embedded_relay_host="127.0.0.1",
embedded_relay_port=0,
)
port = tracker.start()
try:
with urllib.request.urlopen(f"http://127.0.0.1:{port}/v1/network/map", timeout=5) as resp:
body = _json.loads(resp.read())
assert body["relay"]["mode"] == "embedded"
assert body["relay_url"].startswith("ws://127.0.0.1:")
assert body["relay_url"].endswith("/ws")
with wsc.connect(body["relay_url"], open_timeout=5) as ws:
ws.send(_json.dumps({
"topic": "peer-register",
"version": 1,
"from_peer": "embedded-peer",
"msg_id": "embedded-reg-1",
"payload": {"peer_id": "embedded-peer", "addr": ""},
}))
peer_list = _json.loads(ws.recv(timeout=5))
assert peer_list["topic"] == "peer-list"
finally:
tracker.stop()
# ---------------------------------------------------------------------------
# mDNS (no-op without zeroconf installed)
# ---------------------------------------------------------------------------