EC2 - Additional unit tests (#4291)

This commit is contained in:
Bert Blommers 2021-09-15 21:07:04 +00:00 committed by GitHub
parent da6c5f667b
commit a147eeac67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 231 additions and 0 deletions

View File

@ -0,0 +1,89 @@
import boto3
import sure # noqa
import pytest
from botocore.exceptions import ClientError
from moto import mock_ec2
from moto.core import ACCOUNT_ID
@mock_ec2
def test_describe_carrier_gateways_none():
ec2 = boto3.client("ec2", region_name="us-east-1")
ec2.describe_carrier_gateways()["CarrierGateways"].should.equal([])
@mock_ec2
def test_describe_carrier_gateways_multiple():
client = boto3.client("ec2", region_name="us-east-1")
ec2 = boto3.resource("ec2", region_name="us-east-1")
vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
cg1 = client.create_carrier_gateway(VpcId=vpc.id)["CarrierGateway"]
cg2 = client.create_carrier_gateway(VpcId=vpc.id)["CarrierGateway"]
client.describe_carrier_gateways()["CarrierGateways"].should.have.length_of(2)
find_one = client.describe_carrier_gateways(
CarrierGatewayIds=[cg1["CarrierGatewayId"]]
)["CarrierGateways"]
find_one.should.have.length_of(1)
find_one[0]["CarrierGatewayId"].should.equal(cg1["CarrierGatewayId"])
find_one = client.describe_carrier_gateways(
CarrierGatewayIds=[cg2["CarrierGatewayId"], "non-existant"]
)["CarrierGateways"]
find_one.should.have.length_of(1)
find_one[0]["CarrierGatewayId"].should.equal(cg2["CarrierGatewayId"])
@mock_ec2
def test_create_carrier_gateways_without_tags():
client = boto3.client("ec2", region_name="us-east-1")
ec2 = boto3.resource("ec2", region_name="us-east-1")
vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
cg = client.create_carrier_gateway(VpcId=vpc.id)["CarrierGateway"]
cg.should.have.key("CarrierGatewayId").match("cagw-[a-z0-9]+")
cg.should.have.key("VpcId").equal(vpc.id)
cg.should.have.key("State").equal("available")
cg.should.have.key("OwnerId").equal(ACCOUNT_ID)
cg.should.have.key("Tags").equal([])
@mock_ec2
def test_create_carrier_gateways_with_tags():
client = boto3.client("ec2", region_name="us-east-1")
ec2 = boto3.resource("ec2", region_name="us-east-1")
vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
cg = client.create_carrier_gateway(
VpcId=vpc.id,
TagSpecifications=[
{"ResourceType": "CarrierGateway", "Tags": [{"Key": "tk", "Value": "tv"}]}
],
)["CarrierGateway"]
cg.should.have.key("CarrierGatewayId").match("cagw-[a-z0-9]+")
cg.should.have.key("VpcId").equal(vpc.id)
cg.should.have.key("State").equal("available")
cg.should.have.key("OwnerId").equal(ACCOUNT_ID)
cg.should.have.key("Tags").should.equal([{"Key": "tk", "Value": "tv"}])
@mock_ec2
def test_create_carrier_gateways_invalid_vpc():
ec2 = boto3.client("ec2", region_name="us-east-1")
with pytest.raises(ClientError) as exc:
ec2.create_carrier_gateway(VpcId="vpc-asdf")
err = exc.value.response["Error"]
err["Code"].should.equal("InvalidVpcID.NotFound")
err["Message"].should.equal("VpcID vpc-asdf does not exist.")
@mock_ec2
def test_delete_carrier_gateways():
client = boto3.client("ec2", region_name="us-east-1")
ec2 = boto3.resource("ec2", region_name="us-east-1")
vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
cg = client.create_carrier_gateway(VpcId=vpc.id)["CarrierGateway"]
client.delete_carrier_gateway(CarrierGatewayId=cg["CarrierGatewayId"])
client.describe_carrier_gateways()["CarrierGateways"].should.equal([])

View File

@ -1071,6 +1071,87 @@ def test_revoke_security_group_egress():
sg.ip_permissions_egress.should.have.length_of(0) sg.ip_permissions_egress.should.have.length_of(0)
@mock_ec2
def test_update_security_group_rule_descriptions_egress():
ec2 = boto3.resource("ec2", "us-east-1")
client = boto3.client("ec2", "us-east-1")
vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
sg = ec2.create_security_group(
Description="Test SG", GroupName="test-sg", VpcId=vpc.id
)
sg_id = sg.id
ip_ranges = client.describe_security_groups(GroupIds=[sg_id])["SecurityGroups"][0][
"IpPermissionsEgress"
][0]["IpRanges"]
ip_ranges.should.have.length_of(1)
ip_ranges[0].should.equal({"CidrIp": "0.0.0.0/0"})
client.update_security_group_rule_descriptions_egress(
GroupName="test-sg",
IpPermissions=[
{
"IpProtocol": "-1",
"IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "my d3scription"}],
"UserIdGroupPairs": [],
"Ipv6Ranges": [],
"PrefixListIds": [],
}
],
)
ip_ranges = client.describe_security_groups(GroupIds=[sg_id])["SecurityGroups"][0][
"IpPermissionsEgress"
][0]["IpRanges"]
ip_ranges.should.have.length_of(1)
ip_ranges[0].should.equal({"CidrIp": "0.0.0.0/0", "Description": "my d3scription"})
@mock_ec2
def test_update_security_group_rule_descriptions_ingress():
ec2 = boto3.resource("ec2", "us-east-1")
client = boto3.client("ec2", "us-east-1")
vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
sg = ec2.create_security_group(
Description="Test SG", GroupName="test-sg", VpcId=vpc.id
)
sg_id = sg.id
ip_permissions = [
{
"IpProtocol": "tcp",
"FromPort": 27017,
"ToPort": 27017,
"IpRanges": [{"CidrIp": "1.2.3.4/32", "Description": "first desc"}],
}
]
client.authorize_security_group_ingress(GroupId=sg_id, IpPermissions=ip_permissions)
ip_ranges = client.describe_security_groups(GroupIds=[sg_id])["SecurityGroups"][0][
"IpPermissions"
][0]["IpRanges"]
ip_ranges.should.have.length_of(1)
ip_ranges[0].should.equal({"CidrIp": "1.2.3.4/32", "Description": "first desc"})
client.update_security_group_rule_descriptions_ingress(
GroupName="test-sg",
IpPermissions=[
{
"IpProtocol": "tcp",
"FromPort": 27017,
"ToPort": 27017,
"IpRanges": [{"CidrIp": "1.2.3.4/32", "Description": "second desc"}],
}
],
)
ip_ranges = client.describe_security_groups(GroupIds=[sg_id])["SecurityGroups"][0][
"IpPermissions"
][0]["IpRanges"]
ip_ranges.should.have.length_of(1)
ip_ranges[0].should.equal({"CidrIp": "1.2.3.4/32", "Description": "second desc"})
@mock_ec2 @mock_ec2
def test_non_existent_security_group_raises_error_on_authorize(): def test_non_existent_security_group_raises_error_on_authorize():
client = boto3.client("ec2", "us-east-1") client = boto3.client("ec2", "us-east-1")

View File

@ -731,3 +731,64 @@ def test_describe_subnets_by_state():
).get("Subnets", []) ).get("Subnets", [])
for subnet in subnets: for subnet in subnets:
subnet["State"].should.equal("available") subnet["State"].should.equal("available")
@mock_ec2
def test_associate_subnet_cidr_block():
ec2 = boto3.resource("ec2", region_name="us-west-1")
client = boto3.client("ec2", region_name="us-west-1")
vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
subnet_object = ec2.create_subnet(
VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-1a"
)
subnets = client.describe_subnets(SubnetIds=[subnet_object.id])["Subnets"]
association_set = subnets[0]["Ipv6CidrBlockAssociationSet"]
association_set.should.equal([])
res = client.associate_subnet_cidr_block(
Ipv6CidrBlock="1080::1:200C:417A/112", SubnetId=subnet_object.id
)
res.should.have.key("Ipv6CidrBlockAssociation")
association = res["Ipv6CidrBlockAssociation"]
association.should.have.key("AssociationId").match("subnet-cidr-assoc-[a-z0-9]+")
association.should.have.key("Ipv6CidrBlock").equals("1080::1:200C:417A/112")
association.should.have.key("Ipv6CidrBlockState").equals({"State": "associated"})
subnets = client.describe_subnets(SubnetIds=[subnet_object.id])["Subnets"]
association_set = subnets[0]["Ipv6CidrBlockAssociationSet"]
association_set.should.have.length_of(1)
association_set[0].should.have.key("AssociationId").equal(
association["AssociationId"]
)
association_set[0].should.have.key("Ipv6CidrBlock").equals("1080::1:200C:417A/112")
@mock_ec2
def test_disassociate_subnet_cidr_block():
ec2 = boto3.resource("ec2", region_name="us-west-1")
client = boto3.client("ec2", region_name="us-west-1")
vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16")
subnet_object = ec2.create_subnet(
VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-1a"
)
client.associate_subnet_cidr_block(
Ipv6CidrBlock="1080::1:200C:417A/111", SubnetId=subnet_object.id
)
association_id = client.associate_subnet_cidr_block(
Ipv6CidrBlock="1080::1:200C:417A/999", SubnetId=subnet_object.id
)["Ipv6CidrBlockAssociation"]["AssociationId"]
subnets = client.describe_subnets(SubnetIds=[subnet_object.id])["Subnets"]
association_set = subnets[0]["Ipv6CidrBlockAssociationSet"]
association_set.should.have.length_of(2)
client.disassociate_subnet_cidr_block(AssociationId=association_id)
subnets = client.describe_subnets(SubnetIds=[subnet_object.id])["Subnets"]
association_set = subnets[0]["Ipv6CidrBlockAssociationSet"]
association_set.should.have.length_of(1)
association_set[0]["Ipv6CidrBlock"].should.equal("1080::1:200C:417A/111")