Files
srs-spi/pkg/config/config_test.go
haibo.chen 156f07644d gofmt
2025-10-15 10:05:52 +08:00

155 lines
4.0 KiB
Go

package config
import (
"os"
"testing"
)
func TestDefaultConfig(t *testing.T) {
cfg := DefaultConfig()
// 测试 Common 配置
if cfg.Common.LogLevel != "info" {
t.Errorf("Expected log level 'info', got '%s'", cfg.Common.LogLevel)
}
if cfg.Common.LogFile != "app.log" {
t.Errorf("Expected log file 'app.log', got '%s'", cfg.Common.LogFile)
}
// 测试 GB28181 配置
if cfg.GB28181.Serial != "34020000002000000001" {
t.Errorf("Expected serial '34020000002000000001', got '%s'", cfg.GB28181.Serial)
}
if cfg.GB28181.Realm != "3402000000" {
t.Errorf("Expected realm '3402000000', got '%s'", cfg.GB28181.Realm)
}
if cfg.GB28181.Host != "0.0.0.0" {
t.Errorf("Expected host '0.0.0.0', got '%s'", cfg.GB28181.Host)
}
if cfg.GB28181.Port != 5060 {
t.Errorf("Expected port 5060, got %d", cfg.GB28181.Port)
}
if cfg.GB28181.Auth.Enable != false {
t.Errorf("Expected auth enable false, got %v", cfg.GB28181.Auth.Enable)
}
if cfg.GB28181.Auth.Password != "123456" {
t.Errorf("Expected auth password '123456', got '%s'", cfg.GB28181.Auth.Password)
}
// 测试 HTTP 配置
if cfg.Http.Port != 8025 {
t.Errorf("Expected http port 8025, got %d", cfg.Http.Port)
}
if cfg.Http.Dir != "./html" {
t.Errorf("Expected http dir './html', got '%s'", cfg.Http.Dir)
}
}
func TestLoadConfigNonExistent(t *testing.T) {
// 测试加载不存在的配置文件,应该返回默认配置
cfg, err := LoadConfig("non_existent_config.yaml")
if err != nil {
t.Fatalf("Expected no error for non-existent config, got: %v", err)
}
// 应该返回默认配置
defaultCfg := DefaultConfig()
if cfg.Common.LogLevel != defaultCfg.Common.LogLevel {
t.Errorf("Expected default log level, got '%s'", cfg.Common.LogLevel)
}
}
func TestLoadConfigValid(t *testing.T) {
// 创建临时配置文件
tempFile := "test_config.yaml"
defer os.Remove(tempFile)
configContent := `common:
log-level: debug
log-file: test.log
gb28181:
serial: "12345678901234567890"
realm: "1234567890"
host: "127.0.0.1"
port: 5061
auth:
enable: true
password: "test123"
http:
listen: 9000
dir: "./test_html"
`
err := os.WriteFile(tempFile, []byte(configContent), 0644)
if err != nil {
t.Fatalf("Failed to create test config file: %v", err)
}
// 加载配置
cfg, err := LoadConfig(tempFile)
if err != nil {
t.Fatalf("Failed to load config: %v", err)
}
// 验证配置
if cfg.Common.LogLevel != "debug" {
t.Errorf("Expected log level 'debug', got '%s'", cfg.Common.LogLevel)
}
if cfg.Common.LogFile != "test.log" {
t.Errorf("Expected log file 'test.log', got '%s'", cfg.Common.LogFile)
}
if cfg.GB28181.Serial != "12345678901234567890" {
t.Errorf("Expected serial '12345678901234567890', got '%s'", cfg.GB28181.Serial)
}
if cfg.GB28181.Port != 5061 {
t.Errorf("Expected port 5061, got %d", cfg.GB28181.Port)
}
if cfg.GB28181.Auth.Enable != true {
t.Errorf("Expected auth enable true, got %v", cfg.GB28181.Auth.Enable)
}
if cfg.Http.Port != 9000 {
t.Errorf("Expected http port 9000, got %d", cfg.Http.Port)
}
}
func TestLoadConfigInvalid(t *testing.T) {
// 创建无效的配置文件
tempFile := "test_invalid_config.yaml"
defer os.Remove(tempFile)
invalidContent := `invalid yaml content: [[[`
err := os.WriteFile(tempFile, []byte(invalidContent), 0644)
if err != nil {
t.Fatalf("Failed to create test config file: %v", err)
}
// 加载配置应该失败
_, err = LoadConfig(tempFile)
if err == nil {
t.Error("Expected error for invalid config file, got nil")
}
}
func TestGetLocalIP(t *testing.T) {
ip, err := GetLocalIP()
// 在某些环境下可能没有网络接口,所以允许返回错误
if err != nil {
t.Logf("GetLocalIP returned error (may be expected in some environments): %v", err)
return
}
// 如果成功,验证返回的是有效的 IP 地址
if ip == "" {
t.Error("Expected non-empty IP address")
}
// 简单验证 IP 格式(应该包含点号)
if len(ip) < 7 { // 最短的 IP 是 0.0.0.0
t.Errorf("IP address seems invalid: %s", ip)
}
t.Logf("Local IP: %s", ip)
}