Files
srs-spi/pkg/utils/utils_test.go
haibo.chen 35de09aeb6 ut
2025-10-15 15:35:41 +08:00

198 lines
4.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package utils
import (
"testing"
)
func TestGenRandomNumber(t *testing.T) {
tests := []struct {
name string
length int
}{
{"Generate 1 digit", 1},
{"Generate 5 digits", 5},
{"Generate 9 digits", 9},
{"Generate 10 digits", 10},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := GenRandomNumber(tt.length)
// 验证长度
if len(result) != tt.length {
t.Errorf("Expected length %d, got %d", tt.length, len(result))
}
// 验证所有字符都是数字
for i, c := range result {
if c < '0' || c > '9' {
t.Errorf("Character at position %d is not a digit: %c", i, c)
}
}
})
}
}
func TestGenRandomNumberUniqueness(t *testing.T) {
// 生成多个随机数,验证它们不完全相同(虽然理论上可能相同,但概率极低)
results := make(map[string]bool)
iterations := 100
length := 10
for i := 0; i < iterations; i++ {
result := GenRandomNumber(length)
results[result] = true
}
// 至少应该有一些不同的值不太可能100次都生成相同的10位数
if len(results) < 50 {
t.Errorf("Expected at least 50 unique values out of %d iterations, got %d", iterations, len(results))
}
}
func TestCreateSSRC(t *testing.T) {
tests := []struct {
name string
isLive bool
expected byte
}{
{"Live stream SSRC", true, '0'},
{"Non-live stream SSRC", false, '1'},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ssrc := CreateSSRC(tt.isLive)
// 验证长度为10
if len(ssrc) != 10 {
t.Errorf("Expected SSRC length 10, got %d", len(ssrc))
}
// 验证第一个字符
if ssrc[0] != tt.expected {
t.Errorf("Expected first character '%c', got '%c'", tt.expected, ssrc[0])
}
// 验证所有字符都是数字
for i, c := range ssrc {
if c < '0' || c > '9' {
t.Errorf("Character at position %d is not a digit: %c", i, c)
}
}
})
}
}
func TestCreateSSRCUniqueness(t *testing.T) {
// 测试生成的 SSRC 具有唯一性
results := make(map[string]bool)
iterations := 100
for i := 0; i < iterations; i++ {
ssrc := CreateSSRC(true)
results[ssrc] = true
}
// 应该有很多不同的值
if len(results) < 50 {
t.Errorf("Expected at least 50 unique SSRCs out of %d iterations, got %d", iterations, len(results))
}
}
func TestIsVideoChannel(t *testing.T) {
tests := []struct {
name string
channelID string
expected bool
}{
{
name: "Video channel type 131",
channelID: "34020000001310000001",
expected: true,
},
{
name: "Video channel type 132",
channelID: "34020000001320000001",
expected: true,
},
{
name: "Audio channel type 137",
channelID: "34020000001370000001",
expected: false,
},
{
name: "Alarm channel type 134",
channelID: "34020000001340000001",
expected: false,
},
{
name: "Other device type",
channelID: "34020000001110000001",
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := IsVideoChannel(tt.channelID)
if result != tt.expected {
t.Errorf("IsVideoChannel(%s) = %v, expected %v", tt.channelID, result, tt.expected)
}
})
}
}
func TestGetSessionName(t *testing.T) {
tests := []struct {
name string
playType int
expected string
}{
{"Live play", 0, "Play"},
{"Playback", 1, "Playback"},
{"Download", 2, "Download"},
{"Talk", 3, "Talk"},
{"Unknown type", 99, "Play"},
{"Negative type", -1, "Play"},
{"Type 4", 4, "Play"},
{"Type 5", 5, "Play"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := GetSessionName(tt.playType)
if result != tt.expected {
t.Errorf("GetSessionName(%d) = %s, expected %s", tt.playType, result, tt.expected)
}
})
}
}
func TestGenRandomNumberZeroLength(t *testing.T) {
result := GenRandomNumber(0)
if len(result) != 0 {
t.Errorf("Expected empty string for length 0, got %s", result)
}
}
func TestCreateSSRCBothTypes(t *testing.T) {
// Test both live and non-live in one test
liveSSRC := CreateSSRC(true)
nonLiveSSRC := CreateSSRC(false)
if liveSSRC[0] != '0' {
t.Errorf("Live SSRC should start with '0', got '%c'", liveSSRC[0])
}
if nonLiveSSRC[0] != '1' {
t.Errorf("Non-live SSRC should start with '1', got '%c'", nonLiveSSRC[0])
}
// They should be different (with very high probability)
if liveSSRC == nonLiveSSRC {
t.Error("Live and non-live SSRCs should be different")
}
}