105 lines
2.5 KiB
Go
105 lines
2.5 KiB
Go
|
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(), "配置文件不存在")
|
||
|
}
|