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")
 |