Files
gortsplib/pkg/rtpreorderer/reorderer_test.go

215 lines
3.1 KiB
Go

package rtpreorderer
import (
"testing"
"github.com/pion/rtp"
"github.com/stretchr/testify/require"
)
func TestReorder(t *testing.T) {
sequence := []struct {
in *rtp.Packet
out []*rtp.Packet
}{
{
// first packet
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 65530,
},
},
[]*rtp.Packet{{
Header: rtp.Header{
SequenceNumber: 65530,
},
}},
},
{
// packet sent before first packet
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 65529,
},
},
[]*rtp.Packet(nil),
},
{
// ok
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 65531,
},
},
[]*rtp.Packet{{
Header: rtp.Header{
SequenceNumber: 65531,
},
}},
},
{
// duplicated
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 65531,
},
},
[]*rtp.Packet(nil),
},
{
// gap
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 65535,
},
},
[]*rtp.Packet(nil),
},
{
// unordered
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 65533,
PayloadType: 96,
},
},
[]*rtp.Packet(nil),
},
{
// unordered + duplicated
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 65533,
PayloadType: 97,
},
},
[]*rtp.Packet(nil),
},
{
// unordered
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 65532,
},
},
[]*rtp.Packet{
{
Header: rtp.Header{
SequenceNumber: 65532,
},
},
{
Header: rtp.Header{
SequenceNumber: 65533,
PayloadType: 96,
},
},
},
},
{
// unordered
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 65534,
},
},
[]*rtp.Packet{
{
Header: rtp.Header{
SequenceNumber: 65534,
},
},
{
Header: rtp.Header{
SequenceNumber: 65535,
},
},
},
},
{
// overflow + gap
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 1,
},
},
[]*rtp.Packet(nil),
},
{
// unordered
&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 0,
},
},
[]*rtp.Packet{
{
Header: rtp.Header{
SequenceNumber: 0,
},
},
{
Header: rtp.Header{
SequenceNumber: 1,
},
},
},
},
}
r := New()
r.absPos = 40
for _, entry := range sequence {
out := r.Process(entry.in)
require.Equal(t, entry.out, out)
}
}
func TestBufferIsFull(t *testing.T) {
r := New()
r.absPos = 25
out := r.Process(&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 1,
},
})
require.Equal(t, []*rtp.Packet{{
Header: rtp.Header{
SequenceNumber: 1,
},
}}, out)
var expected []*rtp.Packet
for i := uint16(0); i < 63; i++ {
out := r.Process(&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 3 + i,
},
})
require.Equal(t, []*rtp.Packet(nil), out)
expected = append(expected, &rtp.Packet{
Header: rtp.Header{
SequenceNumber: 3 + i,
},
})
}
out = r.Process(&rtp.Packet{
Header: rtp.Header{
SequenceNumber: 3 + 64,
},
})
expected = append(expected, &rtp.Packet{
Header: rtp.Header{
SequenceNumber: 3 + 64,
},
})
require.Equal(t, expected, out)
}