| 
									
										
										
										
											2021-10-04 13:47:40 +00:00
										 |  |  | import boto3 | 
					
						
							|  |  |  | import json | 
					
						
							| 
									
										
										
										
											2021-10-18 19:44:29 +00:00
										 |  |  | import sure  # noqa # pylint: disable=unused-import | 
					
						
							| 
									
										
										
										
											2021-10-04 13:47:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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") |