156 lines
4.0 KiB
Go
156 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)
|
|
}
|
|
|