コード例 #1
0
 def test_change_set_creation_fails(self):
     stub_cf, stubber = self._stubbed_cf_client()
     # first describe_stacks call will fail
     ds_params = {"StackName": SAM_CLI_STACK_NAME}
     stubber.add_client_error("describe_stacks",
                              service_error_code="ClientError",
                              expected_params=ds_params)
     # creating change set - fails
     ccs_params = {
         "StackName": SAM_CLI_STACK_NAME,
         "TemplateBody": _get_stack_template(),
         "Tags": [{
             "Key": "ManagedStackSource",
             "Value": "AwsSamCli"
         }],
         "ChangeSetType": "CREATE",
         "ChangeSetName": "InitialCreation",
     }
     stubber.add_client_error("create_change_set",
                              service_error_code="ClientError",
                              expected_params=ccs_params)
     stubber.activate()
     with self.assertRaises(ManagedStackError):
         _create_or_get_stack(stub_cf)
     stubber.assert_no_pending_responses()
     stubber.deactivate()
コード例 #2
0
 def test_stack_exists(self):
     stub_cf, stubber = self._stubbed_cf_client()
     ds_resp = {
         "Stacks": [{
             "StackName":
             SAM_CLI_STACK_NAME,
             "CreationTime":
             "2019-11-13",
             "StackStatus":
             "CREATE_COMPLETE",
             "Tags": [{
                 "Key": "ManagedStackSource",
                 "Value": "AwsSamCli"
             }],
             "Outputs": [{
                 "OutputKey": "SourceBucket",
                 "OutputValue": "generated-src-bucket"
             }],
         }]
     }
     ds_params = {"StackName": SAM_CLI_STACK_NAME}
     stubber.add_response("describe_stacks", ds_resp, ds_params)
     stubber.activate()
     _create_or_get_stack(stub_cf)
     stubber.assert_no_pending_responses()
     stubber.deactivate()
コード例 #3
0
 def test_stack_wrong_tag(self):
     stub_cf, stubber = self._stubbed_cf_client()
     ds_resp = {
         "Stacks": [{
             "StackName":
             SAM_CLI_STACK_NAME,
             "CreationTime":
             "2019-11-13",
             "StackStatus":
             "CREATE_COMPLETE",
             "Tags": [{
                 "Key": "ManagedStackSource",
                 "Value": "WHY WOULD YOU EVEN DO THIS"
             }],
             "Outputs": [{
                 "OutputKey": "SourceBucket",
                 "OutputValue": "generated-src-bucket"
             }],
         }]
     }
     ds_params = {"StackName": SAM_CLI_STACK_NAME}
     stubber.add_response("describe_stacks", ds_resp, ds_params)
     stubber.activate()
     with self.assertRaises(UserException):
         _create_or_get_stack(stub_cf)
     stubber.assert_no_pending_responses()
     stubber.deactivate()
コード例 #4
0
 def test_change_set_execution_fails(self):
     stub_cf, stubber = self._stubbed_cf_client()
     # first describe_stacks call will fail
     ds_params = {"StackName": SAM_CLI_STACK_NAME}
     stubber.add_client_error("describe_stacks", service_error_code="ClientError", expected_params=ds_params)
     # creating change set
     ccs_params = {
         "StackName": SAM_CLI_STACK_NAME,
         "TemplateBody": _get_stack_template(),
         "Tags": [{"Key": "ManagedStackSource", "Value": "AwsSamCli"}],
         "ChangeSetType": "CREATE",
         "ChangeSetName": "InitialCreation",
     }
     ccs_resp = {"Id": "id", "StackId": "aws-sam-cli-managed-default"}
     stubber.add_response("create_change_set", ccs_resp, ccs_params)
     # describe change set creation status for waiter
     dcs_params = {"ChangeSetName": "InitialCreation", "StackName": SAM_CLI_STACK_NAME}
     dcs_resp = {"Status": "CREATE_COMPLETE"}
     stubber.add_response("describe_change_set", dcs_resp, dcs_params)
     # executing change set - fails
     ecs_params = {"ChangeSetName": "InitialCreation", "StackName": SAM_CLI_STACK_NAME}
     stubber.add_client_error(
         "execute_change_set", service_error_code="InsufficientCapabilities", expected_params=ecs_params
     )
     stubber.activate()
     with self.assertRaises(ManagedStackError):
         _create_or_get_stack(stub_cf)
     stubber.assert_no_pending_responses()
     stubber.deactivate()
