54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
package store
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"git.ipao.vip/rogee/go-sip/contracts"
|
|
"git.ipao.vip/rogee/go-sip/internal/contract"
|
|
"git.ipao.vip/rogee/go-sip/internal/mq"
|
|
"git.ipao.vip/rogee/go-sip/internal/tenant"
|
|
)
|
|
|
|
func TestExecuteMQPersistsScopedV2Receipt(t *testing.T) {
|
|
s, err := Open(":memory:")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer s.Close()
|
|
s.now = func() time.Time { return time.Date(2026, 9, 21, 0, 0, 1, 0, time.UTC) }
|
|
if err := s.BindDispatcherID(identityA); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
raw, err := contracts.Files.ReadFile("upstream/v1/examples/call-execute.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
route, err := tenant.NewDispatcherRoute(identityA, "tenant-a")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := s.IngestCommand(raw, route.InboundKey); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var exchange, key string
|
|
var body []byte
|
|
if err := s.DB().QueryRow(`SELECT exchange,routing_key,body FROM outbox`).Scan(&exchange, &key, &body); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if exchange != mq.EventExchange || key != route.OutboundKey {
|
|
t.Fatal("receipt does not target this Dispatcher and tenant")
|
|
}
|
|
if err := contract.ValidateMQMessage(body); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
duplicate, err := s.IngestCommand(raw, route.InboundKey)
|
|
if err != nil || !duplicate.Duplicate {
|
|
t.Fatalf("duplicate: %+v %v", duplicate, err)
|
|
}
|
|
other, _ := tenant.NewDispatcherRoute(identityB, "tenant-a")
|
|
if _, err := s.IngestCommand(raw, other.InboundKey); err == nil {
|
|
t.Fatal("foreign Dispatcher route accepted")
|
|
}
|
|
}
|