1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
package rtpdump
import (
"bytes"
"errors"
"io"
"net"
"reflect"
"testing"
"time"
)
func TestWriter(t *testing.T) {
buf := bytes.NewBuffer(nil)
writer, err := NewWriter(buf, Header{
Start: time.Unix(9, 0),
Source: net.IPv4(2, 2, 2, 2),
Port: 2222,
})
if err != nil {
t.Fatal(err)
}
if err := writer.WritePacket(Packet{
Offset: time.Millisecond,
IsRTCP: false,
Payload: []byte{9},
}); err != nil {
t.Fatal(err)
}
expected := append(
[]byte("#!rtpplay1.0 2.2.2.2/2222\n"),
// header
0x00, 0x00, 0x00, 0x09,
0x00, 0x00, 0x00, 0x00,
0x02, 0x02, 0x02, 0x02,
0x08, 0xae, 0x00, 0x00,
// packet header
0x00, 0x09, 0x00, 0x01,
0x00, 0x00, 0x00, 0x01,
0x09,
)
if got, want := buf.Bytes(), expected; !reflect.DeepEqual(got, want) {
t.Fatalf("wrote %v, want %v", got, want)
}
}
func TestRoundTrip(t *testing.T) {
buf := bytes.NewBuffer(nil)
packets := []Packet{
{
Offset: time.Millisecond,
IsRTCP: false,
Payload: []byte{9},
},
{
Offset: 999 * time.Millisecond,
IsRTCP: true,
Payload: []byte{9},
},
}
hdr := Header{
Start: time.Unix(9, 0).UTC(),
Source: net.IPv4(2, 2, 2, 2),
Port: 2222,
}
writer, err := NewWriter(buf, hdr)
if err != nil {
t.Fatal(err)
}
for _, pkt := range packets {
if err = writer.WritePacket(pkt); err != nil {
t.Fatal(err)
}
}
reader, hdr2, err := NewReader(buf)
if err != nil {
t.Fatal(err)
}
if got, want := hdr2, hdr; !reflect.DeepEqual(got, want) {
t.Fatalf("round trip: header=%v, want %v", got, want)
}
var packets2 []Packet
for {
pkt, err := reader.Next()
if errors.Is(err, io.EOF) {
break
}
if err != nil {
t.Fatal(err)
}
packets2 = append(packets2, pkt)
}
if got, want := packets2, packets; !reflect.DeepEqual(got, want) {
t.Fatalf("round trip: packets=%v, want %v", got, want)
}
}
|