import boto3 import pytest from botocore.exceptions import ClientError from moto import mock_ec2 @mock_ec2 def test_create(): ec2 = boto3.resource("ec2", region_name="us-west-1") client = boto3.client("ec2", region_name="us-west-1") vpc = list(ec2.vpcs.all())[0] res = client.create_egress_only_internet_gateway(VpcId=vpc.id) gateway = res["EgressOnlyInternetGateway"] assert gateway["EgressOnlyInternetGatewayId"].startswith("eigw-") assert gateway["Tags"] == [] assert "Attachments" in gateway assert len(gateway["Attachments"]) == 1 assert gateway["Attachments"][0] == {"State": "attached", "VpcId": vpc.id} @mock_ec2 def test_create_with_unknown_vpc(): client = boto3.client("ec2", region_name="us-west-1") with pytest.raises(ClientError) as ex: client.create_egress_only_internet_gateway(VpcId="vpc-says-what") err = ex.value.response["Error"] assert err["Code"] == "InvalidVpcID.NotFound" assert err["Message"] == "VpcID vpc-says-what does not exist." @mock_ec2 def test_describe_all(): ec2 = boto3.resource("ec2", region_name="us-west-1") client = boto3.client("ec2", region_name="us-west-1") vpc = list(ec2.vpcs.all())[0] gw1 = client.create_egress_only_internet_gateway(VpcId=vpc.id)[ "EgressOnlyInternetGateway" ] gw2 = client.create_egress_only_internet_gateway(VpcId=vpc.id)[ "EgressOnlyInternetGateway" ] gateways = client.describe_egress_only_internet_gateways()[ "EgressOnlyInternetGateways" ] assert len(gateways) >= 2, "Should have two recently created gateways" assert gw1 in gateways assert gw2 in gateways @mock_ec2 def test_describe_one(): ec2 = boto3.resource("ec2", region_name="us-west-1") client = boto3.client("ec2", region_name="us-west-1") vpc = list(ec2.vpcs.all())[0] gw1 = client.create_egress_only_internet_gateway(VpcId=vpc.id)[ "EgressOnlyInternetGateway" ] gw1_id = gw1["EgressOnlyInternetGatewayId"] client.create_egress_only_internet_gateway(VpcId=vpc.id)[ "EgressOnlyInternetGateway" ] gw3 = client.create_egress_only_internet_gateway(VpcId=vpc.id)[ "EgressOnlyInternetGateway" ] gw3_id = gw3["EgressOnlyInternetGatewayId"] gateways = client.describe_egress_only_internet_gateways( EgressOnlyInternetGatewayIds=[gw1_id, gw3_id] )["EgressOnlyInternetGateways"] assert len(gateways) == 2 assert gw1 in gateways assert gw3 in gateways @mock_ec2 def test_create_and_delete(): ec2 = boto3.resource("ec2", region_name="us-west-1") client = boto3.client("ec2", region_name="us-west-1") vpc = list(ec2.vpcs.all())[0] gw1 = client.create_egress_only_internet_gateway(VpcId=vpc.id)[ "EgressOnlyInternetGateway" ] gw1_id = gw1["EgressOnlyInternetGatewayId"] assert ( len( client.describe_egress_only_internet_gateways( EgressOnlyInternetGatewayIds=[gw1_id] )["EgressOnlyInternetGateways"] ) == 1 ) client.delete_egress_only_internet_gateway(EgressOnlyInternetGatewayId=gw1_id) assert ( len( client.describe_egress_only_internet_gateways( EgressOnlyInternetGatewayIds=[gw1_id] )["EgressOnlyInternetGateways"] ) == 0 )