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

199
pkg/service/ptz_test.go Normal file
View File

@ -0,0 +1,199 @@
package service
import (
"testing"
)
func TestGetPTZSpeed(t *testing.T) {
tests := []struct {
name string
speed string
expected uint8
}{
{"Speed 1", "1", 25},
{"Speed 2", "2", 50},
{"Speed 3", "3", 75},
{"Speed 4", "4", 100},
{"Speed 5", "5", 125},
{"Speed 6", "6", 150},
{"Speed 7", "7", 175},
{"Speed 8", "8", 200},
{"Speed 9", "9", 225},
{"Speed 10", "10", 255},
{"Invalid speed", "invalid", 125}, // 默认速度
{"Empty speed", "", 125}, // 默认速度
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := getPTZSpeed(tt.speed)
if result != tt.expected {
t.Errorf("getPTZSpeed(%s) = %d, expected %d", tt.speed, result, tt.expected)
}
})
}
}
func TestToPTZCmd(t *testing.T) {
tests := []struct {
name string
cmdName string
speed string
expectError bool
checkPrefix bool
}{
{"Stop command", "stop", "5", false, true},
{"Right command", "right", "5", false, true},
{"Left command", "left", "5", false, true},
{"Up command", "up", "5", false, true},
{"Down command", "down", "5", false, true},
{"Up-right command", "upright", "5", false, true},
{"Up-left command", "upleft", "5", false, true},
{"Down-right command", "downright", "5", false, true},
{"Down-left command", "downleft", "5", false, true},
{"Zoom in command", "zoomin", "5", false, true},
{"Zoom out command", "zoomout", "5", false, true},
{"Invalid command", "invalid", "5", true, false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result, err := toPTZCmd(tt.cmdName, tt.speed)
if tt.expectError {
if err == nil {
t.Errorf("Expected error for command %s, got nil", tt.cmdName)
}
return
}
if err != nil {
t.Errorf("Unexpected error for command %s: %v", tt.cmdName, err)
return
}
// 验证结果格式
if len(result) != 16 { // A50F01 + 5对字节 = 16个字符
t.Errorf("Expected result length 16, got %d for command %s", len(result), tt.cmdName)
}
// 验证前缀
if tt.checkPrefix && result[:6] != "A50F01" {
t.Errorf("Expected prefix 'A50F01', got '%s' for command %s", result[:6], tt.cmdName)
}
})
}
}
func TestToPTZCmdSpecificCases(t *testing.T) {
// 测试停止命令
t.Run("Stop command details", func(t *testing.T) {
result, err := toPTZCmd("stop", "5")
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
// Stop 命令码是 0速度应该都是 0
// A50F01 00 00 00 00 checksum
if result[:8] != "A50F0100" {
t.Errorf("Stop command should start with A50F0100, got %s", result[:8])
}
})
// 测试右移命令
t.Run("Right command details", func(t *testing.T) {
result, err := toPTZCmd("right", "5")
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
// Right 命令码是 1水平速度应该是 125 (0x7D)
// A50F01 01 7D 00 00 checksum
if result[:8] != "A50F0101" {
t.Errorf("Right command should start with A50F0101, got %s", result[:8])
}
})
// 测试上移命令
t.Run("Up command details", func(t *testing.T) {
result, err := toPTZCmd("up", "5")
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
// Up 命令码是 8垂直速度应该是 125 (0x7D)
// A50F01 08 00 7D 00 checksum
if result[:8] != "A50F0108" {
t.Errorf("Up command should start with A50F0108, got %s", result[:8])
}
})
// 测试缩放命令
t.Run("Zoom in command details", func(t *testing.T) {
result, err := toPTZCmd("zoomin", "5")
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
// Zoom in 命令码是 16 (0x10)
// A50F01 10 00 00 XX checksum (XX 是速度左移4位)
if result[:8] != "A50F0110" {
t.Errorf("Zoom in command should start with A50F0110, got %s", result[:8])
}
})
}
func TestToPTZCmdWithDifferentSpeeds(t *testing.T) {
speeds := []string{"1", "5", "10"}
for _, speed := range speeds {
t.Run("Right with speed "+speed, func(t *testing.T) {
result, err := toPTZCmd("right", speed)
if err != nil {
t.Errorf("Unexpected error with speed %s: %v", speed, err)
}
if len(result) != 16 {
t.Errorf("Expected length 16, got %d", len(result))
}
})
}
}
func TestPTZCmdMap(t *testing.T) {
// 验证所有预定义的命令都存在
expectedCommands := []string{
"stop", "right", "left", "down", "downright", "downleft",
"up", "upright", "upleft", "zoomin", "zoomout",
}
for _, cmd := range expectedCommands {
t.Run("Command exists: "+cmd, func(t *testing.T) {
if _, ok := ptzCmdMap[cmd]; !ok {
t.Errorf("Command %s not found in ptzCmdMap", cmd)
}
})
}
}
func TestPTZSpeedMap(t *testing.T) {
// 验证速度映射的正确性
expectedSpeeds := map[string]uint8{
"1": 25,
"2": 50,
"3": 75,
"4": 100,
"5": 125,
"6": 150,
"7": 175,
"8": 200,
"9": 225,
"10": 255,
}
for speed, expectedValue := range expectedSpeeds {
t.Run("Speed mapping: "+speed, func(t *testing.T) {
if value, ok := ptzSpeedMap[speed]; !ok {
t.Errorf("Speed %s not found in ptzSpeedMap", speed)
} else if value != expectedValue {
t.Errorf("Speed %s expected value %d, got %d", speed, expectedValue, value)
}
})
}
}