unit test
This commit is contained in:
170
pkg/utils/utils_test.go
Normal file
170
pkg/utils/utils_test.go
Normal 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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user