moto/tests/test_stepfunctions/parser/test_stepfunctions.py
2024-03-16 13:03:41 -01:00

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"