moto/tests/test_ec2/test_availability_zones_and_regions.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

104 lines
3.4 KiB
Python
Raw Normal View History

import boto3
import pytest
from botocore.exceptions import ClientError
2024-01-07 12:03:33 +00:00
from moto import mock_aws
2024-01-07 12:03:33 +00:00
@mock_aws
def test_boto3_describe_regions():
ec2 = boto3.client("ec2", "us-east-1")
resp = ec2.describe_regions()
assert len(resp["Regions"]) > 1
for rec in resp["Regions"]:
assert rec["RegionName"] in rec["Endpoint"]
2017-12-28 21:02:58 +00:00
test_region = "us-east-1"
resp = ec2.describe_regions(RegionNames=[test_region])
assert len(resp["Regions"]) == 1
assert resp["Regions"][0]["RegionName"] == test_region
assert resp["Regions"][0]["OptInStatus"] == "opt-in-not-required"
test_region = "ap-east-1"
resp = ec2.describe_regions(RegionNames=[test_region])
assert len(resp["Regions"]) == 1
assert resp["Regions"][0]["RegionName"] == test_region
assert resp["Regions"][0]["OptInStatus"] == "not-opted-in"
2017-12-28 21:02:58 +00:00
2024-01-07 12:03:33 +00:00
@mock_aws
def test_boto3_availability_zones():
ec2 = boto3.client("ec2", "us-east-1")
resp = ec2.describe_regions()
regions = [r["RegionName"] for r in resp["Regions"]]
for region in regions:
conn = boto3.client("ec2", region)
resp = conn.describe_availability_zones()
for rec in resp["AvailabilityZones"]:
assert region in rec["ZoneName"]
2024-01-07 12:03:33 +00:00
@mock_aws
def test_availability_zones__parameters():
us_east = boto3.client("ec2", "us-east-1")
zones = us_east.describe_availability_zones(ZoneNames=["us-east-1b"])[
"AvailabilityZones"
]
assert len(zones) == 1
assert zones[0]["ZoneId"] == "use1-az1"
zones = us_east.describe_availability_zones(ZoneNames=["us-east-1a", "us-east-1b"])[
"AvailabilityZones"
]
assert len(zones) == 2
assert set([zone["ZoneId"] for zone in zones]) == {"use1-az1", "use1-az6"}
zones = us_east.describe_availability_zones(ZoneIds=["use1-az1"])[
"AvailabilityZones"
]
assert len(zones) == 1
assert zones[0]["ZoneId"] == "use1-az1"
zones = us_east.describe_availability_zones(
Filters=[{"Name": "state", "Values": ["unavailable"]}]
)["AvailabilityZones"]
assert zones == []
zones = us_east.describe_availability_zones(
Filters=[{"Name": "zone-id", "Values": ["use1-az2"]}]
)["AvailabilityZones"]
assert len(zones) == 1
assert zones[0]["ZoneId"] == "use1-az2"
zones = us_east.describe_availability_zones(
Filters=[{"Name": "zone-name", "Values": ["us-east-1b"]}]
)["AvailabilityZones"]
assert len(zones) == 1
assert zones[0]["ZoneId"] == "use1-az1"
2024-01-07 12:03:33 +00:00
@mock_aws
def test_describe_availability_zones_dryrun():
client = boto3.client("ec2", region_name="us-east-1")
with pytest.raises(ClientError) as ex:
client.describe_availability_zones(DryRun=True)
assert ex.value.response["ResponseMetadata"]["HTTPStatusCode"] == 412
assert ex.value.response["Error"]["Code"] == "DryRunOperation"
assert (
ex.value.response["Error"]["Message"]
== "An error occurred (DryRunOperation) when calling the DescribeAvailabilityZones operation: Request would have succeeded, but DryRun flag is set"
)
2024-01-07 12:03:33 +00:00
@mock_aws
def test_boto3_zoneId_in_availability_zones():
conn = boto3.client("ec2", "us-east-1")
resp = conn.describe_availability_zones()
for rec in resp["AvailabilityZones"]:
assert "use1" in rec.get("ZoneId")
conn = boto3.client("ec2", "us-west-1")
resp = conn.describe_availability_zones()
for rec in resp["AvailabilityZones"]:
assert "usw1" in rec.get("ZoneId")