rtpdump_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
  2. // SPDX-License-Identifier: MIT
  3. package rtpdump
  4. import (
  5. "errors"
  6. "net"
  7. "reflect"
  8. "testing"
  9. "time"
  10. )
  11. func 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. var hdr Header
  35. if err := hdr.Unmarshal(d); err != nil {
  36. t.Fatal(err)
  37. }
  38. if got, want := hdr, test.Header; !reflect.DeepEqual(got, want) {
  39. t.Fatalf("Unmarshal(%v.Marshal()) = %v, want identical", got, want)
  40. }
  41. }
  42. }
  43. func TestMarshalHeader(t *testing.T) {
  44. for _, test := range []struct {
  45. Name string
  46. Header Header
  47. Want []byte
  48. WantErr error
  49. }{
  50. {
  51. Name: "nil source",
  52. Header: Header{
  53. Start: time.Unix(0, 0).UTC(),
  54. Source: nil,
  55. Port: 0,
  56. },
  57. Want: []byte{
  58. 0x00, 0x00, 0x00, 0x00,
  59. 0x00, 0x00, 0x00, 0x00,
  60. 0x00, 0x00, 0x00, 0x00,
  61. 0x00, 0x00, 0x00, 0x00,
  62. },
  63. },
  64. } {
  65. data, err := test.Header.Marshal()
  66. if got, want := err, test.WantErr; !errors.Is(got, want) {
  67. t.Fatalf("Marshal(%q) err=%v, want %v", test.Name, got, want)
  68. }
  69. if got, want := data, test.Want; !reflect.DeepEqual(got, want) {
  70. t.Fatalf("Marshal(%q) = %v, want %v", test.Name, got, want)
  71. }
  72. }
  73. }
  74. func TestPacketRoundTrip(t *testing.T) {
  75. for _, test := range []struct {
  76. Packet Packet
  77. }{
  78. {
  79. Packet: Packet{
  80. Offset: 0,
  81. IsRTCP: false,
  82. Payload: []byte{0},
  83. },
  84. },
  85. {
  86. Packet: Packet{
  87. Offset: 0,
  88. IsRTCP: true,
  89. Payload: []byte{0},
  90. },
  91. },
  92. {
  93. Packet: Packet{
  94. Offset: 123 * time.Millisecond,
  95. IsRTCP: false,
  96. Payload: []byte{1, 2, 3, 4},
  97. },
  98. },
  99. } {
  100. d, err := test.Packet.Marshal()
  101. if err != nil {
  102. t.Fatal(err)
  103. }
  104. var pkt Packet
  105. if err := pkt.Unmarshal(d); err != nil {
  106. t.Fatal(err)
  107. }
  108. if got, want := pkt, test.Packet; !reflect.DeepEqual(got, want) {
  109. t.Fatalf("Unmarshal(%v.Marshal()) = %v, want identical", got, want)
  110. }
  111. }
  112. }