package main import "testing" // 链路图发布会话白名单是**裁决本身**(design/19 §1 裁决 01.4.5 + 裁决 16.4.2), // 不是实现细节:它决定哪些会话能产出实时帧,也决定契约 v0.71 的只读快照出口 // (`GET /api/v1/admin/flow/graph`)能查到什么。删掉任何一档都必须打红。 // // 这条测试同时钉住「隔离的渠道会话绝不进白名单」—— 群聊 / 陌生人会话一旦被 // 发进管理面板,就是把主人的私聊以外的内容泄漏给面板,属红线。 func TestFlowSessionAllowed(t *testing.T) { t.Parallel() allowed := []string{ "web", "web:0f3a0b1c-2d3e-4f50-8a9b-1c2d3e4f5061", "web:another-uuid", "sess-backthink", } for _, session := range allowed { if !flowSessionAllowed(session) { t.Errorf("flowSessionAllowed(%q) = false, want true(该档属 design/19 §1 的发布会话范围)", session) } } denied := []string{ "", "webbish", // 与 "web" 前缀相似但不是主会话族 "webx:uuid", // 前缀不匹配必须整档拒绝(HasPrefix 只认 "web:") "sess-im-12345", // IM 隔离会话(群聊) "sess-stranger-999", // 陌生人私聊 "sess-memorytidy", // 系统任务会话(design/23,刻意不在白名单) "sess-backthink-2", // 后缀不同即不是那个固定会话 "sess-backthink ", // 尾部空格不得被宽容 } for _, session := range denied { if flowSessionAllowed(session) { t.Errorf("flowSessionAllowed(%q) = true,但它必须被拒(隔离会话/系统任务/非法 id 一律不进白名单)", session) } } }