Files
Cyrene_v2/internal/config/memory_tidy_test.go
T
AskaEth 91a3209c9b
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled
feat(memory): 记忆整理 v1(design/23)——低峰定期扫描 + 事实包含判定 + 规则否决 + 只产建议队列(不自动应用)
2026-10-05 11:29:36 +08:00

58 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
}
}