Files
2024-12-26 17:40:52 -06:00

170 lines
3.8 KiB
Go

package ddp
import (
"fmt"
"reflect"
"testing"
)
func TestPacketDecoding(t *testing.T) {
testCases := []struct {
description string
bytes []byte
expected DDPPacket
}{
{
description: "simple DDP message",
bytes: []byte{0x40, 0x0f, 0x92, 0x01, 0x45, 0x67, 0x89, 0x10, 0x10, 0x11},
expected: DDPPacket{
Header: DDPHeader{
Flags: DDPHeaderFlags{
Version: 1,
Timecode: false,
Storage: false,
Reply: false,
Query: false,
Push: false,
},
SequenceNumber: 15,
DataType: DDPDataType{
Standard: false,
Type: 2,
BitsPerPixel: 4,
},
SourceOrDestinationID: 1,
DataOffset: 1164413200,
DataLength: 4113,
},
Data: []byte{},
},
},
{
description: "DDP message with timecode",
bytes: []byte{0x50, 0x0f, 0x92, 0x01, 0x45, 0x67, 0x89, 0x10, 0x10, 0x11, 0x10, 0x11, 0x11, 0x10},
expected: DDPPacket{
Header: DDPHeader{
Flags: DDPHeaderFlags{
Version: 1,
Timecode: true,
Storage: false,
Reply: false,
Query: false,
Push: false,
},
SequenceNumber: 15,
DataType: DDPDataType{
Standard: false,
Type: 2,
BitsPerPixel: 4,
},
SourceOrDestinationID: 1,
DataOffset: 1164413200,
DataLength: 4113,
Timecode: &DDPTimecode{
Seconds: 4113,
FractionalSeconds: 4368,
},
},
Data: []byte{},
},
},
}
for _, testCase := range testCases {
actual, err := Decode(testCase.bytes)
if err != nil {
t.Errorf("Test '%s' failed to decode chunk properly", testCase.description)
fmt.Println(err)
}
if !reflect.DeepEqual(actual, testCase.expected) {
t.Errorf("Test '%s' failed to decode chunk properly", testCase.description)
fmt.Printf("expected: %+v\n", testCase.expected)
fmt.Printf("actual: %+v\n", actual)
}
}
}
func TestPacketEncoding(t *testing.T) {
testCases := []struct {
description string
expected []byte
packet DDPPacket
}{
{
description: "simple DDP message",
expected: []byte{0x40, 0x0f, 0x92, 0x01, 0x45, 0x67, 0x89, 0x10, 0x10, 0x11},
packet: DDPPacket{
Header: DDPHeader{
Flags: DDPHeaderFlags{
Version: 1,
Timecode: false,
Storage: false,
Reply: false,
Query: false,
Push: false,
},
SequenceNumber: 15,
DataType: DDPDataType{
Standard: false,
Type: 2,
BitsPerPixel: 4,
},
SourceOrDestinationID: 1,
DataOffset: 1164413200,
DataLength: 4113,
},
Data: []byte{},
},
},
{
description: "DDP message with timecode",
expected: []byte{0x50, 0x0f, 0x92, 0x01, 0x45, 0x67, 0x89, 0x10, 0x10, 0x11, 0x10, 0x11, 0x11, 0x10},
packet: DDPPacket{
Header: DDPHeader{
Flags: DDPHeaderFlags{
Version: 1,
Timecode: true,
Storage: false,
Reply: false,
Query: false,
Push: false,
},
SequenceNumber: 15,
DataType: DDPDataType{
Standard: false,
Type: 2,
BitsPerPixel: 4,
},
SourceOrDestinationID: 1,
DataOffset: 1164413200,
DataLength: 4113,
Timecode: &DDPTimecode{
Seconds: 4113,
FractionalSeconds: 4368,
},
},
Data: []byte{},
},
},
}
for _, testCase := range testCases {
actual, err := Encode(testCase.packet)
if err != nil {
t.Errorf("Test '%s' failed to decode chunk properly", testCase.description)
fmt.Println(err)
}
if !reflect.DeepEqual(actual, testCase.expected) {
t.Errorf("Test '%s' failed to decode chunk properly", testCase.description)
fmt.Printf("expected: %+v\n", testCase.expected)
fmt.Printf("actual: %+v\n", actual)
}
}
}