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) } } }