33 lines
2.0 KiB
Go
33 lines
2.0 KiB
Go
package rpc
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
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 TestStopDrainPreservesCallAndCannotResume(t *testing.T) {
|
|
s := activatedServer(time.Date(2026, 9, 18, 1, 0, 0, 0, time.UTC), t)
|
|
raw, err := testfixture.Execute()
|
|
require.NoError(t, err)
|
|
envelope, payload, err := contract.DecodeExecute(raw)
|
|
require.NoError(t, err)
|
|
binding := &agentv1.ExecutionBinding{TenantId: envelope.TenantID, TenantKey: envelope.TenantKey, ExecutionId: payload.ExecutionID, TaskId: payload.TaskID, TaskItemId: payload.TaskItemID, TaskRevision: payload.TaskRevision, AgentVersionId: payload.AgentVersionID}
|
|
_, err = s.Execute(context.Background(), &agentv1.ExecuteRequest{Meta: testMeta("execute", "execute-key", 1), Binding: binding, CallExecuteJson: raw})
|
|
require.NoError(t, err)
|
|
s.executions[binding.ExecutionId].state = agentv1.ExecutionState_EXECUTION_STATE_OBSERVED
|
|
stopped, err := s.ApplyTaskControl(context.Background(), &agentv1.ApplyTaskControlRequest{Meta: testMeta("stop", "stop-key", 1), Binding: binding, ExpectedTaskRevision: binding.TaskRevision, Action: agentv1.ControlAction_CONTROL_ACTION_STOP, ActiveCallPolicy: agentv1.ActiveCallPolicy_ACTIVE_CALL_POLICY_DRAIN})
|
|
require.NoError(t, err)
|
|
require.Equal(t, agentv1.ResultCode_RESULT_CODE_APPLIED, stopped.Receipt.Result)
|
|
require.Equal(t, agentv1.ExecutionState_EXECUTION_STATE_OBSERVED, stopped.State)
|
|
binding.TaskRevision = stopped.AppliedTaskRevision
|
|
resumed, err := s.ApplyTaskControl(context.Background(), &agentv1.ApplyTaskControlRequest{Meta: testMeta("resume", "resume-key", 1), Binding: binding, ExpectedTaskRevision: binding.TaskRevision, Action: agentv1.ControlAction_CONTROL_ACTION_RESUME, ActiveCallPolicy: agentv1.ActiveCallPolicy_ACTIVE_CALL_POLICY_DRAIN})
|
|
require.NoError(t, err)
|
|
require.Equal(t, agentv1.ResultCode_RESULT_CODE_REJECTED, resumed.Receipt.Result)
|
|
require.Equal(t, stopped.AppliedTaskRevision, resumed.AppliedTaskRevision)
|
|
}
|