58 lines
2.2 KiB
Go
58 lines
2.2 KiB
Go
package config
|
||
|
||
import (
|
||
"strings"
|
||
"testing"
|
||
)
|
||
|
||
// TestLoad_MemoryTidyDefaults 锁定记忆整理(design/23 §4/§9/§13)的 env 契约默认值。
|
||
// 它们必须与 design/23 的默认/建议值一致,也必须与 `memory` 包的兜底默认值一致
|
||
// (两处不一致会让「没配这个键」与「配了但解析失败」走向不同的行为)。
|
||
func TestLoad_MemoryTidyDefaults(t *testing.T) {
|
||
t.Setenv("JWT_SECRET", strings.Repeat("s", 40))
|
||
|
||
cfg, err := Load("")
|
||
if err != nil {
|
||
t.Fatalf("Load() error: %v", err)
|
||
}
|
||
got := cfg.MemoryTidy
|
||
if !got.Enabled {
|
||
t.Error("MEMORY_TIDY_ENABLED 默认应为 true(design §4:可用 false 关闭)")
|
||
}
|
||
if got.IntervalSec != 86400 {
|
||
t.Errorf("MEMORY_TIDY_INTERVAL_SEC = %d, want 86400(每天 1 次)", got.IntervalSec)
|
||
}
|
||
if got.QuietStartHour != 23 || got.QuietEndHour != 7 {
|
||
t.Errorf("低峰窗口 = %d-%d, want 23-7(复用 backthink 语义)", got.QuietStartHour, got.QuietEndHour)
|
||
}
|
||
if got.RecallThreshold != 0.80 {
|
||
t.Errorf("MEMORY_TIDY_RECALL_THRESHOLD = %v, want 0.80(design §13 开放点 2 的建议值)", got.RecallThreshold)
|
||
}
|
||
if got.ScanLimit != 5000 || got.CandidateLimit != 20 {
|
||
t.Errorf("配额 = %d/%d, want 5000/20(design §9)", got.ScanLimit, got.CandidateLimit)
|
||
}
|
||
}
|
||
|
||
// TestLoad_MemoryTidyEnvOverrides 锁定键名与类型:写进 .env 的旋钮真的生效
|
||
// (键名写错会静默沿用默认值,这类错误只能靠这条用例抓住)。
|
||
func TestLoad_MemoryTidyEnvOverrides(t *testing.T) {
|
||
t.Setenv("JWT_SECRET", strings.Repeat("s", 40))
|
||
t.Setenv("MEMORY_TIDY_ENABLED", "false")
|
||
t.Setenv("MEMORY_TIDY_INTERVAL_SEC", "3600")
|
||
t.Setenv("MEMORY_TIDY_QUIET_START_HOUR", "1")
|
||
t.Setenv("MEMORY_TIDY_QUIET_END_HOUR", "5")
|
||
t.Setenv("MEMORY_TIDY_RECALL_THRESHOLD", "0.7")
|
||
t.Setenv("MEMORY_TIDY_SCAN_LIMIT", "10")
|
||
t.Setenv("MEMORY_TIDY_CANDIDATE_LIMIT", "3")
|
||
|
||
cfg, err := Load("")
|
||
if err != nil {
|
||
t.Fatalf("Load() error: %v", err)
|
||
}
|
||
got := cfg.MemoryTidy
|
||
if got.Enabled || got.IntervalSec != 3600 || got.QuietStartHour != 1 || got.QuietEndHour != 5 ||
|
||
got.RecallThreshold != 0.7 || got.ScanLimit != 10 || got.CandidateLimit != 3 {
|
||
t.Fatalf("MEMORY_TIDY_* 未生效:%+v", got)
|
||
}
|
||
}
|