返回 DeepSeek-Reasonix
message_dedup_test.go
根目录 / internal / extension / message_dedup_test.go
1 package extension
2
3 import "testing"
4
5 func TestMessageSendGuardDedup(t *testing.T) {
6 g := NewMessageSendGuard()
7 if !g.TryRecord(1, "m1") {
8 t.Fatal("first should succeed")
9 }
10 if g.TryRecord(1, "m1") {
11 t.Fatal("duplicate should fail")
12 }
13 if !g.TryRecord(1, "m2") {
14 t.Fatal("different id ok")
15 }
16 if !g.TryRecord(2, "m1") {
17 t.Fatal("different gen ok")
18 }
19 }
20
21 func TestMessageSendGuardForgetReceipt(t *testing.T) {
22 g := NewMessageSendGuard()
23 if !g.TryRecord(2, "m#gen-2") {
24 t.Fatal("first should succeed")
25 }
26 g.ForgetReceipt(EffectReceipt{
27 ID: "message-sent:m#gen-2#gen-2",
28 Component: "m#gen-2",
29 Generation: 2,
30 })
31 if !g.TryRecord(2, "m#gen-2") {
32 t.Fatal("evicted receipt did not release its dedup key")
33 }
34 }
35
36 func TestRecordMessageSentOnce(t *testing.T) {
37 owner := NewRuntimeOwner()
38 if !owner.RecordMessageSentOnce(77, "once-a", "test") {
39 t.Fatal("first")
40 }
41 if owner.RecordMessageSentOnce(77, "once-a", "test") {
42 t.Fatal("second must be rejected")
43 }
44 }
45
45 lines GO