from __future__ import unicode_literals import boto3 import sure # noqa from moto import mock_ec2 @mock_ec2 def test_describe_nat_gateways(): conn = boto3.client('ec2', 'us-east-1') response = conn.describe_nat_gateways() response['NatGateways'].should.have.length_of(0) @mock_ec2 def test_create_nat_gateway(): conn = boto3.client('ec2', 'us-east-1') vpc = conn.create_vpc(CidrBlock='10.0.0.0/16') vpc_id = vpc['Vpc']['VpcId'] subnet = conn.create_subnet( VpcId=vpc_id, CidrBlock='10.0.1.0/27', AvailabilityZone='us-east-1a', ) allocation_id = conn.allocate_address(Domain='vpc')['AllocationId'] subnet_id = subnet['Subnet']['SubnetId'] response = conn.create_nat_gateway( SubnetId=subnet_id, AllocationId=allocation_id, ) response['NatGateway']['VpcId'].should.equal(vpc_id) response['NatGateway']['SubnetId'].should.equal(subnet_id) response['NatGateway']['State'].should.equal('available') @mock_ec2 def test_delete_nat_gateway(): conn = boto3.client('ec2', 'us-east-1') vpc = conn.create_vpc(CidrBlock='10.0.0.0/16') vpc_id = vpc['Vpc']['VpcId'] subnet = conn.create_subnet( VpcId=vpc_id, CidrBlock='10.0.1.0/27', AvailabilityZone='us-east-1a', ) allocation_id = conn.allocate_address(Domain='vpc')['AllocationId'] subnet_id = subnet['Subnet']['SubnetId'] nat_gateway = conn.create_nat_gateway( SubnetId=subnet_id, AllocationId=allocation_id, ) nat_gateway_id = nat_gateway['NatGateway']['NatGatewayId'] response = conn.delete_nat_gateway(NatGatewayId=nat_gateway_id) response['ResponseMetadata'].pop('HTTPHeaders', None) # this is hard to match against, so remove it response.should.equal({ 'NatGatewayId': nat_gateway_id, 'ResponseMetadata': { 'HTTPStatusCode': 200, 'RequestId': '741fc8ab-6ebe-452b-b92b-example' } }) @mock_ec2 def test_create_and_describe_nat_gateway(): conn = boto3.client('ec2', 'us-east-1') vpc = conn.create_vpc(CidrBlock='10.0.0.0/16') vpc_id = vpc['Vpc']['VpcId'] subnet = conn.create_subnet( VpcId=vpc_id, CidrBlock='10.0.1.0/27', AvailabilityZone='us-east-1a', ) allocation_id = conn.allocate_address(Domain='vpc')['AllocationId'] subnet_id = subnet['Subnet']['SubnetId'] create_response = conn.create_nat_gateway( SubnetId=subnet_id, AllocationId=allocation_id, ) nat_gateway_id = create_response['NatGateway']['NatGatewayId'] describe_response = conn.describe_nat_gateways() enis = conn.describe_network_interfaces()['NetworkInterfaces'] eni_id = enis[0]['NetworkInterfaceId'] public_ip = conn.describe_addresses(AllocationIds=[allocation_id])['Addresses'][0]['PublicIp'] describe_response['NatGateways'].should.have.length_of(1) describe_response['NatGateways'][0]['NatGatewayId'].should.equal(nat_gateway_id) describe_response['NatGateways'][0]['State'].should.equal('available') describe_response['NatGateways'][0]['SubnetId'].should.equal(subnet_id) describe_response['NatGateways'][0]['VpcId'].should.equal(vpc_id) describe_response['NatGateways'][0]['NatGatewayAddresses'][0]['AllocationId'].should.equal(allocation_id) describe_response['NatGateways'][0]['NatGatewayAddresses'][0]['NetworkInterfaceId'].should.equal(eni_id) assert describe_response['NatGateways'][0]['NatGatewayAddresses'][0]['PrivateIp'].startswith('10.') describe_response['NatGateways'][0]['NatGatewayAddresses'][0]['PublicIp'].should.equal(public_ip)