Sync from GitHub main #1
@@ -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
|
||||
Reference in New Issue
Block a user