Scout/internal/config/config_test.go
2026-08-31 00:06:06 +08:00

59 lines
1.8 KiB
Go

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 <noreply@example.com>")
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 默认配置错误")
}
}