from __future__ import annotations import socket import time import pytest from client_session import ClientSession from packet_codec import EncodedPacket from transport_policy import Delivery from transport_server import TransportAwareFalloutTogetherServer class MessageConnection: def __init__(self): self.messages: list[EncodedPacket] = [] def send_encoded(self, encoded: EncodedPacket) -> None: self.messages.append(encoded) def fileno(self) -> int: return 1 def close(self) -> None: pass def make_client(connection) -> ClientSession: return ClientSession( connection=connection, address=("127.0.0.1", 50000), player_id=1, connected_at=time.time(), ) def test_transport_aware_server_preserves_tcp_wire_format(): server = TransportAwareFalloutTogetherServer(host="127.0.0.1", port=0) reader, writer = socket.socketpair() try: client = make_client(writer) server._send_packet(client, {"type": "playerState", "characterName": "Nomad"}) assert reader.recv(4096) == b'{"type":"playerState","characterName":"Nomad"}\n' assert client.packets_sent == 1 assert server.get_stats()["packetsSent"] == 1 finally: reader.close() writer.close() def test_transport_aware_server_sends_raw_message_and_delivery_metadata_to_gns_style_connection(): server = TransportAwareFalloutTogetherServer(host="127.0.0.1", port=0) connection = MessageConnection() client = make_client(connection) server._send_packet(client, {"type": "transform", "x": 1.0}, broadcast=True) server._send_packet(client, {"type": "playerState", "characterName": "Nomad"}) assert len(connection.messages) == 2 transform, player_state = connection.messages assert transform.payload == b'{"type":"transform","x":1.0}' assert transform.delivery is Delivery.UNRELIABLE_SEQUENCED assert not transform.payload.endswith(b"\n") assert player_state.delivery is Delivery.RELIABLE_ORDERED assert player_state.payload == b'{"type":"playerState","characterName":"Nomad"}' assert client.packets_sent == 2 assert client.packets_broadcast == 1 assert server.get_stats()["packetsSent"] == 2 assert server.get_stats()["packetsBroadcast"] == 1 def test_transport_aware_server_rejects_nonfinite_json_before_transport(): server = TransportAwareFalloutTogetherServer(host="127.0.0.1", port=0) connection = MessageConnection() client = make_client(connection) with pytest.raises(ValueError): server._send_packet(client, {"type": "transform", "x": float("nan")}) assert connection.messages == [] assert server.get_stats()["packetsSent"] == 0