goaidb/config/config_test.go

184 lines
4.4 KiB
Go
Raw Permalink Normal View History

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(), "配置文件不存在")
}
2025-06-05 21:05:36 +08:00
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(), "数据目录不存在")
}