59 lines
1.8 KiB
Go
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 默认配置错误")
|
|
}
|
|
}
|