Files
webrtc/pkg/rtcp/receiver_report_test.go
Max Hawkins 3fee11e486 Add rtcp sr and rr packet types
Relates to #119
2018-09-20 21:19:15 -07:00

88 lines
1.7 KiB
Go

package rtcp
import (
"reflect"
"testing"
)
func TestReceiverReportUnmarshalNil(t *testing.T) {
var rr ReceiverReport
err := rr.Unmarshal(nil)
if got, want := err, errPacketTooShort; got != want {
t.Fatalf("unmarshal nil rr: err = %v, want %v", got, want)
}
}
func TestReceiverReportRoundTrip(t *testing.T) {
for _, test := range []struct {
Name string
Report ReceiverReport
WantError error
}{
{
Name: "valid",
Report: ReceiverReport{
SSRC: 1,
Reports: []ReceptionReport{
{
SSRC: 2,
FractionLost: 2,
TotalLost: 3,
LastSeq: 4,
Jitter: 5,
LastSR: 6,
Delay: 7,
},
{
SSRC: 0,
},
},
},
},
{
Name: "also valid",
Report: ReceiverReport{
SSRC: 2,
Reports: []ReceptionReport{
{
SSRC: 999,
FractionLost: 30,
TotalLost: 12345,
LastSeq: 99,
Jitter: 22,
LastSR: 92,
Delay: 46,
},
},
},
},
{
Name: "totallost overflow",
Report: ReceiverReport{
SSRC: 1,
Reports: []ReceptionReport{{
TotalLost: 1 << 25,
}},
},
WantError: errInvalidTotalLost,
},
} {
data, err := test.Report.Marshal()
if got, want := err, test.WantError; got != want {
t.Fatalf("Marshal %q: err = %v, want %v", test.Name, got, want)
}
if err != nil {
continue
}
var decoded ReceiverReport
if err := decoded.Unmarshal(data); err != nil {
t.Fatalf("Unmarshal %q: %v", test.Name, err)
}
if got, want := decoded, test.Report; !reflect.DeepEqual(got, want) {
t.Fatalf("%q rr round trip: got %#v, want %#v", test.Name, got, want)
}
}
}