Squash integration of the reviewed Go core, frontend audit fixes, release tooling, and deployment hygiene. CI passed all Server/Client jobs.
109 lines
4.1 KiB
Go
109 lines
4.1 KiB
Go
package protocol
|
|
|
|
import "testing"
|
|
|
|
func TestEndpointMediaCopyLimits(t *testing.T) {
|
|
for _, sample := range []struct {
|
|
capacity, steady, transition int
|
|
}{{1, 1, 2}, {2, 2, 3}, {3, 3, 3}} {
|
|
if got := EndpointMediaCopyLimit(sample.capacity, EndpointMediaCopySteady); got != sample.steady {
|
|
t.Errorf("steady limit for %d = %d, want %d", sample.capacity, got, sample.steady)
|
|
}
|
|
if got := EndpointMediaCopyLimit(sample.capacity, EndpointMediaCopyTransition); got != sample.transition {
|
|
t.Errorf("transition limit for %d = %d, want %d", sample.capacity, got, sample.transition)
|
|
}
|
|
if !EndpointMediaCopyCountFits(sample.transition, sample.capacity, EndpointMediaCopyTransition) {
|
|
t.Errorf("%d copies must fit capacity %d in transition", sample.transition, sample.capacity)
|
|
}
|
|
if EndpointMediaCopyCountFits(sample.transition+1, sample.capacity, EndpointMediaCopyTransition) {
|
|
t.Errorf("%d copies must not fit capacity %d in transition",
|
|
sample.transition+1, sample.capacity)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestEndpointMediaCopyCapacityGuards(t *testing.T) {
|
|
for _, capacity := range []int{0, 4, -1} {
|
|
if err := AssertEndpointMediaCopyCapacity(capacity); err == nil {
|
|
t.Errorf("capacity %d must be rejected", capacity)
|
|
}
|
|
}
|
|
// An unavailable runtime capacity returns false instead of throwing.
|
|
if EndpointMediaCopyCountFits(0, 0, EndpointMediaCopySteady) {
|
|
t.Error("a zero capacity must never fit")
|
|
}
|
|
}
|
|
|
|
// Ported from tests/nat-candidate.test.ts.
|
|
func TestNatCandidateDiagnostics(t *testing.T) {
|
|
for _, sample := range []struct {
|
|
candidate string
|
|
want CandidateSignalOrigin
|
|
}{
|
|
{"", CandidateOriginEnd},
|
|
{" ", CandidateOriginEnd},
|
|
{"candidate:sp2 1 udp 1 203.0.113.1 50000 typ srflx", CandidateOriginPredicted},
|
|
{"candidate:base 1 udp 1 203.0.113.1 50000 typ srflx", CandidateOriginOrdinary},
|
|
} {
|
|
if got := CandidateSignalOriginOf(sample.candidate); got != sample.want {
|
|
t.Errorf("CandidateSignalOriginOf(%q) = %q, want %q",
|
|
sample.candidate, got, sample.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Ported from tests/packet-loss.test.ts ("keeps receive-side delta validation").
|
|
func TestPacketLossPercentFromDeltas(t *testing.T) {
|
|
number := func(value float64) *float64 { return &value }
|
|
for _, sample := range []struct {
|
|
name string
|
|
received, lost *float64
|
|
want float64
|
|
ok bool
|
|
}{
|
|
{"ninety received and ten lost", number(90), number(10), 10, true},
|
|
{"no packets at all", number(0), number(0), 0, false},
|
|
{"missing received delta", nil, number(1), 0, false},
|
|
{"negative lost delta", number(10), number(-1), 0, false},
|
|
} {
|
|
t.Run(sample.name, func(t *testing.T) {
|
|
got, ok := PacketLossPercentFromDeltas(sample.received, sample.lost)
|
|
if ok != sample.ok || (ok && got != sample.want) {
|
|
t.Fatalf("PacketLossPercentFromDeltas = (%v, %v), want (%v, %v)",
|
|
got, ok, sample.want, sample.ok)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// Ported from the codec cases in tests/protocol.test.ts.
|
|
func TestIsCanonicalVideoCodecEvidence(t *testing.T) {
|
|
for _, sample := range []struct {
|
|
codec, profile, parameters string
|
|
want bool
|
|
}{
|
|
{"video/H264", "profile-level-id=42e01f",
|
|
"packetization-mode=1; level-asymmetry-allowed=1", true},
|
|
{"video/VP8", "", "max-fr=60; max-fs=8160", true},
|
|
{"video/VP9", "profile-id=2", "max-fs=8160", true},
|
|
{"video/AV1", "profile=1", "level-idx=31; tier=0", true},
|
|
{"video/unknown", "", "", true},
|
|
{"", "", "", true},
|
|
{"video/unknown", "profile=1", "", false},
|
|
{"video/H264", "device-id=deadbeef", "", false},
|
|
{"video/H264", "", "sprop-parameter-sets=deadbeef", false},
|
|
// Order is part of the canonical form.
|
|
{"video/H264", "", "level-asymmetry-allowed=1; packetization-mode=1", false},
|
|
// A duplicate key exceeds the ordered key budget.
|
|
{"video/VP8", "", "max-fr=60; max-fr=60", false},
|
|
{"video/AV1", "profile=3", "", false},
|
|
} {
|
|
t.Run(sample.codec+"|"+sample.profile+"|"+sample.parameters, func(t *testing.T) {
|
|
got := IsCanonicalVideoCodecEvidence(sample.codec, sample.profile, sample.parameters)
|
|
if got != sample.want {
|
|
t.Fatalf("IsCanonicalVideoCodecEvidence = %v, want %v", got, sample.want)
|
|
}
|
|
})
|
|
}
|
|
}
|