From d53fe09bfcb95ee81a6729d39d47acdb13347cce Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Fri, 17 Oct 2025 12:35:31 -0500 Subject: [PATCH] add tests for encoding info related chunks --- .../encoders/info_system_name_chunk_test.go | 38 +++++++++++ internal/encoders/info_tracker_chunk_test.go | 52 ++++++++++++++ .../encoders/info_tracker_list_chunk_test.go | 67 +++++++++++++++++++ .../encoders/info_tracker_name_chunk_test.go | 38 +++++++++++ 4 files changed, 195 insertions(+) create mode 100644 internal/encoders/info_system_name_chunk_test.go create mode 100644 internal/encoders/info_tracker_chunk_test.go create mode 100644 internal/encoders/info_tracker_list_chunk_test.go create mode 100644 internal/encoders/info_tracker_name_chunk_test.go diff --git a/internal/encoders/info_system_name_chunk_test.go b/internal/encoders/info_system_name_chunk_test.go new file mode 100644 index 0000000..26414db --- /dev/null +++ b/internal/encoders/info_system_name_chunk_test.go @@ -0,0 +1,38 @@ +package encoders + +import ( + "fmt" + "reflect" + "testing" + + "github.com/jwetzell/psn-go/internal/decoders" +) + +func TestInfoSystemNameChunkEncoding(t *testing.T) { + testCases := []struct { + description string + expected []byte + data decoders.InfoSystemNameChunkData + }{ + { + description: "InfoSystemNameChunk", + expected: []byte{ + 1, 0, 10, 0, 80, 83, 78, 32, 83, 101, 114, 118, 101, 114, + }, + data: decoders.InfoSystemNameChunkData{ + SystemName: "PSN Server", + }, + }, + } + + for _, testCase := range testCases { + + actual := EncodeInfoSystemNameChunk(testCase.data.SystemName) + + if !reflect.DeepEqual(actual, testCase.expected) { + t.Errorf("Test '%s' failed to encode chunk properly", testCase.description) + fmt.Printf("expected: %v\n", testCase.expected) + fmt.Printf("actual: %v\n", actual) + } + } +} diff --git a/internal/encoders/info_tracker_chunk_test.go b/internal/encoders/info_tracker_chunk_test.go new file mode 100644 index 0000000..74b4d0e --- /dev/null +++ b/internal/encoders/info_tracker_chunk_test.go @@ -0,0 +1,52 @@ +package encoders + +import ( + "fmt" + "reflect" + "testing" + + "github.com/jwetzell/psn-go/internal/decoders" +) + +func TestInfoTrackerChunkEncoding(t *testing.T) { + testCases := []struct { + description string + expected []byte + chunk decoders.InfoTrackerChunk + }{ + { + description: "InfoTrackerChunk", + expected: []byte{ + 1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49, + }, + chunk: decoders.InfoTrackerChunk{ + Chunk: decoders.Chunk{ + ChunkData: []byte{0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49}, + Header: decoders.ChunkHeader{DataLen: 13, Id: 1, HasSubchunks: true}, + }, + Data: decoders.InfoTrackerChunkData{ + TrackerName: &decoders.InfoTrackerNameChunk{ + Chunk: decoders.Chunk{ + ChunkData: []byte{84, 114, 97, 99, 107, 101, 114, 32, 49}, + Header: decoders.ChunkHeader{DataLen: 9, Id: 0, HasSubchunks: false}, + }, + Data: decoders.InfoTrackerNameChunkData{ + TrackerName: "Tracker 1", + }, + }, + }, + }, + }, + } + + for _, testCase := range testCases { + + actual := EncodeInfoTrackerChunk(testCase.chunk.Chunk.Header.Id, EncodeInfoTrackerNameChunk(testCase.chunk.Data.TrackerName.Data.TrackerName)) + + if !reflect.DeepEqual(actual, testCase.expected) { + t.Errorf("Test '%s' failed to encode chunk properly", testCase.description) + fmt.Printf("expected: %v\n", testCase.expected) + fmt.Printf("actual: %v\n", actual) + } + } +} diff --git a/internal/encoders/info_tracker_list_chunk_test.go b/internal/encoders/info_tracker_list_chunk_test.go new file mode 100644 index 0000000..67ecc4d --- /dev/null +++ b/internal/encoders/info_tracker_list_chunk_test.go @@ -0,0 +1,67 @@ +package encoders + +import ( + "fmt" + "reflect" + "testing" + + "github.com/jwetzell/psn-go/internal/decoders" +) + +func TestInfoTrackerListChunkEncoding(t *testing.T) { + testCases := []struct { + description string + expected []byte + chunk decoders.InfoTrackerListChunk + }{ + { + description: "InfoTrackerListChunk", + expected: []byte{ + 2, 0, 17, 128, 1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49, + }, + chunk: decoders.InfoTrackerListChunk{ + Chunk: decoders.Chunk{ + ChunkData: []byte{1, 0, 13, 128, 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49}, + Header: decoders.ChunkHeader{DataLen: 17, Id: 2, HasSubchunks: true}, + }, + Data: decoders.InfoTrackerListChunkData{ + Trackers: []decoders.InfoTrackerChunk{ + { + Chunk: decoders.Chunk{ + ChunkData: []byte{0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49}, + Header: decoders.ChunkHeader{DataLen: 13, Id: 1, HasSubchunks: true}, + }, + Data: decoders.InfoTrackerChunkData{ + TrackerName: &decoders.InfoTrackerNameChunk{ + Chunk: decoders.Chunk{ + ChunkData: []byte{84, 114, 97, 99, 107, 101, 114, 32, 49}, + Header: decoders.ChunkHeader{DataLen: 9, Id: 0, HasSubchunks: false}, + }, + Data: decoders.InfoTrackerNameChunkData{ + TrackerName: "Tracker 1", + }, + }, + }, + }, + }, + }, + }, + }, + } + + for _, testCase := range testCases { + + trackerChunks := [][]byte{} + for _, tracker := range testCase.chunk.Data.Trackers { + trackerChunks = append(trackerChunks, EncodeInfoTrackerChunk(tracker.Chunk.Header.Id, EncodeInfoTrackerNameChunk(tracker.Data.TrackerName.Data.TrackerName))) + } + + actual := EncodeInfoTrackerListChunk(trackerChunks) + + if !reflect.DeepEqual(actual, testCase.expected) { + t.Errorf("Test '%s' failed to encode chunk properly", testCase.description) + fmt.Printf("expected: %v\n", testCase.expected) + fmt.Printf("actual: %v\n", actual) + } + } +} diff --git a/internal/encoders/info_tracker_name_chunk_test.go b/internal/encoders/info_tracker_name_chunk_test.go new file mode 100644 index 0000000..8a6c8bb --- /dev/null +++ b/internal/encoders/info_tracker_name_chunk_test.go @@ -0,0 +1,38 @@ +package encoders + +import ( + "fmt" + "reflect" + "testing" + + "github.com/jwetzell/psn-go/internal/decoders" +) + +func TestInfoTrackerNameChunkEncoding(t *testing.T) { + testCases := []struct { + description string + expected []byte + chunk decoders.InfoTrackerNameChunkData + }{ + { + description: "InfoTrackerNameChunk", + expected: []byte{ + 0, 0, 9, 0, 84, 114, 97, 99, 107, 101, 114, 32, 49, + }, + chunk: decoders.InfoTrackerNameChunkData{ + TrackerName: "Tracker 1", + }, + }, + } + + for _, testCase := range testCases { + + actual := EncodeInfoTrackerNameChunk(testCase.chunk.TrackerName) + + if !reflect.DeepEqual(actual, testCase.expected) { + t.Errorf("Test '%s' failed to encode chunk properly", testCase.description) + fmt.Printf("expected: %v\n", testCase.expected) + fmt.Printf("actual: %v\n", actual) + } + } +}