File: test_import_value.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 (90 lines) | stat: -rw-r--r-- 3,124 bytes parent folder | download
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
# Standard library modules
import unittest

# Third-party modules
import boto3
from botocore.exceptions import ClientError

# Package modules
from moto import mock_aws

AWS_REGION = "us-west-1"

SG_STACK_NAME = "simple-sg-stack"
SG_TEMPLATE = """
AWSTemplateFormatVersion: 2010-09-09
Description: Simple test CF template for moto_cloudformation


Resources:
  SimpleSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Description: "A simple security group"
    Properties:
      GroupName: simple-security-group
      GroupDescription: "A simple security group"
      SecurityGroupEgress:
        -
          Description: "Egress to remote HTTPS servers"
          CidrIp: 0.0.0.0/0
          IpProtocol: tcp
          FromPort: 443
          ToPort: 443

Outputs:
    SimpleSecurityGroupName:
        Value: !GetAtt SimpleSecurityGroup.GroupId
        Export:
            Name: "SimpleSecurityGroup"

"""

EC2_STACK_NAME = "simple-ec2-stack"
EC2_TEMPLATE = """
---
# The latest template format version is "2010-09-09" and as of 2018-04-09
# is currently the only valid value.
AWSTemplateFormatVersion: 2010-09-09
Description: Simple test CF template for moto_cloudformation


Resources:
  SimpleInstance:
    Type: AWS::EC2::Instance
    Properties:
        ImageId: ami-03cf127a
        InstanceType: t2.micro
        SecurityGroups: !Split [',', !ImportValue SimpleSecurityGroup]
"""


class TestSimpleInstance(unittest.TestCase):
    def test_simple_instance(self):
        """Test that we can create a simple CloudFormation stack that imports values from an existing CloudFormation stack"""
        with mock_aws():
            client = boto3.client("cloudformation", region_name=AWS_REGION)
            client.create_stack(StackName=SG_STACK_NAME, TemplateBody=SG_TEMPLATE)
            response = client.create_stack(
                StackName=EC2_STACK_NAME, TemplateBody=EC2_TEMPLATE
            )
            self.assertIn("StackId", response)
            response = client.describe_stacks(StackName=response["StackId"])
            self.assertIn("Stacks", response)
            stack_info = response["Stacks"]
            self.assertEqual(1, len(stack_info))
            self.assertIn("StackName", stack_info[0])
            self.assertEqual(EC2_STACK_NAME, stack_info[0]["StackName"])

    def test_simple_instance_missing_export(self):
        """Test that we get an exception if a CloudFormation stack tries to imports a non-existent export value"""
        with mock_aws():
            client = boto3.client("cloudformation", region_name=AWS_REGION)
            with self.assertRaises(ClientError) as e:
                client.create_stack(StackName=EC2_STACK_NAME, TemplateBody=EC2_TEMPLATE)
            self.assertIn("Error", e.exception.response)
            self.assertIn("Code", e.exception.response["Error"])
            self.assertEqual("ValidationError", e.exception.response["Error"]["Code"])
            expected_error_message = "No export named SimpleSecurityGroup found."
            self.assertEqual(
                expected_error_message, e.exception.response["Error"]["Message"]
            )