package rtpav1 import ( "testing" "github.com/bluenviron/mediacommon/pkg/codecs/av1" "github.com/pion/rtp" "github.com/stretchr/testify/require" ) func TestDecode(t *testing.T) { for _, ca := range cases { t.Run(ca.name, func(t *testing.T) { d := &Decoder{} err := d.Init() require.NoError(t, err) var obus [][]byte for _, pkt := range ca.pkts { addOBUs, _, err := d.DecodeUntilMarker(pkt) if err == ErrMorePacketsNeeded { continue } require.NoError(t, err) obus = append(obus, addOBUs...) } require.Equal(t, ca.obus, obus) }) } } func TestDecoderErrorLimit(t *testing.T) { d := &Decoder{} err := d.Init() require.NoError(t, err) for i := 0; i <= av1.MaxOBUsPerTemporalUnit; i++ { _, _, err = d.DecodeUntilMarker(&rtp.Packet{ Header: rtp.Header{ Version: 2, Marker: false, PayloadType: 96, SequenceNumber: 17645, Timestamp: 2289527317, SSRC: 0x9dbb7812, }, Payload: []byte{1, 2, 3, 4}, }) } require.EqualError(t, err, "OBU count exceeds maximum allowed (10)") } func FuzzDecoder(f *testing.F) { f.Fuzz(func(t *testing.T, a []byte, am bool, b []byte, bm bool) { d := &Decoder{} d.Init() //nolint:errcheck d.DecodeUntilMarker(&rtp.Packet{ //nolint:errcheck Header: rtp.Header{ Version: 2, Marker: am, PayloadType: 96, SequenceNumber: 17645, Timestamp: 2289527317, SSRC: 0x9dbb7812, }, Payload: a, }) d.DecodeUntilMarker(&rtp.Packet{ //nolint:errcheck Header: rtp.Header{ Version: 2, Marker: bm, PayloadType: 96, SequenceNumber: 17646, Timestamp: 2289527317, SSRC: 0x9dbb7812, }, Payload: b, }) }) }