Add SWF endpoint TerminateWorkflowExecution
This commit is contained in:
parent
98948a01c8
commit
96d6bb056b
10 changed files with 212 additions and 16 deletions
|
|
@ -1,8 +1,17 @@
|
|||
from collections import namedtuple
|
||||
from sure import expect
|
||||
|
||||
from moto.swf.exceptions import SWFUnknownResourceFault
|
||||
from moto.swf.models import Domain
|
||||
|
||||
|
||||
# Fake WorkflowExecution for tests purposes
|
||||
WorkflowExecution = namedtuple(
|
||||
"WorkflowExecution",
|
||||
["workflow_id", "run_id", "execution_status"]
|
||||
)
|
||||
|
||||
|
||||
def test_domain_short_dict_representation():
|
||||
domain = Domain("foo", "52")
|
||||
domain.to_short_dict().should.equal({"name":"foo", "status":"REGISTERED"})
|
||||
|
|
@ -46,3 +55,45 @@ def test_domain_decision_tasks():
|
|||
domain.add_to_decision_task_list("foo", "bar")
|
||||
domain.add_to_decision_task_list("other", "baz")
|
||||
domain.decision_tasks.should.equal(["bar", "baz"])
|
||||
|
||||
def test_domain_get_workflow_execution():
|
||||
domain = Domain("my-domain", "60")
|
||||
|
||||
wfe1 = WorkflowExecution(workflow_id="wf-id-1", run_id="run-id-1", execution_status="OPEN")
|
||||
wfe2 = WorkflowExecution(workflow_id="wf-id-1", run_id="run-id-2", execution_status="CLOSED")
|
||||
wfe3 = WorkflowExecution(workflow_id="wf-id-2", run_id="run-id-3", execution_status="OPEN")
|
||||
wfe4 = WorkflowExecution(workflow_id="wf-id-3", run_id="run-id-4", execution_status="CLOSED")
|
||||
domain.workflow_executions = [wfe1, wfe2, wfe3, wfe4]
|
||||
|
||||
# get workflow execution through workflow_id and run_id
|
||||
domain.get_workflow_execution("wf-id-1", run_id="run-id-1").should.equal(wfe1)
|
||||
domain.get_workflow_execution("wf-id-1", run_id="run-id-2").should.equal(wfe2)
|
||||
domain.get_workflow_execution("wf-id-3", run_id="run-id-4").should.equal(wfe4)
|
||||
domain.get_workflow_execution.when.called_with(
|
||||
"wf-id-1", run_id="non-existent"
|
||||
).should.throw(
|
||||
SWFUnknownResourceFault,
|
||||
"Unknown execution: WorkflowExecution=[workflowId=wf-id-1, runId=non-existent]"
|
||||
)
|
||||
|
||||
# get OPEN workflow execution by default if no run_id
|
||||
domain.get_workflow_execution("wf-id-1").should.equal(wfe1)
|
||||
domain.get_workflow_execution.when.called_with(
|
||||
"wf-id-3"
|
||||
).should.throw(
|
||||
SWFUnknownResourceFault, "Unknown execution, workflowId = wf-id-3"
|
||||
)
|
||||
domain.get_workflow_execution.when.called_with(
|
||||
"wf-id-non-existent"
|
||||
).should.throw(
|
||||
SWFUnknownResourceFault, "Unknown execution, workflowId = wf-id-non-existent"
|
||||
)
|
||||
|
||||
# raise_if_closed attribute
|
||||
domain.get_workflow_execution("wf-id-1", run_id="run-id-1", raise_if_closed=True).should.equal(wfe1)
|
||||
domain.get_workflow_execution.when.called_with(
|
||||
"wf-id-3", run_id="run-id-4", raise_if_closed=True
|
||||
).should.throw(
|
||||
SWFUnknownResourceFault,
|
||||
"Unknown execution: WorkflowExecution=[workflowId=wf-id-3, runId=run-id-4]"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -379,3 +379,18 @@ def test_complete_activity_task():
|
|||
|
||||
wfe.open_counts["openActivityTasks"].should.equal(0)
|
||||
wfe.open_counts["openDecisionTasks"].should.equal(1)
|
||||
|
||||
def test_terminate():
|
||||
wfe = make_workflow_execution()
|
||||
wfe.schedule_decision_task()
|
||||
wfe.terminate()
|
||||
|
||||
wfe.execution_status.should.equal("CLOSED")
|
||||
wfe.close_status.should.equal("TERMINATED")
|
||||
wfe.close_cause.should.equal("OPERATOR_INITIATED")
|
||||
wfe.open_counts["openDecisionTasks"].should.equal(1)
|
||||
|
||||
last_event = wfe.events()[-1]
|
||||
last_event.event_type.should.equal("WorkflowExecutionTerminated")
|
||||
# take default child_policy if not provided (as here)
|
||||
last_event.child_policy.should.equal("ABANDON")
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ def test_respond_activity_task_completed_on_closed_workflow_execution():
|
|||
activity_token = conn.poll_for_activity_task("test-domain", "activity-task-list")["taskToken"]
|
||||
|
||||
# bad: we're closing workflow execution manually, but endpoints are not coded for now..
|
||||
wfe = swf_backend.domains[0].workflow_executions.values()[0]
|
||||
wfe = swf_backend.domains[0].workflow_executions[-1]
|
||||
wfe.execution_status = "CLOSED"
|
||||
# /bad
|
||||
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ def test_respond_decision_task_completed_on_close_workflow_execution():
|
|||
task_token = resp["taskToken"]
|
||||
|
||||
# bad: we're closing workflow execution manually, but endpoints are not coded for now..
|
||||
wfe = swf_backend.domains[0].workflow_executions.values()[0]
|
||||
wfe = swf_backend.domains[0].workflow_executions[-1]
|
||||
wfe.execution_status = "CLOSED"
|
||||
# /bad
|
||||
|
||||
|
|
|
|||
|
|
@ -100,3 +100,64 @@ def test_get_workflow_execution_history_on_non_existent_workflow_execution():
|
|||
conn.get_workflow_execution_history.when.called_with(
|
||||
"test-domain", "wrong-run-id", "wrong-workflow-id"
|
||||
).should.throw(SWFUnknownResourceFault)
|
||||
|
||||
|
||||
# TerminateWorkflowExecution endpoint
|
||||
@mock_swf
|
||||
def test_terminate_workflow_execution():
|
||||
conn = setup_swf_environment()
|
||||
run_id = conn.start_workflow_execution(
|
||||
"test-domain", "uid-abcd1234", "test-workflow", "v1.0"
|
||||
)["runId"]
|
||||
|
||||
resp = conn.terminate_workflow_execution("test-domain", "uid-abcd1234",
|
||||
details="some details",
|
||||
reason="a more complete reason",
|
||||
run_id=run_id)
|
||||
resp.should.be.none
|
||||
|
||||
resp = conn.get_workflow_execution_history("test-domain", run_id, "uid-abcd1234")
|
||||
evt = resp["events"][-1]
|
||||
evt["eventType"].should.equal("WorkflowExecutionTerminated")
|
||||
attrs = evt["workflowExecutionTerminatedEventAttributes"]
|
||||
attrs["details"].should.equal("some details")
|
||||
attrs["reason"].should.equal("a more complete reason")
|
||||
attrs["cause"].should.equal("OPERATOR_INITIATED")
|
||||
|
||||
@mock_swf
|
||||
def test_terminate_workflow_execution_with_wrong_workflow_or_run_id():
|
||||
conn = setup_swf_environment()
|
||||
run_id = conn.start_workflow_execution(
|
||||
"test-domain", "uid-abcd1234", "test-workflow", "v1.0"
|
||||
)["runId"]
|
||||
|
||||
# terminate workflow execution
|
||||
resp = conn.terminate_workflow_execution("test-domain", "uid-abcd1234")
|
||||
|
||||
# already closed, with run_id
|
||||
conn.terminate_workflow_execution.when.called_with(
|
||||
"test-domain", "uid-abcd1234", run_id=run_id
|
||||
).should.throw(
|
||||
SWFUnknownResourceFault, "WorkflowExecution=[workflowId=uid-abcd1234, runId="
|
||||
)
|
||||
|
||||
# already closed, without run_id
|
||||
conn.terminate_workflow_execution.when.called_with(
|
||||
"test-domain", "uid-abcd1234"
|
||||
).should.throw(
|
||||
SWFUnknownResourceFault, "Unknown execution, workflowId = uid-abcd1234"
|
||||
)
|
||||
|
||||
# wrong workflow id
|
||||
conn.terminate_workflow_execution.when.called_with(
|
||||
"test-domain", "uid-non-existent"
|
||||
).should.throw(
|
||||
SWFUnknownResourceFault, "Unknown execution, workflowId = uid-non-existent"
|
||||
)
|
||||
|
||||
# wrong run_id
|
||||
conn.terminate_workflow_execution.when.called_with(
|
||||
"test-domain", "uid-abcd1234", run_id="foo"
|
||||
).should.throw(
|
||||
SWFUnknownResourceFault, "WorkflowExecution=[workflowId=uid-abcd1234, runId="
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue