mirror of
https://github.com/livekit/livekit.git
synced 2026-04-01 19:35:43 +00:00
148 lines
2.4 KiB
Go
148 lines
2.4 KiB
Go
package sfu
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/pion/rtcp"
|
|
"github.com/pion/rtp"
|
|
)
|
|
|
|
var TestPackets = []*rtp.Packet{
|
|
{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 1,
|
|
},
|
|
},
|
|
{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 3,
|
|
},
|
|
},
|
|
{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 4,
|
|
},
|
|
},
|
|
{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 6,
|
|
},
|
|
},
|
|
{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 7,
|
|
},
|
|
},
|
|
{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 10,
|
|
},
|
|
},
|
|
}
|
|
|
|
func Test_queue_nack(t *testing.T) {
|
|
type fields struct {
|
|
headSN uint16
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
fields fields
|
|
want *rtcp.NackPair
|
|
}{
|
|
{
|
|
name: "Most generate correct nack packet",
|
|
fields: fields{},
|
|
want: &rtcp.NackPair{
|
|
PacketID: 2,
|
|
LostPackets: 100,
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
q := &queue{
|
|
headSN: tt.fields.headSN,
|
|
}
|
|
for _, p := range TestPackets {
|
|
diff := p.SequenceNumber - q.headSN
|
|
for i := 1; i < int(diff); i++ {
|
|
q.push(nil)
|
|
q.counter++
|
|
}
|
|
q.headSN = p.SequenceNumber
|
|
q.counter++
|
|
q.push(p)
|
|
}
|
|
if got := q.nack(); !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("nack() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_queue(t *testing.T) {
|
|
q := &queue{}
|
|
for _, p := range TestPackets {
|
|
p := p
|
|
assert.NotPanics(t, func() {
|
|
q.AddPacket(p, true)
|
|
})
|
|
}
|
|
var expectedSN uint16
|
|
expectedSN = 6
|
|
assert.Equal(t, expectedSN, q.GetPacket(6).SequenceNumber)
|
|
|
|
np := &rtp.Packet{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 8,
|
|
},
|
|
}
|
|
expectedSN = 8
|
|
q.AddPacket(np, false)
|
|
assert.Equal(t, expectedSN, q.GetPacket(8).SequenceNumber)
|
|
}
|
|
|
|
func Test_queue_edges(t *testing.T) {
|
|
var TestPackets = []*rtp.Packet{
|
|
{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 65533,
|
|
},
|
|
},
|
|
{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 65534,
|
|
},
|
|
},
|
|
{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 2,
|
|
},
|
|
},
|
|
}
|
|
q := &queue{}
|
|
q.headSN = 65532
|
|
for _, p := range TestPackets {
|
|
p := p
|
|
assert.NotPanics(t, func() {
|
|
q.AddPacket(p, true)
|
|
})
|
|
}
|
|
assert.Equal(t, 6, q.size)
|
|
var expectedSN uint16
|
|
expectedSN = 65534
|
|
assert.Equal(t, expectedSN, q.GetPacket(expectedSN).SequenceNumber)
|
|
|
|
np := &rtp.Packet{
|
|
Header: rtp.Header{
|
|
SequenceNumber: 65535,
|
|
},
|
|
}
|
|
q.AddPacket(np, false)
|
|
assert.Equal(t, expectedSN+1, q.GetPacket(expectedSN+1).SequenceNumber)
|
|
}
|