package main import ( "net/url" "strings" "testing" ) /* 会话收窄:一个 Agent 同时在多条会话里干活时,收件箱列表必须只列**当前这条**。 缺陷(用户报的):「不同 session 的 agent 都可以看到全部邮件」。列表按 Agent 列, 且 read_inbox 按契约把列出来的都标已读 ⇒ A 会话的回合标掉 B 会话的未读 ⇒ B 之后按 `?status=unread` 补投时再也看不到那封信(静默丢信)。 homeagent 原先根本没有这个参数(另外三家桥也是),所以这里不只测"带上了", 也测"不在回合里时不带"(那是历史行为,桥启动自检要用整箱)。 */ func TestInboxURLScopedBySession(t *testing.T) { p := &Plugin{gwURL: "http://127.0.0.1:8180"} outside := p.inboxURL("unread", 5) if strings.Contains(outside, "session_id=") { t.Fatalf("不在回合里时不应带 session_id:%s", outside) } p.currentSessionID = "593988da-0000-0000-0000-000000000001" inside := p.inboxURL("unread", 5) if !strings.Contains(inside, "session_id=593988da-0000-0000-0000-000000000001") { t.Fatalf("回合中必须带上当前会话:%s", inside) } if !strings.Contains(inside, "status=unread") || !strings.Contains(inside, "limit=5") { t.Fatalf("原有参数不能被改坏:%s", inside) } // 会话 id 里不可能出现的东西也要被转义(否则拼出坏 URL,网关会 400) p.currentSessionID = "a b&c" esc := p.inboxURL("all", 1) if strings.Contains(esc, "&c") { t.Fatalf("session_id 未转义:%s", esc) } if _, err := url.Parse(esc); err != nil { t.Fatalf("拼出的 URL 不合法:%v", err) } }