Files
go-sip/internal/store/source_revision_test.go
T

69 lines
2.4 KiB
Go

package store
import (
"encoding/json"
"path/filepath"
"testing"
"git.ipao.vip/rogee/go-sip/internal/configread"
)
func TestQueueRefreshAdoptsTaskAndQuotaWithoutSourceRevisionOrdering(t *testing.T) {
s, err := Open(filepath.Join(t.TempDir(), "current.db"))
if err != nil {
t.Fatal(err)
}
defer s.Close()
snapshot := currentStoreSnapshot(t)
if err := s.SaveSnapshot(snapshot); err != nil {
t.Fatal(err)
}
for _, revision := range []int64{snapshot.Task.TaskRevision, 1, 9, 1} {
var task map[string]any
if err := json.Unmarshal(snapshot.Task.Raw, &task); err != nil {
t.Fatal(err)
}
task["task_revision"] = revision
task["status"] = "paused"
task["name"] = "current event content"
body, err := json.Marshal(task)
if err != nil {
t.Fatal(err)
}
if err := snapshot.Task.UnmarshalJSON(body); err != nil {
t.Fatal(err)
}
snapshot.Quota.QuotaRevision = 1
snapshot.Quota.MaxConcurrentCalls = 1
if err := s.SaveSnapshot(snapshot); err != nil {
t.Fatalf("current task/quota rejected at source revision %d: %v", revision, err)
}
stored, err := s.ReadSnapshot(currentDispatcherID, 1001, "task-asr")
if err != nil || stored.Task.TaskRevision != revision || stored.Task.Status != "paused" || stored.Quota.QuotaRevision != 1 || stored.Quota.MaxConcurrentCalls != 1 {
t.Fatalf("latest received snapshot was not adopted: %+v %v", stored, err)
}
}
}
func TestDiscoveryAdoptsCurrentRevisionWithoutErasingMQPause(t *testing.T) {
s, err := Open(filepath.Join(t.TempDir(), "current.db"))
if err != nil {
t.Fatal(err)
}
defer s.Close()
for _, revision := range []int64{9, 1, 1} {
task := configread.DiscoveredTask{TaskID: "task-asr", TenantID: 1001, TaskRevision: revision, Status: "running"}
if err := s.ApplyDiscoverySnapshot(currentDispatcherID, []configread.DiscoveredTask{task}); err != nil {
t.Fatalf("current discovery revision %d rejected: %v", revision, err)
}
if err := s.ApplyControl(currentDispatcherID, 1001, "task-asr", "pause"); err != nil {
t.Fatal(err)
}
var state string
var storedRevision int64
if err := s.db.QueryRow(`SELECT control_state,task_revision FROM dispatcher_tasks WHERE dispatcher_id=? AND tenant_id=? AND task_id=?`, currentDispatcherID, 1001, "task-asr").Scan(&state, &storedRevision); err != nil || state != "paused" || storedRevision != revision {
t.Fatalf("revision refresh erased persisted control: %s %d %v", state, storedRevision, err)
}
}
}