test(cyrene): 补同步入库闸的接线断言(切片连带的漏提交)
- 断言组合根真的接了闸的开关:a.memoryIngestGateOff() 与 DisableIngestGate: gateOff
- 断言 store 侧唯一写路径先过闸(不是只投异步队列)
(前一片 90f4302 提交时漏了这个测试文件,工作树因此挂着一处未提交改动;现补齐。)
This commit is contained in:
1 parent
90f430216a
commit
8e3311cea2
1 file changed
+49
-3
@@ -3,10 +3,12 @@ package main
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/config"
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/db"
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/embedding"
|
||||
"git.yeij.top/AskaEth/Cyrene_v2/internal/runtime/history"
|
||||
@@ -54,6 +56,10 @@ func TestMemoryReviewIsWired(t *testing.T) {
|
||||
"Audit: a.auditMemoryReview",
|
||||
// 接到 store 的唯一写入路径上。
|
||||
"a.memStore.AttachIngestReviewer(reviewer)",
|
||||
// 同步入库闸(2026-10-07)的开关来自 `$DATA_DIR/config/memory-tidy.json`
|
||||
// 的 `{"ingestGate": false}`(**零新 env 键**,`.env` 已冻结)。
|
||||
"a.memoryIngestGateOff()",
|
||||
"DisableIngestGate: gateOff",
|
||||
},
|
||||
"main.go": {
|
||||
"a.memoryReview.Start(ctx)",
|
||||
@@ -75,13 +81,53 @@ func TestMemoryReviewIsWired(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// store 侧的唯一写入路径必须投递审查(否则新记忆永远不进队列)。
|
||||
// store 侧的唯一写入路径必须投递审查(否则新记忆永远不进队列),
|
||||
// 且必须**先过同步入库闸**(2026-10-07:闸就摆在写路径上,重复当场落 merged)。
|
||||
storeSrc, err := os.ReadFile("../../internal/runtime/memory/store.go")
|
||||
if err != nil {
|
||||
t.Fatalf("read memory/store.go: %v", err)
|
||||
}
|
||||
if !strings.Contains(string(storeSrc), "s.enqueueReview(item)") {
|
||||
t.Fatal("memory/store.go 的写入路径上没有投递审查(写路径唯一)")
|
||||
for _, want := range []string{"s.enqueueReview(item)", "s.planIngest(ctx, item)", "s.finishIngest(ctx, item, plan)"} {
|
||||
if !strings.Contains(string(storeSrc), want) {
|
||||
t.Fatalf("memory/store.go 的写入路径上找不到 %q(唯一写路径上的闸/投递断了)", want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestMemoryIngestGate_ReadsDataDirConfig 钉住**同步入库闸**的开关确实来自
|
||||
// `$DATA_DIR/config/memory-tidy.json`(它没有 env 键:`.env` 已冻结)——
|
||||
// 若组合根没读那个文件,「一键回到只插不审」就是一句空话。
|
||||
//
|
||||
// 口径与自动档同一条:没配 = 开;显式 false = 关;坏文件 = 回落代码默认(开)
|
||||
// 并记 WARN,**绝不静默把一处防护关掉**。
|
||||
func TestMemoryIngestGate_ReadsDataDirConfig(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
empty := &app{cfg: &config.Config{DataDir: t.TempDir()}, log: tidyTestLog()}
|
||||
if empty.memoryIngestGateOff() {
|
||||
t.Fatal("没配过时入库闸应当保持代码默认(开)")
|
||||
}
|
||||
|
||||
dataDir := t.TempDir()
|
||||
dir := filepath.Join(dataDir, "config")
|
||||
if err := os.MkdirAll(dir, 0o700); err != nil {
|
||||
t.Fatalf("mkdir: %v", err)
|
||||
}
|
||||
path := filepath.Join(dir, "memory-tidy.json")
|
||||
if err := os.WriteFile(path, []byte(`{"ingestGate": false}`), 0o600); err != nil {
|
||||
t.Fatalf("write: %v", err)
|
||||
}
|
||||
off := &app{cfg: &config.Config{DataDir: dataDir}, log: tidyTestLog()}
|
||||
if !off.memoryIngestGateOff() {
|
||||
t.Fatal("ingestGate: false 没被读到(闸没有一键关掉的路径)")
|
||||
}
|
||||
|
||||
if err := os.WriteFile(path, []byte(`{"ingestGate": "nope"}`), 0o600); err != nil {
|
||||
t.Fatalf("write broken: %v", err)
|
||||
}
|
||||
broken := &app{cfg: &config.Config{DataDir: dataDir}, log: tidyTestLog()}
|
||||
if broken.memoryIngestGateOff() {
|
||||
t.Fatal("坏配置把入库闸静默关掉了:必须回落代码默认(开)")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user