package config import ( "os" "path/filepath" "testing" "github.com/stretchr/testify/assert" ) func TestParseConfig_JSON(t *testing.T) { // 创建临时JSON配置文件 tmpFile, err := os.CreateTemp("", "*.json") assert.NoError(t, err) defer os.Remove(tmpFile.Name()) // 写入测试配置内容 testConfig := `{ "server": { "host": "127.0.0.1", "port": 8080 }, "storage": { "engine": "rocksdb", "dataPath": "/test/data" } }` _, err = tmpFile.WriteString(testConfig) assert.NoError(t, err) tmpFile.Close() // 测试解析功能 cfg, err := ParseConfig(tmpFile.Name()) assert.NoError(t, err) assert.NotNil(t, cfg) assert.Equal(t, "127.0.0.1", cfg.Server.Host) assert.Equal(t, 8080, cfg.Server.Port) assert.Equal(t, "rocksdb", cfg.Storage.Engine) assert.Equal(t, "/test/data", cfg.Storage.DataPath) } func TestParseConfig_YAML(t *testing.T) { // 创建临时YAML配置文件 tmpFile, err := os.CreateTemp("", "*.yaml") assert.NoError(t, err) defer os.Remove(tmpFile.Name()) // 写入测试配置内容 testConfig := `server: host: 127.0.0.1 port: 8080 storage: engine: rocksdb dataPath: /test/data` _, err = tmpFile.WriteString(testConfig) assert.NoError(t, err) tmpFile.Close() // 测试解析功能 cfg, err := ParseConfig(tmpFile.Name()) assert.NoError(t, err) assert.NotNil(t, cfg) assert.Equal(t, "127.0.0.1", cfg.Server.Host) assert.Equal(t, 8080, cfg.Server.Port) assert.Equal(t, "rocksdb", cfg.Storage.Engine) assert.Equal(t, "/test/data", cfg.Storage.DataPath) } func TestParseConfig_Default(t *testing.T) { // 测试默认配置 cfg := GetConfig() assert.NotNil(t, cfg) assert.Equal(t, "0.0.0.0", cfg.Server.Host) assert.Equal(t, 27017, cfg.Server.Port) assert.Equal(t, "memory", cfg.Storage.Engine) assert.Equal(t, "/var/lib/goaidb", cfg.Storage.DataPath) } func TestParseConfig_InvalidFormat(t *testing.T) { // 创建临时无效格式配置文件 tmpFile, err := os.CreateTemp("", "*.txt") assert.NoError(t, err) defer os.Remove(tmpFile.Name()) // 写入任意内容 _, err = tmpFile.WriteString("invalid config content") assert.NoError(t, err) tmpFile.Close() // 测试不支持的格式 _, err = ParseConfig(tmpFile.Name()) assert.Error(t, err) assert.Contains(t, err.Error(), "不支持的配置文件格式") } func TestParseConfig_FileNotFound(t *testing.T) { // 测试不存在的文件 notExistFile := filepath.Join("not", "exist", "config.json") _, err := ParseConfig(notExistFile) assert.Error(t, err) assert.Contains(t, err.Error(), "配置文件不存在") } func TestValidateConfig_InvalidPort(t *testing.T) { // 创建临时YAML配置文件 tmpFile, err := os.CreateTemp("", "*.yaml") assert.NoError(t, err) defer os.Remove(tmpFile.Name()) // 写入无效端口配置 testConfig := `server: host: 127.0.0.1 port: 1000 storage: engine: rocksdb dataPath: /test/data` _, err = tmpFile.WriteString(testConfig) assert.NoError(t, err) tmpFile.Close() // 测试解析功能 cfg, err := ParseConfig(tmpFile.Name()) assert.NoError(t, err) assert.NotNil(t, cfg) valid, err := cfg.Validate() assert.False(t, valid) assert.Contains(t, err.Error(), "端口必须在1024-65535之间") } func TestValidateConfig_InvalidStorageEngine(t *testing.T) { // 创建临时YAML配置文件 tmpFile, err := os.CreateTemp("", "*.yaml") assert.NoError(t, err) defer os.Remove(tmpFile.Name()) // 写入无效存储引擎配置 testConfig := `server: host: 127.0.0.1 port: 8080 storage: engine: invalid_engine dataPath: /test/data` _, err = tmpFile.WriteString(testConfig) assert.NoError(t, err) tmpFile.Close() // 测试解析功能 cfg, err := ParseConfig(tmpFile.Name()) assert.NoError(t, err) valid, err := cfg.Validate() assert.False(t, valid) assert.Contains(t, err.Error(), "不支持的存储引擎") } func TestValidateConfig_DataPathNotExists(t *testing.T) { // 创建临时YAML配置文件 tmpFile, err := os.CreateTemp("", "*.yaml") assert.NoError(t, err) defer os.Remove(tmpFile.Name()) // 写入无效数据路径配置 testConfig := `server: host: 127.0.0.1 port: 8080 storage: engine: rocksdb dataPath: /invalid/path` _, err = tmpFile.WriteString(testConfig) assert.NoError(t, err) tmpFile.Close() // 测试解析功能 cfg, err := ParseConfig(tmpFile.Name()) assert.NoError(t, err) valid, err := cfg.Validate() assert.False(t, valid) assert.Contains(t, err.Error(), "数据目录不存在") }