fix: 作废投递走统一终态函数并写回执收尾

This commit is contained in:
Nixevol
2026-09-30 14:58:58 +08:00
parent 4059a1576b
commit ac90495137
10 changed files with 365 additions and 166 deletions
+48
View File
@@ -228,6 +228,54 @@ func TestF01DisableVoidsScheduledAndRejectsNew(t *testing.T) {
}
}
func TestDisableLastPendingFinalizesAndReceipt(t *testing.T) {
t.Parallel()
idApp, msgApp, db := openLifecycle(t)
ctx := context.Background()
insertEPFull(t, db, "alice")
insertEPFull(t, db, "bob")
ttl := int64(3600)
if _, err := msgApp.Submit(ctx, "alice", port.ConnInfo{EndpointID: "alice"}, &protocol.Send{
V: protocol.Version, Type: protocol.TypeSend, RID: "1", ID: "keep-bob",
To: protocol.Target{Kind: protocol.TargetEndpoint, ID: "bob"},
Body: protocol.Body{Enc: protocol.EncUTF8, Data: "hi"},
Offline: &protocol.OfflineOpts{Keep: true, TTLSeconds: &ttl},
}); err != nil {
t.Fatal(err)
}
if err := idApp.Disable(ctx, "bob"); err != nil {
t.Fatal(err)
}
var state, reason string
if err := db.Read.QueryRow(`SELECT state, reason FROM messages WHERE id='keep-bob'`).Scan(&state, &reason); err != nil {
t.Fatal(err)
}
if state != "completed" {
t.Fatalf("state=%s want completed", state)
}
var bodies int
if err := db.Read.QueryRow(`SELECT COUNT(*) FROM message_bodies b JOIN messages m ON m.seq=b.seq WHERE m.id='keep-bob'`).Scan(&bodies); err != nil {
t.Fatal(err)
}
if bodies != 0 {
t.Fatalf("body still present: %d", bodies)
}
var rState, rReason string
if err := db.Read.QueryRow(`SELECT state, reason FROM receipts WHERE sender_id='alice' AND msg_id='keep-bob'`).Scan(&rState, &rReason); err != nil {
t.Fatalf("receipt: %v", err)
}
if rState != "rejected" || rReason != "endpoint_disabled" {
t.Fatalf("receipt state=%q reason=%q", rState, rReason)
}
var pending int
if err := db.Read.QueryRow(`SELECT COUNT(*) FROM messages WHERE sender_id='alice' AND state IN ('scheduled','dispatched')`).Scan(&pending); err != nil {
t.Fatal(err)
}
if pending != 0 {
t.Fatalf("sender pending=%d", pending)
}
}
func TestF01DeleteOwnerTransfersEarliest(t *testing.T) {
t.Parallel()
idApp, _, db := openLifecycle(t)