69 lines
2.4 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|