70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package store
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.ipao.vip/rogee/go-sip/contracts"
|
|
"git.ipao.vip/rogee/go-sip/internal/contract"
|
|
"git.ipao.vip/rogee/go-sip/internal/tenant"
|
|
)
|
|
|
|
func TestAIConfigurationMQRequestAndSnapshotSurviveRestart(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "state.db")
|
|
s, err := Open(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { s.Close() }()
|
|
if err := s.BindDispatcherID(identityA); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
now := time.Date(2026, 9, 21, 0, 0, 1, 0, time.UTC)
|
|
s.now = func() time.Time { return now }
|
|
base := "upstream/" + contract.MQSourceCommit + "/examples/"
|
|
request, err := contracts.Files.ReadFile(base + "ai-config-request.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := s.QueueAIConfigRequest(request); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := s.QueueAIConfigRequest(request); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var count int
|
|
if err := s.DB().QueryRow(`SELECT COUNT(*) FROM outbox`).Scan(&count); err != nil || count != 1 {
|
|
t.Fatalf("request count=%d err=%v", count, err)
|
|
}
|
|
raw := validAIReply(t, now)
|
|
route, err := tenant.NewDispatcherRoute(identityA, "tenant-a")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := s.StoreAIConfigResponse(raw, route.InboundKey); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := s.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
s, err = Open(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
s.now = func() time.Time { return now.Add(time.Hour) }
|
|
if err := s.StoreAIConfigResponse(raw, route.InboundKey); err != nil {
|
|
t.Fatalf("known reply revalidated as new expired response: %v", err)
|
|
}
|
|
snapshot, err := s.LoadAIConfig("tenant-a", "tenant-a", "version-a")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if snapshot.AgentVersionID != "version-a" || snapshot.TenantKey != "tenant-a" {
|
|
t.Fatal("recovered snapshot lost tenant/version")
|
|
}
|
|
if _, err := s.LoadAIConfig("another-tenant", "tenant-a", "version-a"); err == nil {
|
|
t.Fatal("cross-tenant snapshot access")
|
|
}
|
|
}
|