114 lines
2.0 KiB
Go
114 lines
2.0 KiB
Go
|
|
package config
|
||
|
|
|
||
|
|
import (
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"testing"
|
||
|
|
|
||
|
|
"go.uber.org/zap"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestConfigManager_Load(t *testing.T) {
|
||
|
|
// 创建临时配置文件
|
||
|
|
tmpDir := t.TempDir()
|
||
|
|
configPath := filepath.Join(tmpDir, "test_config.toml")
|
||
|
|
configContent := `
|
||
|
|
[server]
|
||
|
|
host = "127.0.0.1"
|
||
|
|
port = 8080
|
||
|
|
|
||
|
|
[log]
|
||
|
|
level = "debug"
|
||
|
|
output = "stdout"
|
||
|
|
max_size = 100
|
||
|
|
max_backups = 3
|
||
|
|
max_age = 7
|
||
|
|
|
||
|
|
[protocol]
|
||
|
|
name = "test"
|
||
|
|
version = "1.0"
|
||
|
|
|
||
|
|
[protocol.options]
|
||
|
|
key = "value"
|
||
|
|
`
|
||
|
|
err := os.WriteFile(configPath, []byte(configContent), 0644)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Failed to create config file: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
logger := zap.NewNop()
|
||
|
|
cm := NewConfigManager(configPath, logger)
|
||
|
|
|
||
|
|
err = cm.Load()
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("Failed to load config: %v", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
cfg := cm.Get()
|
||
|
|
if cfg == nil {
|
||
|
|
t.Fatal("Config is nil")
|
||
|
|
}
|
||
|
|
|
||
|
|
if cfg.Server.Host != "127.0.0.1" {
|
||
|
|
t.Errorf("Expected host '127.0.0.1', got '%s'", cfg.Server.Host)
|
||
|
|
}
|
||
|
|
|
||
|
|
if cfg.Server.Port != 8080 {
|
||
|
|
t.Errorf("Expected port 8080, got %d", cfg.Server.Port)
|
||
|
|
}
|
||
|
|
|
||
|
|
if cfg.Log.Level != "debug" {
|
||
|
|
t.Errorf("Expected log level 'debug', got '%s'", cfg.Log.Level)
|
||
|
|
}
|
||
|
|
|
||
|
|
if cfg.Protocol.Name != "test" {
|
||
|
|
t.Errorf("Expected protocol name 'test', got '%s'", cfg.Protocol.Name)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestInitLogger(t *testing.T) {
|
||
|
|
tests := []struct {
|
||
|
|
name string
|
||
|
|
cfg *LogConfig
|
||
|
|
wantErr bool
|
||
|
|
}{
|
||
|
|
{
|
||
|
|
name: "stdout logger",
|
||
|
|
cfg: &LogConfig{
|
||
|
|
Level: "info",
|
||
|
|
Output: "stdout",
|
||
|
|
},
|
||
|
|
wantErr: false,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "stderr logger",
|
||
|
|
cfg: &LogConfig{
|
||
|
|
Level: "error",
|
||
|
|
Output: "stderr",
|
||
|
|
},
|
||
|
|
wantErr: false,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: "file logger",
|
||
|
|
cfg: &LogConfig{
|
||
|
|
Level: "debug",
|
||
|
|
Output: filepath.Join(t.TempDir(), "test.log"),
|
||
|
|
},
|
||
|
|
wantErr: false,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, tt := range tests {
|
||
|
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
|
logger, err := InitLogger(tt.cfg)
|
||
|
|
if (err != nil) != tt.wantErr {
|
||
|
|
t.Errorf("InitLogger() error = %v, wantErr %v", err, tt.wantErr)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
if !tt.wantErr && logger == nil {
|
||
|
|
t.Error("Expected non-nil logger")
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|