1package rtpdump 2 3import ( 4 "errors" 5 "net" 6 "reflect" 7 "testing" 8 "time" 9) 10 11func TestHeaderRoundTrip(t *testing.T) { 12 for _, test := range []struct { 13 Header Header 14 }{ 15 { 16 Header: Header{ 17 Start: time.Unix(0, 0).UTC(), 18 Source: net.IPv4(0, 0, 0, 0), 19 Port: 0, 20 }, 21 }, 22 { 23 Header: Header{ 24 Start: time.Date(2019, 3, 25, 1, 1, 1, 0, time.UTC), 25 Source: net.IPv4(1, 2, 3, 4), 26 Port: 8080, 27 }, 28 }, 29 } { 30 d, err := test.Header.Marshal() 31 if err != nil { 32 t.Fatal(err) 33 } 34 35 var hdr Header 36 if err := hdr.Unmarshal(d); err != nil { 37 t.Fatal(err) 38 } 39 40 if got, want := hdr, test.Header; !reflect.DeepEqual(got, want) { 41 t.Fatalf("Unmarshal(%v.Marshal()) = %v, want identical", got, want) 42 } 43 } 44} 45 46func TestMarshalHeader(t *testing.T) { 47 for _, test := range []struct { 48 Name string 49 Header Header 50 Want []byte 51 WantErr error 52 }{ 53 { 54 Name: "nil source", 55 Header: Header{ 56 Start: time.Unix(0, 0).UTC(), 57 Source: nil, 58 Port: 0, 59 }, 60 Want: []byte{ 61 0x00, 0x00, 0x00, 0x00, 62 0x00, 0x00, 0x00, 0x00, 63 0x00, 0x00, 0x00, 0x00, 64 0x00, 0x00, 0x00, 0x00, 65 }, 66 }, 67 } { 68 data, err := test.Header.Marshal() 69 if got, want := err, test.WantErr; !errors.Is(got, want) { 70 t.Fatalf("Marshal(%q) err=%v, want %v", test.Name, got, want) 71 } 72 73 if got, want := data, test.Want; !reflect.DeepEqual(got, want) { 74 t.Fatalf("Marshal(%q) = %v, want %v", test.Name, got, want) 75 } 76 } 77} 78 79func TestPacketRoundTrip(t *testing.T) { 80 for _, test := range []struct { 81 Packet Packet 82 }{ 83 { 84 Packet: Packet{ 85 Offset: 0, 86 IsRTCP: false, 87 Payload: []byte{0}, 88 }, 89 }, 90 { 91 Packet: Packet{ 92 Offset: 0, 93 IsRTCP: true, 94 Payload: []byte{0}, 95 }, 96 }, 97 { 98 Packet: Packet{ 99 Offset: 123 * time.Millisecond, 100 IsRTCP: false, 101 Payload: []byte{1, 2, 3, 4}, 102 }, 103 }, 104 } { 105 d, err := test.Packet.Marshal() 106 if err != nil { 107 t.Fatal(err) 108 } 109 110 var pkt Packet 111 if err := pkt.Unmarshal(d); err != nil { 112 t.Fatal(err) 113 } 114 115 if got, want := pkt, test.Packet; !reflect.DeepEqual(got, want) { 116 t.Fatalf("Unmarshal(%v.Marshal()) = %v, want identical", got, want) 117 } 118 } 119} 120