unit test

This commit is contained in:
haibo.chen
2025-10-15 09:14:33 +08:00
parent b0fce4380f
commit 4c7485f4ef
7 changed files with 1423 additions and 0 deletions

170
pkg/utils/utils_test.go Normal file
View File

@ -0,0 +1,170 @@
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"},
}
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)
}
})
}
}