53 lines
2.0 KiB
Python
53 lines
2.0 KiB
Python
import boto3
|
|
import json
|
|
import sure # noqa # pylint: disable=unused-import
|
|
|
|
from moto import mock_cloudformation, mock_ec2, mock_redshift
|
|
from tests.test_cloudformation.fixtures import redshift
|
|
|
|
|
|
@mock_ec2
|
|
@mock_redshift
|
|
@mock_cloudformation
|
|
def test_redshift_stack():
|
|
redshift_template_json = json.dumps(redshift.template)
|
|
|
|
ec2 = boto3.client("ec2", region_name="us-west-2")
|
|
cf = boto3.client("cloudformation", region_name="us-west-2")
|
|
cf.create_stack(
|
|
StackName="redshift_stack",
|
|
TemplateBody=redshift_template_json,
|
|
Parameters=[
|
|
{"ParameterKey": "DatabaseName", "ParameterValue": "mydb"},
|
|
{"ParameterKey": "ClusterType", "ParameterValue": "multi-node"},
|
|
{"ParameterKey": "NumberOfNodes", "ParameterValue": "2"},
|
|
{"ParameterKey": "NodeType", "ParameterValue": "dw1.xlarge"},
|
|
{"ParameterKey": "MasterUsername", "ParameterValue": "myuser"},
|
|
{"ParameterKey": "MasterUserPassword", "ParameterValue": "mypass"},
|
|
{"ParameterKey": "InboundTraffic", "ParameterValue": "10.0.0.1/16"},
|
|
{"ParameterKey": "PortNumber", "ParameterValue": "5439"},
|
|
],
|
|
)
|
|
|
|
redshift_conn = boto3.client("redshift", region_name="us-west-2")
|
|
|
|
cluster_res = redshift_conn.describe_clusters()
|
|
clusters = cluster_res["Clusters"]
|
|
clusters.should.have.length_of(1)
|
|
cluster = clusters[0]
|
|
cluster["DBName"].should.equal("mydb")
|
|
cluster["NumberOfNodes"].should.equal(2)
|
|
cluster["NodeType"].should.equal("dw1.xlarge")
|
|
cluster["MasterUsername"].should.equal("myuser")
|
|
cluster["Endpoint"]["Port"].should.equal(5439)
|
|
cluster["VpcSecurityGroups"].should.have.length_of(1)
|
|
security_group_id = cluster["VpcSecurityGroups"][0]["VpcSecurityGroupId"]
|
|
|
|
groups = ec2.describe_security_groups(GroupIds=[security_group_id])[
|
|
"SecurityGroups"
|
|
]
|
|
groups.should.have.length_of(1)
|
|
group = groups[0]
|
|
group["IpPermissions"].should.have.length_of(1)
|
|
group["IpPermissions"][0]["IpRanges"][0]["CidrIp"].should.equal("10.0.0.1/16")
|