File: test_stepfunctions_versions.py

package info (click to toggle)
python-moto 5.1.18-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 116,520 kB
  • sloc: python: 636,725; javascript: 181; makefile: 39; sh: 3
file content (136 lines) | stat: -rw-r--r-- 5,013 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import json
from uuid import uuid4

import boto3
import pytest
from botocore.exceptions import ClientError

from moto import mock_aws
from tests import aws_verified
from tests.test_stepfunctions.parser import sfn_role_policy
from tests.test_stepfunctions.test_stepfunctions import simple_definition


@pytest.mark.parametrize("use_parser", [True, False], ids=["use_parser", "use_mock"])
def test_describe_state_machine_using_version_arn(use_parser):
    with mock_aws(config={"stepfunctions": {"execute_state_machine": use_parser}}):
        iam = boto3.client("iam", region_name="us-east-1")
        role_name = f"sfn_role_{str(uuid4())[0:6]}"
        sfn_role = iam.create_role(
            RoleName=role_name,
            AssumeRolePolicyDocument=json.dumps(sfn_role_policy),
            Path="/",
        )["Role"]["Arn"]

        client = boto3.client("stepfunctions", region_name="us-east-1")

        name = f"sfn_name_{str(uuid4())[0:6]}"
        response = client.create_state_machine(
            name=name, definition=simple_definition, roleArn=sfn_role, publish=True
        )
        arn = response["stateMachineArn"]
        version_arn1 = response["stateMachineVersionArn"]

        # Use the initial version to describe the state machine
        version1 = client.describe_state_machine(stateMachineArn=version_arn1)
        assert version1["loggingConfiguration"] == {"level": "OFF"}

        # Update the state machine
        update = client.update_state_machine(
            stateMachineArn=arn,
            loggingConfiguration={"level": "ALL"},
            publish=True,
        )
        version_arn2 = update["stateMachineVersionArn"]
        assert version_arn1 != version_arn2

        # Assert that we can retrieve the latest configuration, either by the regular ARN or by the version ARN
        latest = client.describe_state_machine(stateMachineArn=arn)
        assert latest["loggingConfiguration"] == {"level": "ALL"}
        version2 = client.describe_state_machine(stateMachineArn=version_arn2)
        assert version2["loggingConfiguration"] == {"level": "ALL"}

        # Assert that we can still describe the first version of the state machine
        version1 = client.describe_state_machine(stateMachineArn=version_arn1)
        assert version1["loggingConfiguration"] == {"level": "OFF"}


@aws_verified
@pytest.mark.aws_verified
def test_create_state_machine_with_version_description():
    iam = boto3.client("iam", region_name="us-east-1")
    role_name = f"sfn_role_{str(uuid4())[0:6]}"
    sfn_role = iam.create_role(
        RoleName=role_name,
        AssumeRolePolicyDocument=json.dumps(sfn_role_policy),
        Path="/",
    )["Role"]["Arn"]

    client = boto3.client("stepfunctions", region_name="us-east-1")

    try:
        name = f"sfn_name_{str(uuid4())[0:6]}"

        response = client.create_state_machine(
            name=name,
            definition=simple_definition,
            roleArn=sfn_role,
            versionDescription="first version",
            publish=True,
        )
        arn = response["stateMachineArn"]
        version_arn1 = response["stateMachineVersionArn"]

        # Use the initial version to describe the state machine
        sm = client.describe_state_machine(stateMachineArn=arn)
        assert "description" not in sm

        version = client.describe_state_machine(stateMachineArn=version_arn1)
        assert version["description"] == "first version"

        update = client.update_state_machine(
            stateMachineArn=arn,
            definition=simple_definition,
            versionDescription="second version",
            publish=True,
        )
        version_arn2 = update["stateMachineVersionArn"]

        version = client.describe_state_machine(stateMachineArn=version_arn2)
        assert version["description"] == "second version"
    finally:
        client.delete_state_machine(stateMachineArn=arn)
        iam.delete_role(RoleName=role_name)


@aws_verified
@pytest.mark.aws_verified
def test_create_unpublished_state_machine_with_version_description():
    iam = boto3.client("iam", region_name="us-east-1")
    role_name = f"sfn_role_{str(uuid4())[0:6]}"
    sfn_role = iam.create_role(
        RoleName=role_name,
        AssumeRolePolicyDocument=json.dumps(sfn_role_policy),
        Path="/",
    )["Role"]["Arn"]

    client = boto3.client("stepfunctions", region_name="us-east-1")

    try:
        name = f"sfn_name_{str(uuid4())[0:6]}"

        with pytest.raises(ClientError) as exc:
            client.create_state_machine(
                name=name,
                definition=simple_definition,
                roleArn=sfn_role,
                versionDescription="first version of statemachine",
            )
        err = exc.value.response["Error"]
        assert err["Code"] == "ValidationException"
        assert (
            err["Message"] == "Version description can only be set when publish is true"
        )

    finally:
        iam.delete_role(RoleName=role_name)