145 lines
4.2 KiB
Go
145 lines
4.2 KiB
Go
package config
|
||
|
||
import (
|
||
"fmt"
|
||
"os"
|
||
"path/filepath"
|
||
"testing"
|
||
)
|
||
|
||
// TestFindConfigOnlyCurrentDir 测试只在当前目录查找配置文件
|
||
func TestFindConfigOnlyCurrentDir(t *testing.T) {
|
||
fmt.Println("\n=== 测试只在当前目录查找配置文件 ===")
|
||
|
||
// 创建临时目录结构
|
||
tempDir, err := os.MkdirTemp("", "config_test")
|
||
if err != nil {
|
||
t.Fatalf("创建临时目录失败:%v", err)
|
||
}
|
||
defer os.RemoveAll(tempDir)
|
||
|
||
// 创建子目录
|
||
subDir := filepath.Join(tempDir, "subdir")
|
||
if err := os.MkdirAll(subDir, 0755); err != nil {
|
||
t.Fatalf("创建子目录失败:%v", err)
|
||
}
|
||
|
||
// 在根目录创建配置文件
|
||
configContent := `database:
|
||
host: "127.0.0.1"
|
||
port: "3306"
|
||
user: "root"
|
||
pass: "test"
|
||
name: "testdb"
|
||
type: "mysql"
|
||
`
|
||
|
||
configFile := filepath.Join(tempDir, "config.yaml")
|
||
if err := os.WriteFile(configFile, []byte(configContent), 0644); err != nil {
|
||
t.Fatalf("创建配置文件失败:%v", err)
|
||
}
|
||
|
||
// 测试 1:从根目录查找(应该找到)
|
||
foundPath, err := findConfigFile(tempDir)
|
||
if err != nil {
|
||
t.Errorf("从根目录查找失败:%v", err)
|
||
} else {
|
||
fmt.Printf("✓ 从根目录找到配置文件:%s\n", foundPath)
|
||
}
|
||
|
||
// 测试 2:从子目录查找(不应该找到父目录的配置)
|
||
foundPath, err = findConfigFile(subDir)
|
||
if err == nil {
|
||
t.Errorf("从子目录查找应该失败(不越级查找),但找到了:%s", foundPath)
|
||
} else {
|
||
fmt.Printf("✓ 从子目录查找正确失败(不越级):%v\n", err)
|
||
}
|
||
|
||
// 测试 3:在子目录创建配置文件(应该找到)
|
||
subConfigFile := filepath.Join(subDir, "config.yaml")
|
||
if err := os.WriteFile(subConfigFile, []byte(configContent), 0644); err != nil {
|
||
t.Fatalf("创建子目录配置文件失败:%v", err)
|
||
}
|
||
|
||
foundPath, err = findConfigFile(subDir)
|
||
if err != nil {
|
||
t.Errorf("从子目录查找失败:%v", err)
|
||
} else {
|
||
fmt.Printf("✓ 从子目录找到配置文件:%s\n", foundPath)
|
||
}
|
||
|
||
fmt.Println("✓ 只在当前目录查找测试通过")
|
||
}
|
||
|
||
// TestNoParentSearch 测试不向上查找
|
||
func TestNoParentSearch(t *testing.T) {
|
||
fmt.Println("\n=== 测试不向上层目录查找 ===")
|
||
|
||
// 创建临时目录结构
|
||
tempDir, err := os.MkdirTemp("", "no_parent_test")
|
||
if err != nil {
|
||
t.Fatalf("创建临时目录失败:%v", err)
|
||
}
|
||
defer os.RemoveAll(tempDir)
|
||
|
||
// 创建多级子目录
|
||
level1 := filepath.Join(tempDir, "level1")
|
||
level2 := filepath.Join(level1, "level2")
|
||
level3 := filepath.Join(level2, "level3")
|
||
|
||
if err := os.MkdirAll(level3, 0755); err != nil {
|
||
t.Fatalf("创建目录失败:%v", err)
|
||
}
|
||
|
||
// 只在根目录创建配置文件
|
||
configContent := `database:
|
||
host: "127.0.0.1"
|
||
port: "3306"
|
||
user: "root"
|
||
pass: "test"
|
||
name: "testdb"
|
||
type: "mysql"
|
||
`
|
||
|
||
configFile := filepath.Join(tempDir, "config.yaml")
|
||
if err := os.WriteFile(configFile, []byte(configContent), 0644); err != nil {
|
||
t.Fatalf("创建配置文件失败:%v", err)
|
||
}
|
||
|
||
// 从各级子目录查找(都应该失败,因为不越级查找)
|
||
testDirs := []string{level1, level2, level3}
|
||
for _, dir := range testDirs {
|
||
_, err := findConfigFile(dir)
|
||
if err == nil {
|
||
t.Errorf("从 %s 查找应该失败(不越级查找)", dir)
|
||
} else {
|
||
fmt.Printf("✓ 从 %s 查找正确失败(不越级)\n", filepath.Base(dir))
|
||
}
|
||
}
|
||
|
||
fmt.Println("✓ 不向上层目录查找测试通过")
|
||
}
|
||
|
||
// TestAllNoParentSearch 完整的不越级查找测试
|
||
func TestAllNoParentSearch(t *testing.T) {
|
||
fmt.Println("\n========================================")
|
||
fmt.Println(" 不越级查找完整性测试")
|
||
fmt.Println("========================================")
|
||
|
||
TestFindConfigOnlyCurrentDir(t)
|
||
TestNoParentSearch(t)
|
||
|
||
fmt.Println("\n========================================")
|
||
fmt.Println(" 所有不越级查找测试完成!")
|
||
fmt.Println("========================================")
|
||
fmt.Println()
|
||
fmt.Println("已实现的不越级查找功能:")
|
||
fmt.Println(" ✓ 只在当前工作目录查找配置文件")
|
||
fmt.Println(" ✓ 不会向上层目录查找")
|
||
fmt.Println(" ✓ 支持 yaml, yml, toml, ini, json 格式")
|
||
fmt.Println(" ✓ 支持 config.* 和 .config.* 命名")
|
||
fmt.Println(" ✓ 提供 AutoConnect() 一键连接")
|
||
fmt.Println(" ✓ 无需手动指定配置文件路径")
|
||
fmt.Println()
|
||
}
|