154 lines
3.1 KiB
Go
154 lines
3.1 KiB
Go
package rtpconn
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/pion/webrtc/v4"
|
|
|
|
"git.stormux.org/storm/skald/conn"
|
|
"git.stormux.org/storm/skald/hall"
|
|
"git.stormux.org/storm/skald/rtptime"
|
|
)
|
|
|
|
type testClient struct {
|
|
hall *hall.Hall
|
|
}
|
|
|
|
func (c *testClient) Hall() *hall.Hall {
|
|
return c.hall
|
|
}
|
|
|
|
func (c *testClient) Addr() net.Addr {
|
|
return nil
|
|
}
|
|
|
|
func (c *testClient) Id() string {
|
|
return "test-client"
|
|
}
|
|
|
|
func (c *testClient) Username() string {
|
|
return "Test User"
|
|
}
|
|
|
|
func (c *testClient) SetUsername(string) {
|
|
}
|
|
|
|
func (c *testClient) Permissions() []string {
|
|
return []string{"present"}
|
|
}
|
|
|
|
func (c *testClient) SetPermissions([]string) {
|
|
}
|
|
|
|
func (c *testClient) Data() map[string]interface{} {
|
|
return nil
|
|
}
|
|
|
|
func (c *testClient) PushConn(*hall.Hall, string, conn.Up, []conn.UpTrack, string) error {
|
|
return nil
|
|
}
|
|
|
|
func (c *testClient) RequestConns(hall.Client, *hall.Hall, string) error {
|
|
return nil
|
|
}
|
|
|
|
func (c *testClient) Joined(string, string) error {
|
|
return nil
|
|
}
|
|
|
|
func (c *testClient) PushClient(string, string, string, string, []string, map[string]interface{}) error {
|
|
return nil
|
|
}
|
|
|
|
func (c *testClient) Kick(string, *string, string) error {
|
|
return nil
|
|
}
|
|
|
|
func TestDownTrackAtomics(t *testing.T) {
|
|
down := &rtpDownTrack{
|
|
atomics: &downTrackAtomics{},
|
|
maxBitrate: new(bitrate),
|
|
maxREMBBitrate: new(bitrate),
|
|
}
|
|
|
|
down.SetTimeOffset(1, 2)
|
|
down.setRTT(3)
|
|
down.setSRTime(4, 5)
|
|
down.maxBitrate.Set(6, rtptime.Jiffies())
|
|
down.maxREMBBitrate.Set(7, rtptime.Jiffies())
|
|
info := layerInfo{8, 9, 10, 11, 12, 13, true}
|
|
down.setLayerInfo(info)
|
|
ntp, rtp := down.getTimeOffset()
|
|
rtt := down.getRTT()
|
|
sr, srntp := down.getSRTime()
|
|
br, sbr, tbr := down.GetMaxBitrate()
|
|
info2 := down.getLayerInfo()
|
|
if ntp != 1 || rtp != 2 || rtt != 3 || sr != 4 || srntp != 5 ||
|
|
br != 6 || sbr != 8 || tbr != 11 {
|
|
t.Errorf(
|
|
"Expected 1 2 3 4 5 6 8 11, "+
|
|
"got %v %v %v %v %v %v %v %v",
|
|
ntp, rtp, rtt, sr, srntp, br, sbr, tbr,
|
|
)
|
|
}
|
|
if info2 != info {
|
|
t.Errorf("Expected %v, got %v", info, info2)
|
|
}
|
|
}
|
|
|
|
func TestNewUpConnRejectsVideoMediaSection(t *testing.T) {
|
|
g, err := hall.Add("rtpconn-video-rejection-test", &hall.Description{})
|
|
if err != nil {
|
|
t.Fatalf("Add hall: %v", err)
|
|
}
|
|
defer hall.Delete(g.Name())
|
|
|
|
offer := `v=0
|
|
o=- 1 1 IN IP4 127.0.0.1
|
|
s=-
|
|
t=0 0
|
|
m=audio 9 UDP/TLS/RTP/SAVPF 111
|
|
c=IN IP4 0.0.0.0
|
|
a=mid:0
|
|
a=sendrecv
|
|
a=rtpmap:111 opus/48000/2
|
|
m=video 9 UDP/TLS/RTP/SAVPF 96
|
|
c=IN IP4 0.0.0.0
|
|
a=mid:1
|
|
a=sendrecv
|
|
a=rtpmap:96 VP8/90000
|
|
`
|
|
|
|
up, err := newUpConn(&testClient{hall: g}, "up-test", "audio", offer)
|
|
if err != nil {
|
|
t.Fatalf("newUpConn: %v", err)
|
|
}
|
|
defer up.pc.Close()
|
|
|
|
transceivers := up.pc.GetTransceivers()
|
|
if len(transceivers) != 1 {
|
|
t.Fatalf("expected only audio transceiver, got %d", len(transceivers))
|
|
}
|
|
if kind := transceivers[0].Kind(); kind != webrtc.RTPCodecTypeAudio {
|
|
t.Fatalf("expected audio transceiver, got %v", kind)
|
|
}
|
|
}
|
|
|
|
func TestSadd(t *testing.T) {
|
|
ts := []struct{ x, y, z uint64 }{
|
|
{0, 0, 0},
|
|
{1, 2, 3},
|
|
{^uint64(0) - 10, 5, ^uint64(0) - 5},
|
|
{^uint64(0) - 10, 15, ^uint64(0)},
|
|
}
|
|
for _, tt := range ts {
|
|
z := sadd(tt.x, tt.y)
|
|
if z != tt.z {
|
|
t.Errorf("%v + %v: expected %v, got %v",
|
|
tt.x, tt.y, tt.z, z,
|
|
)
|
|
}
|
|
}
|
|
}
|