198 lines
4.4 KiB
Go
198 lines
4.4 KiB
Go
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")
|
||
}
|
||
}
|