调整以下配置的默认值以匹配 .env.example: - allow_insecure_http: false → true (允许 HTTP URL) - allow_private_hosts: false → true (允许本地/私有 IP) **改动说明:** - 默认允许 HTTP URL,方便开发测试环境使用 - 默认允许本地和私有 IP 地址 - 与 deploy/.env.example 中的推荐配置保持一致 - 更新相应的单元测试以验证新的默认值 **安全提示:** ⚠️ 这些默认值适合开发/测试环境 ⚠️ 生产环境建议显式配置更严格的安全策略 ⚠️ HTTP 存在明文传输风险,仅在可信网络中使用 **测试结果:** - ✅ 所有单元测试通过 - ✅ golangci-lint 无问题 相关文件: - backend/internal/config/config.go:451-452 - backend/internal/config/config_test.go:83-88 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
93 lines
2.5 KiB
Go
93 lines
2.5 KiB
Go
package config
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
func TestNormalizeRunMode(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
expected string
|
|
}{
|
|
{"simple", "simple"},
|
|
{"SIMPLE", "simple"},
|
|
{"standard", "standard"},
|
|
{"invalid", "standard"},
|
|
{"", "standard"},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
result := NormalizeRunMode(tt.input)
|
|
if result != tt.expected {
|
|
t.Errorf("NormalizeRunMode(%q) = %q, want %q", tt.input, result, tt.expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestLoadDefaultSchedulingConfig(t *testing.T) {
|
|
viper.Reset()
|
|
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load() error: %v", err)
|
|
}
|
|
|
|
if cfg.Gateway.Scheduling.StickySessionMaxWaiting != 3 {
|
|
t.Fatalf("StickySessionMaxWaiting = %d, want 3", cfg.Gateway.Scheduling.StickySessionMaxWaiting)
|
|
}
|
|
if cfg.Gateway.Scheduling.StickySessionWaitTimeout != 45*time.Second {
|
|
t.Fatalf("StickySessionWaitTimeout = %v, want 45s", cfg.Gateway.Scheduling.StickySessionWaitTimeout)
|
|
}
|
|
if cfg.Gateway.Scheduling.FallbackWaitTimeout != 30*time.Second {
|
|
t.Fatalf("FallbackWaitTimeout = %v, want 30s", cfg.Gateway.Scheduling.FallbackWaitTimeout)
|
|
}
|
|
if cfg.Gateway.Scheduling.FallbackMaxWaiting != 100 {
|
|
t.Fatalf("FallbackMaxWaiting = %d, want 100", cfg.Gateway.Scheduling.FallbackMaxWaiting)
|
|
}
|
|
if !cfg.Gateway.Scheduling.LoadBatchEnabled {
|
|
t.Fatalf("LoadBatchEnabled = false, want true")
|
|
}
|
|
if cfg.Gateway.Scheduling.SlotCleanupInterval != 30*time.Second {
|
|
t.Fatalf("SlotCleanupInterval = %v, want 30s", cfg.Gateway.Scheduling.SlotCleanupInterval)
|
|
}
|
|
}
|
|
|
|
func TestLoadSchedulingConfigFromEnv(t *testing.T) {
|
|
viper.Reset()
|
|
t.Setenv("GATEWAY_SCHEDULING_STICKY_SESSION_MAX_WAITING", "5")
|
|
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load() error: %v", err)
|
|
}
|
|
|
|
if cfg.Gateway.Scheduling.StickySessionMaxWaiting != 5 {
|
|
t.Fatalf("StickySessionMaxWaiting = %d, want 5", cfg.Gateway.Scheduling.StickySessionMaxWaiting)
|
|
}
|
|
}
|
|
|
|
func TestLoadDefaultSecurityToggles(t *testing.T) {
|
|
viper.Reset()
|
|
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
t.Fatalf("Load() error: %v", err)
|
|
}
|
|
|
|
if cfg.Security.URLAllowlist.Enabled {
|
|
t.Fatalf("URLAllowlist.Enabled = true, want false")
|
|
}
|
|
if !cfg.Security.URLAllowlist.AllowInsecureHTTP {
|
|
t.Fatalf("URLAllowlist.AllowInsecureHTTP = false, want true")
|
|
}
|
|
if !cfg.Security.URLAllowlist.AllowPrivateHosts {
|
|
t.Fatalf("URLAllowlist.AllowPrivateHosts = false, want true")
|
|
}
|
|
if cfg.Security.ResponseHeaders.Enabled {
|
|
t.Fatalf("ResponseHeaders.Enabled = true, want false")
|
|
}
|
|
}
|