Merge pull request #11 from Efk3/feature/achievement-sniffer

feat: add achievement export
This commit is contained in:
Golumpa 2026-08-19 11:07:12 +01:00 • committed by GitHub
commit 569299dbdd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 233 additions and 7 deletions

29
tests/test_achievement.py Normal file
View file

@ -0,0 +1,29 @@
import struct
import unittest
from nte_history_exporter.decoder.achievement import (
ACHIEVEMENT_RECORD_MARKER,
extract_achievement_ids,
reassemble_tcp_segments,
)
class AchievementPacketTests(unittest.TestCase):
def test_extracts_only_completed_achievements(self):
header = ACHIEVEMENT_RECORD_MARKER + b"\0" * 4 + struct.pack("<I", 2) + b"\0" * 12
completed = b"\x0a\0\0\0Battle_30\0" + b"\0" * 8 + struct.pack("<Q", 1)
incomplete = b"\x13\0\0\0Playstation_035\0" + b"\0" * 16
decoded = header + completed + incomplete
extension = len(decoded) - 15
compressed = b"\xf0" + bytes([extension]) + decoded
frame = struct.pack("<I", 0) + b"\0" * 8 + struct.pack("<I", len(compressed)) + compressed
stream = struct.pack("<I", len(frame)) + frame
self.assertEqual(extract_achievement_ids(stream), ["Battle_30"])
self.assertEqual(extract_achievement_ids(b"\x01\0\0\0\0"), [])
def test_reassembles_tcp_data(self):
self.assertEqual(
reassemble_tcp_segments([(104, b"bar"), (100, b"foobar"), (100, b"foobar")]),
b"foobarr",
)