package config import ( "os" "testing" "github.com/spf13/viper" ) // 重置 viper,避免测试间干扰 func resetViper() { viper.Reset() } func TestLoad_DefaultsAndBucketsOverride(t *testing.T) { resetViper() // 设置部分环境变量覆盖 _ = os.Setenv("RUSTFS_BUCKET_TEXTURES", "tex-bkt") _ = os.Setenv("RUSTFS_BUCKET_AVATARS", "ava-bkt") _ = os.Setenv("DATABASE_MAX_IDLE_CONNS", "20") _ = os.Setenv("DATABASE_MAX_OPEN_CONNS", "50") _ = os.Setenv("DATABASE_CONN_MAX_LIFETIME", "2h") _ = os.Setenv("DATABASE_CONN_MAX_IDLE_TIME", "30m") cfg, err := Load() if err != nil { t.Fatalf("Load err: %v", err) } // 默认值检查 if cfg.Server.Port == "" || cfg.Database.Driver == "" || cfg.Redis.Host == "" { t.Fatalf("expected defaults filled: %+v", cfg) } // 覆盖检查 if cfg.RustFS.Buckets["textures"] != "tex-bkt" || cfg.RustFS.Buckets["avatars"] != "ava-bkt" { t.Fatalf("buckets override failed: %+v", cfg.RustFS.Buckets) } if cfg.Database.MaxIdleConns != 20 || cfg.Database.MaxOpenConns != 50 { t.Fatalf("db pool override failed: %+v", cfg.Database) } if cfg.Database.ConnMaxLifetime.String() != "2h0m0s" || cfg.Database.ConnMaxIdleTime.String() != "30m0s" { t.Fatalf("db duration override failed: %v %v", cfg.Database.ConnMaxLifetime, cfg.Database.ConnMaxIdleTime) } }