From a1817943691dc3443f481c75997d03608b295898 Mon Sep 17 00:00:00 2001 From: Nomads_Reach <144523850+NomadsReach@users.noreply.github.com> Date: Sun, 16 Aug 2026 00:34:34 -0400 Subject: [PATCH] Test GNS snapshot envelope --- server/tests/test_gns_snapshot_envelope.py | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 server/tests/test_gns_snapshot_envelope.py diff --git a/server/tests/test_gns_snapshot_envelope.py b/server/tests/test_gns_snapshot_envelope.py new file mode 100644 index 0000000..3108e4a --- /dev/null +++ b/server/tests/test_gns_snapshot_envelope.py @@ -0,0 +1,64 @@ +import pytest + +from gns_snapshot_envelope import ( + HEADER_SIZE, + MAGIC, + SnapshotEnvelopeError, + decode_snapshot, + encode_snapshot, +) +from packet_codec import MAX_MESSAGE_BYTES + + +def test_transform_and_npc_snapshots_round_trip_with_sequence(): + transform = encode_snapshot("transform", b'{"type":"transform","x":1}', 7) + decoded_transform = decode_snapshot(transform) + assert decoded_transform is not None + assert decoded_transform.packet_type == "transform" + assert decoded_transform.sequence == 7 + assert decoded_transform.payload == b'{"type":"transform","x":1}' + + npc = encode_snapshot("npcState", b'{"type":"npcState","npcs":[]}', 9) + decoded_npc = decode_snapshot(npc) + assert decoded_npc is not None + assert decoded_npc.packet_type == "npcState" + assert decoded_npc.sequence == 9 + + +def test_reliable_json_is_not_misidentified_as_snapshot_envelope(): + assert decode_snapshot(b'{"type":"playerState"}') is None + + +def test_snapshot_envelope_rejects_invalid_family_sequence_and_size(): + with pytest.raises(SnapshotEnvelopeError): + encode_snapshot("playerState", b"{}", 1) + with pytest.raises(SnapshotEnvelopeError): + encode_snapshot("transform", b"{}", 0) + with pytest.raises(SnapshotEnvelopeError): + encode_snapshot("transform", b"x" * MAX_MESSAGE_BYTES, 1) + + +def test_snapshot_decoder_rejects_truncated_or_corrupt_headers(): + with pytest.raises(SnapshotEnvelopeError): + decode_snapshot(MAGIC) + + valid = bytearray(encode_snapshot("transform", b"{}", 1)) + valid[4] = 99 + with pytest.raises(SnapshotEnvelopeError): + decode_snapshot(valid) + + valid = bytearray(encode_snapshot("transform", b"{}", 1)) + valid[5] = 99 + with pytest.raises(SnapshotEnvelopeError): + decode_snapshot(valid) + + valid = bytearray(encode_snapshot("transform", b"{}", 1)) + valid[6:8] = b"\x00\x01" + with pytest.raises(SnapshotEnvelopeError): + decode_snapshot(valid) + + +def test_snapshot_header_leaves_payload_under_native_64k_cap(): + payload = b"x" * (MAX_MESSAGE_BYTES - HEADER_SIZE) + message = encode_snapshot("transform", payload, 0xFFFFFFFF) + assert len(message) == MAX_MESSAGE_BYTES