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

86 lines
3.3 KiB
Go

package store
import (
"testing"
agentv1 "git.ipao.vip/rogee/go-sip/gen/agent/v1"
"git.ipao.vip/rogee/go-sip/internal/contract"
"git.ipao.vip/rogee/go-sip/internal/testfixture"
)
func TestActiveTaskExecutionControlsReturnsOnlyBoundNonterminalExecutions(t *testing.T) {
s := testStore(t)
raw, err := testfixture.Execute()
if err != nil {
t.Fatal(err)
}
envelope, payload, err := contract.DecodeExecute(raw)
if err != nil {
t.Fatal(err)
}
if _, err := s.IngestCommand(raw, testfixture.InboundKey(envelope.TenantKey)); err != nil {
t.Fatal(err)
}
binding := &agentv1.ExecutionBinding{TenantId: envelope.TenantID, TenantKey: envelope.TenantKey, TaskId: payload.TaskID, TaskItemId: payload.TaskItemID, TaskRevision: payload.TaskRevision, ExecutionId: payload.ExecutionID, AgentVersionId: payload.AgentVersionID, RoutePolicyId: payload.RoutePolicyID, CallerProfileId: payload.CallerProfileID}
if err := s.SetQuota("global", 1); err != nil {
t.Fatal(err)
}
if err := s.Reserve("reservation-a", binding.ExecutionId, binding.TenantKey, []string{"global"}); err != nil {
t.Fatal(err)
}
if err := s.BindExecutionAgent("agent-a", binding); err != nil {
t.Fatal(err)
}
targets, err := s.ActiveTaskExecutionControls(binding.TenantId, binding.TenantKey, binding.TaskId)
if err != nil || len(targets) != 1 || targets[0].ExecutionID != binding.ExecutionId || targets[0].AgentID != "agent-a" {
t.Fatalf("active targets=%+v err=%v", targets, err)
}
if _, err := s.DB().Exec(`UPDATE tasks SET status='finished' WHERE execution_id=?`, binding.ExecutionId); err != nil {
t.Fatal(err)
}
targets, err = s.ActiveTaskExecutionControls(binding.TenantId, binding.TenantKey, binding.TaskId)
if err != nil || len(targets) != 0 {
t.Fatalf("terminal task remained active: %+v err=%v", targets, err)
}
}
func TestExecutionRouteRequiresReservedMatchingTask(t *testing.T) {
s := testStore(t)
raw, err := testfixture.Execute()
if err != nil {
t.Fatal(err)
}
envelope, payload, err := contract.DecodeExecute(raw)
if err != nil {
t.Fatal(err)
}
if _, err := s.IngestCommand(raw, testfixture.InboundKey(envelope.TenantKey)); err != nil {
t.Fatal(err)
}
binding := &agentv1.ExecutionBinding{TenantId: envelope.TenantID, TenantKey: envelope.TenantKey, TaskId: payload.TaskID, TaskItemId: payload.TaskItemID, TaskRevision: payload.TaskRevision, ExecutionId: payload.ExecutionID, AgentVersionId: payload.AgentVersionID, RoutePolicyId: payload.RoutePolicyID, CallerProfileId: payload.CallerProfileID}
if err := s.BindExecutionAgent("agent-a", binding); err == nil {
t.Fatal("unreserved task dispatched")
}
if err := s.SetQuota("global", 1); err != nil {
t.Fatal(err)
}
if err := s.Reserve("reservation-a", binding.ExecutionId, binding.TenantKey, []string{"global"}); err != nil {
t.Fatal(err)
}
if err := s.BindExecutionAgent("agent-a", binding); err != nil {
t.Fatal(err)
}
if err := s.BindExecutionAgent("agent-a", binding); err != nil {
t.Fatal(err)
}
if err := s.BindExecutionAgent("other-agent", binding); err == nil {
t.Fatal("execution reassigned to another agent")
}
if _, err := s.DB().Exec(`UPDATE tasks SET status='paused'`); err != nil {
t.Fatal(err)
}
if err := s.BindExecutionAgent("agent-a", binding); err == nil {
t.Fatal("existing route bypassed pause barrier")
}
}