コード例 #5
0
    def test_stack_is_invalid_state(self, tags, outputs):
        stub_cf, stubber = self._stubbed_cf_client()
        ds_resp = {
            "Stacks": [{
                "StackName": SAM_CLI_STACK_NAME,
                "CreationTime": "2019-11-13",
                "StackStatus": "CREATE_FAILED"
            }]
        }

        # add Tags or Outputs information if it exists
        # Boto client is missing this information if stack is in invalid state
        if tags:
            ds_resp["Stacks"][0]["Tags"] = tags

        if outputs:
            ds_resp["Stacks"][0]["Outputs"] = outputs

        ds_params = {"StackName": SAM_CLI_STACK_NAME}
        stubber.add_response("describe_stacks", ds_resp, ds_params)
        stubber.activate()
        with self.assertRaises(UserException):
            _create_or_get_stack(stub_cf)
        stubber.assert_no_pending_responses()
        stubber.deactivate()
コード例 #6
0
 def test_new_stack(self):
     stub_cf, stubber = self._stubbed_cf_client()
     # first describe_stacks call will fail
     ds_params = {"StackName": SAM_CLI_STACK_NAME}
     stubber.add_client_error("describe_stacks",
                              service_error_code="ClientError",
                              expected_params=ds_params)
     # creating change set
     ccs_params = {
         "StackName": SAM_CLI_STACK_NAME,
         "TemplateBody": _get_stack_template(),
         "Tags": [{
             "Key": "ManagedStackSource",
             "Value": "AwsSamCli"
         }],
         "ChangeSetType": "CREATE",
         "ChangeSetName": "InitialCreation",
     }
     ccs_resp = {"Id": "id", "StackId": "aws-sam-cli-managed-default"}
     stubber.add_response("create_change_set", ccs_resp, ccs_params)
     # describe change set creation status for waiter
     dcs_params = {
         "ChangeSetName": "InitialCreation",
         "StackName": SAM_CLI_STACK_NAME
     }
     dcs_resp = {"Status": "CREATE_COMPLETE"}
     stubber.add_response("describe_change_set", dcs_resp, dcs_params)
     # executing change set
     ecs_params = {
         "ChangeSetName": "InitialCreation",
         "StackName": SAM_CLI_STACK_NAME
     }
     ecs_resp = {}
     stubber.add_response("execute_change_set", ecs_resp, ecs_params)
     # two describe_stacks calls will succeed - one for waiter, one direct
     post_create_ds_resp = {
         "Stacks": [{
             "StackName":
             SAM_CLI_STACK_NAME,
             "CreationTime":
             "2019-11-13",
             "StackStatus":
             "CREATE_COMPLETE",
             "Tags": [{
                 "Key": "ManagedStackSource",
                 "Value": "AwsSamCli"
             }],
             "Outputs": [{
                 "OutputKey": "SourceBucket",
                 "OutputValue": "generated-src-bucket"
             }],
         }]
     }
     stubber.add_response("describe_stacks", post_create_ds_resp, ds_params)
     stubber.add_response("describe_stacks", post_create_ds_resp, ds_params)
     stubber.activate()
     _create_or_get_stack(stub_cf)
     stubber.assert_no_pending_responses()
     stubber.deactivate()
コード例 #7
0
 def test_stack_missing_bucket(self):
     stub_cf, stubber = self._stubbed_cf_client()
     ds_resp = {
         "Stacks": [
             {
                 "StackName": SAM_CLI_STACK_NAME,
                 "CreationTime": "2019-11-13",
                 "StackStatus": "CREATE_COMPLETE",
                 "Tags": [{"Key": "ManagedStackSource", "Value": "AwsSamCli"}],
                 "Outputs": [],
             }
         ]
     }
     ds_params = {"StackName": SAM_CLI_STACK_NAME}
     stubber.add_response("describe_stacks", ds_resp, ds_params)
     stubber.activate()
     with self.assertRaises(UserException):
         _create_or_get_stack(stub_cf)
     stubber.assert_no_pending_responses()
     stubber.deactivate()