131 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import boto3
 | |
| import pytest
 | |
| import sure  # noqa # pylint: disable=unused-import
 | |
| from botocore.exceptions import ClientError
 | |
| from moto import mock_ec2
 | |
| 
 | |
| 
 | |
| @mock_ec2
 | |
| def test_create_vpn_connections_boto3():
 | |
|     client = boto3.client("ec2", region_name="us-east-1")
 | |
|     vpn_connection = client.create_vpn_connection(
 | |
|         Type="ipsec.1", VpnGatewayId="vgw-0123abcd", CustomerGatewayId="cgw-0123abcd"
 | |
|     )["VpnConnection"]
 | |
|     vpn_connection["VpnConnectionId"].should.match(r"vpn-\w+")
 | |
|     vpn_connection["Type"].should.equal("ipsec.1")
 | |
| 
 | |
| 
 | |
| @mock_ec2
 | |
| def test_delete_vpn_connections_boto3():
 | |
|     client = boto3.client("ec2", region_name="us-east-1")
 | |
|     vpn_connection = client.create_vpn_connection(
 | |
|         Type="ipsec.1", VpnGatewayId="vgw-0123abcd", CustomerGatewayId="cgw-0123abcd"
 | |
|     )["VpnConnection"]
 | |
| 
 | |
|     conns = retrieve_all_vpncs(client)
 | |
|     [c["VpnConnectionId"] for c in conns].should.contain(
 | |
|         vpn_connection["VpnConnectionId"]
 | |
|     )
 | |
| 
 | |
|     client.delete_vpn_connection(VpnConnectionId=vpn_connection["VpnConnectionId"])
 | |
| 
 | |
|     conns = retrieve_all_vpncs(client)
 | |
|     [c["VpnConnectionId"] for c in conns].should.contain(
 | |
|         vpn_connection["VpnConnectionId"]
 | |
|     )
 | |
|     my_cnx = [
 | |
|         c for c in conns if c["VpnConnectionId"] == vpn_connection["VpnConnectionId"]
 | |
|     ][0]
 | |
|     my_cnx.should.have.key("State").equal("deleted")
 | |
| 
 | |
| 
 | |
| @mock_ec2
 | |
| def test_delete_vpn_connections_bad_id_boto3():
 | |
|     client = boto3.client("ec2", region_name="us-east-1")
 | |
|     with pytest.raises(ClientError) as ex:
 | |
|         client.delete_vpn_connection(VpnConnectionId="vpn-0123abcd")
 | |
|     ex.value.response["ResponseMetadata"]["HTTPStatusCode"].should.equal(400)
 | |
|     ex.value.response["ResponseMetadata"].should.have.key("RequestId")
 | |
|     ex.value.response["Error"]["Code"].should.equal("InvalidVpnConnectionID.NotFound")
 | |
| 
 | |
| 
 | |
| @mock_ec2
 | |
| def test_create_vpn_connection_with_vpn_gateway():
 | |
|     client = boto3.client("ec2", region_name="us-east-1")
 | |
| 
 | |
|     vpn_gateway = client.create_vpn_gateway(Type="ipsec.1").get("VpnGateway", {})
 | |
|     customer_gateway = client.create_customer_gateway(
 | |
|         Type="ipsec.1", PublicIp="205.251.242.54", BgpAsn=65534
 | |
|     ).get("CustomerGateway", {})
 | |
|     vpn_connection = client.create_vpn_connection(
 | |
|         Type="ipsec.1",
 | |
|         VpnGatewayId=vpn_gateway["VpnGatewayId"],
 | |
|         CustomerGatewayId=customer_gateway["CustomerGatewayId"],
 | |
|     ).get("VpnConnection", {})
 | |
| 
 | |
|     vpn_connection["Type"].should.equal("ipsec.1")
 | |
|     vpn_connection["VpnGatewayId"].should.equal(vpn_gateway["VpnGatewayId"])
 | |
|     vpn_connection["CustomerGatewayId"].should.equal(
 | |
|         customer_gateway["CustomerGatewayId"]
 | |
|     )
 | |
| 
 | |
| 
 | |
| @mock_ec2
 | |
| def test_describe_vpn_connections_boto3():
 | |
|     client = boto3.client("ec2", region_name="us-east-1")
 | |
| 
 | |
|     vpn_gateway = client.create_vpn_gateway(Type="ipsec.1").get("VpnGateway", {})
 | |
|     customer_gateway = client.create_customer_gateway(
 | |
|         Type="ipsec.1", PublicIp="205.251.242.54", BgpAsn=65534
 | |
|     ).get("CustomerGateway", {})
 | |
|     vpn_connection1 = client.create_vpn_connection(
 | |
|         Type="ipsec.1",
 | |
|         VpnGatewayId=vpn_gateway["VpnGatewayId"],
 | |
|         CustomerGatewayId=customer_gateway["CustomerGatewayId"],
 | |
|     )["VpnConnection"]
 | |
|     vpn_connection2 = client.create_vpn_connection(
 | |
|         Type="ipsec.1",
 | |
|         VpnGatewayId=vpn_gateway["VpnGatewayId"],
 | |
|         CustomerGatewayId=customer_gateway["CustomerGatewayId"],
 | |
|     )["VpnConnection"]
 | |
| 
 | |
|     conns = retrieve_all_vpncs(client)
 | |
|     [c["VpnConnectionId"] for c in conns].should.contain(
 | |
|         vpn_connection1["VpnConnectionId"]
 | |
|     )
 | |
|     [c["VpnConnectionId"] for c in conns].should.contain(
 | |
|         vpn_connection2["VpnConnectionId"]
 | |
|     )
 | |
| 
 | |
|     conns = client.describe_vpn_connections(
 | |
|         VpnConnectionIds=[vpn_connection2["VpnConnectionId"]]
 | |
|     )["VpnConnections"]
 | |
| 
 | |
|     conns[0]["VpnConnectionId"].should.equal(vpn_connection2["VpnConnectionId"])
 | |
|     conns[0]["VpnGatewayId"].should.equal(vpn_gateway["VpnGatewayId"])
 | |
|     conns[0]["Type"].should.equal("ipsec.1")
 | |
|     conns[0]["CustomerGatewayId"].should.equal(customer_gateway["CustomerGatewayId"])
 | |
|     conns[0]["State"].should.equal("available")
 | |
| 
 | |
| 
 | |
| @mock_ec2
 | |
| def test_describe_vpn_connections_unknown():
 | |
|     client = boto3.client("ec2", region_name="us-east-1")
 | |
| 
 | |
|     with pytest.raises(ClientError) as ex:
 | |
|         client.describe_vpn_connections(VpnConnectionIds=["?"])
 | |
|     err = ex.value.response["Error"]
 | |
|     err["Message"].should.equal("The vpnConnection ID '?' does not exist")
 | |
|     err["Code"].should.equal("InvalidVpnConnectionID.NotFound")
 | |
| 
 | |
| 
 | |
| def retrieve_all_vpncs(client, filters=[]):  # pylint: disable=W0102
 | |
|     resp = client.describe_vpn_connections(Filters=filters)
 | |
|     all_vpncs = resp["VpnConnections"]
 | |
|     token = resp.get("NextToken")
 | |
|     while token:
 | |
|         resp = client.describe_vpn_connections(NextToken=token, Filters=filters)
 | |
|         all_vpncs.extend(resp["VpnConnections"])
 | |
|         token = resp.get("NextToken")
 | |
|     return all_vpncs
 |