feat: add UDP NAT rendezvous

This commit is contained in:
Alexander Sellite 2026-08-10 19:49:47 -04:00
parent 6a7c7a676d
commit 804e19c51a
7 changed files with 370 additions and 27 deletions

View file

@ -35,7 +35,12 @@ class RoomRegistryTests(unittest.TestCase):
self.registry = RoomRegistry(ttl_seconds=30.0, clock=self.clock)
def test_create_list_update_and_delete(self) -> None:
room, token = self.registry.create("203.0.113.10", VALID_ROOM)
room, token, verification_token = self.registry.create(
"203.0.113.10", VALID_ROOM
)
room = self.registry.verify_endpoint(
room.room_id, verification_token, "203.0.113.10", 7777
)
self.assertEqual(room.address, "203.0.113.10")
self.assertEqual(self.registry.list_rooms(), [room])
@ -50,20 +55,27 @@ class RoomRegistryTests(unittest.TestCase):
self.assertEqual(self.registry.list_rooms(), [])
def test_empty_dedicated_room_is_valid(self) -> None:
room, _token = self.registry.create(
room, _token, verification_token = self.registry.create(
"203.0.113.10", dict(VALID_ROOM, current_players=0)
)
room = self.registry.verify_endpoint(
room.room_id, verification_token, "203.0.113.10", 7777
)
self.assertEqual(room.current_players, 0)
def test_expired_room_is_removed(self) -> None:
room, token = self.registry.create("203.0.113.10", VALID_ROOM)
room, token, _verification_token = self.registry.create(
"203.0.113.10", VALID_ROOM
)
self.clock.now += 30.0
self.assertEqual(self.registry.list_rooms(), [])
with self.assertRaises(RoomNotFoundError):
self.registry.update(room.room_id, token, room.address, VALID_ROOM)
def test_wrong_token_cannot_mutate_room(self) -> None:
room, _token = self.registry.create("203.0.113.10", VALID_ROOM)
room, _token, _verification_token = self.registry.create(
"203.0.113.10", VALID_ROOM
)
with self.assertRaises(LeaseAuthorizationError):
self.registry.delete(room.room_id, "wrong")
@ -74,7 +86,12 @@ class RoomRegistryTests(unittest.TestCase):
self.registry.create("203.0.113.10", dict(VALID_ROOM, room_name="bad\nname"))
def test_filters_use_authored_versions(self) -> None:
expected, _token = self.registry.create("203.0.113.10", VALID_ROOM)
expected, _token, verification_token = self.registry.create(
"203.0.113.10", VALID_ROOM
)
expected = self.registry.verify_endpoint(
expected.room_id, verification_token, "203.0.113.10", 7777
)
self.registry.create(
"203.0.113.11",
dict(VALID_ROOM, room_name="Older Room", protocol_version=2),