73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
|
import json
|
||
|
from time import sleep
|
||
|
from unittest import SkipTest
|
||
|
|
||
|
import boto3
|
||
|
|
||
|
from moto import mock_aws, settings
|
||
|
from tests import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
|
||
|
|
||
|
failure_definition = {
|
||
|
"Comment": "An example of the Amazon States Language using a choice state.",
|
||
|
"StartAt": "DefaultState",
|
||
|
"States": {
|
||
|
"DefaultState": {
|
||
|
"Type": "Fail",
|
||
|
"Error": "DefaultStateError",
|
||
|
"Cause": "No Matches!",
|
||
|
}
|
||
|
},
|
||
|
}
|
||
|
|
||
|
|
||
|
@mock_aws(config={"stepfunctions": {"execute_state_machine": True}})
|
||
|
def test_state_machine_with_simple_failure_state():
|
||
|
if settings.TEST_SERVER_MODE:
|
||
|
raise SkipTest("Don't need to test this in ServerMode")
|
||
|
client = boto3.client("stepfunctions", region_name="us-east-1")
|
||
|
execution_arn, state_machine_arn = _start_execution(client, failure_definition)
|
||
|
|
||
|
for _ in range(5):
|
||
|
execution = client.describe_execution(executionArn=execution_arn)
|
||
|
if execution["status"] == "FAILED":
|
||
|
assert "stopDate" in execution
|
||
|
assert execution["error"] == "DefaultStateError"
|
||
|
assert execution["cause"] == "No Matches!"
|
||
|
|
||
|
history = client.get_execution_history(executionArn=execution_arn)
|
||
|
assert len(history["events"]) == 3
|
||
|
assert [e["type"] for e in history["events"]] == [
|
||
|
"ExecutionStarted",
|
||
|
"FailStateEntered",
|
||
|
"ExecutionFailed",
|
||
|
]
|
||
|
|
||
|
executions = client.list_executions(stateMachineArn=state_machine_arn)[
|
||
|
"executions"
|
||
|
]
|
||
|
assert len(executions) == 1
|
||
|
assert executions[0]["executionArn"] == execution_arn
|
||
|
assert executions[0]["stateMachineArn"] == state_machine_arn
|
||
|
assert executions[0]["status"] == "FAILED"
|
||
|
|
||
|
break
|
||
|
sleep(0.2)
|
||
|
else:
|
||
|
assert False, "Should have failed already"
|
||
|
|
||
|
|
||
|
def _start_execution(client, definition):
|
||
|
name = "sfn_name"
|
||
|
#
|
||
|
response = client.create_state_machine(
|
||
|
name=name, definition=json.dumps(definition), roleArn=_get_default_role()
|
||
|
)
|
||
|
state_machine_arn = response["stateMachineArn"]
|
||
|
execution = client.start_execution(name="exec1", stateMachineArn=state_machine_arn)
|
||
|
execution_arn = execution["executionArn"]
|
||
|
return execution_arn, state_machine_arn
|
||
|
|
||
|
|
||
|
def _get_default_role():
|
||
|
return "arn:aws:iam::" + ACCOUNT_ID + ":role/unknown_sf_role"
|