Sync from GitHub main #1

Open
nomad wants to merge 145 commits from sync/from-github into main
Showing only changes of commit 94487f57ca - Show all commits
+80
View File
@@ -0,0 +1,80 @@
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