package config import ( "testing" "time" ) func TestLoadDevelopmentDefaults(t *testing.T) { for _, name := range []string{ "SCOUT_ENV", "SCOUT_ADDR", "SCOUT_DATA_DIR", "SCOUT_PUBLIC_URL", "SCOUT_ADMIN_EMAIL", "SCOUT_ADMIN_NAME", "SCOUT_ADMIN_PASSWORD", "SCOUT_DEVELOPER_TOKEN", "SCOUT_ALLOWED_ORIGINS", "SCOUT_ALLOWED_HOSTS", "SCOUT_FORCE_HTTPS", "SCOUT_TRUST_PROXY", "SCOUT_SESSION_DURATION", "SCOUT_MAX_UPLOAD_BYTES", "SCOUT_RATE_LIMIT_PER_MINUTE", "SCOUT_LOG_LEVEL", "SCOUT_SMTP_HOST", "SCOUT_SMTP_FROM", } { t.Setenv(name, "") } cfg, err := Load() if err != nil { t.Fatal(err) } if cfg.Environment != "development" || cfg.SessionDuration != 24*time.Hour || cfg.MaxUploadBytes != 512<<20 { t.Fatalf("开发环境默认配置错误: %+v", cfg) } if !cfg.AllowLegacyToken { t.Fatal("开发环境默认应兼容旧版开发者令牌") } } func TestLoadProductionRequiresDeploymentSettings(t *testing.T) { t.Setenv("SCOUT_ENV", "production") if _, err := Load(); err == nil { t.Fatal("生产环境缺少安全配置时不应启动") } } func TestLoadProductionWithDeploymentSettings(t *testing.T) { t.Setenv("SCOUT_ENV", "production") t.Setenv("SCOUT_ADMIN_EMAIL", "admin@example.com") t.Setenv("SCOUT_ADMIN_PASSWORD", "a-strong-production-password") t.Setenv("SCOUT_PUBLIC_URL", "https://packages.example.com") t.Setenv("SCOUT_ALLOWED_ORIGINS", "https://packages.example.com") t.Setenv("SCOUT_ALLOWED_HOSTS", "packages.example.com") t.Setenv("SCOUT_SMTP_HOST", "smtp.example.com") t.Setenv("SCOUT_SMTP_FROM", "Scout ") t.Setenv("SCOUT_ALLOW_LEGACY_TOKEN", "false") cfg, err := Load() if err != nil { t.Fatal(err) } if cfg.AllowLegacyToken { t.Fatal("生产环境默认不应启用兼容令牌") } if !cfg.ForceHTTPS || cfg.TrustProxy { t.Fatal("生产环境 HTTPS 默认配置错误") } }