From a3ad991ce753257c5c8853dd925bd4935c02c5af Mon Sep 17 00:00:00 2001 From: Anisa Oshafi Date: Mon, 26 May 2025 16:24:04 +0200 Subject: [PATCH] EC2: fix describe-availability-zones filtering --- .../localstack/services/ec2/provider.py | 8 +- tests/aws/services/ec2/test_ec2.py | 47 ++++++++++++ tests/aws/services/ec2/test_ec2.snapshot.json | 75 +++++++++++++++++++ .../aws/services/ec2/test_ec2.validation.json | 9 +++ 4 files changed, 134 insertions(+), 5 deletions(-) diff --git a/localstack-core/localstack/services/ec2/provider.py b/localstack-core/localstack/services/ec2/provider.py index 401276a0da7bd..ab52195e4cfa8 100644 --- a/localstack-core/localstack/services/ec2/provider.py +++ b/localstack-core/localstack/services/ec2/provider.py @@ -117,11 +117,9 @@ def describe_availability_zones( zone_names = describe_availability_zones_request.get("ZoneNames") zone_ids = describe_availability_zones_request.get("ZoneIds") if zone_names or zone_ids: - filters = { - "zone-name": zone_names, - "zone-id": zone_ids, - } - filtered_zones = backend.describe_availability_zones(filters) + filtered_zones = backend.describe_availability_zones( + zone_names=zone_names, zone_ids=zone_ids + ) availability_zones = [ AvailabilityZone( State="available", diff --git a/tests/aws/services/ec2/test_ec2.py b/tests/aws/services/ec2/test_ec2.py index cd006fa90abb7..9a308bcb500b8 100644 --- a/tests/aws/services/ec2/test_ec2.py +++ b/tests/aws/services/ec2/test_ec2.py @@ -974,3 +974,50 @@ def test_raise_create_volume_without_size(snapshot, aws_client): with pytest.raises(ClientError) as e: aws_client.ec2.create_volume(AvailabilityZone="eu-central-1a") snapshot.match("request-missing-size", e.value.response) + + +@markers.snapshot.skip_snapshot_verify( + paths=[ + # not implemented in LS + "$..AvailabilityZones..GroupLongName", + "$..AvailabilityZones..GroupName", + "$..AvailabilityZones..NetworkBorderGroup", + "$..AvailabilityZones..OptInStatus", + ] +) +@markers.aws.validated +def test_describe_availability_zones_filter_with_zone_names(snapshot, aws_client): + availability_zones = aws_client.ec2.describe_availability_zones(ZoneNames=["us-east-1a"]) + snapshot.match("availability_zones", availability_zones) + + +@markers.snapshot.skip_snapshot_verify( + paths=[ + # not implemented in LS + "$..AvailabilityZones..GroupLongName", + "$..AvailabilityZones..GroupName", + "$..AvailabilityZones..NetworkBorderGroup", + "$..AvailabilityZones..OptInStatus", + ] +) +@markers.aws.validated +def test_describe_availability_zones_filter_with_zone_ids(snapshot, aws_client): + availability_zones = aws_client.ec2.describe_availability_zones(ZoneIds=["use1-az1"]) + snapshot.match("availability_zones", availability_zones) + + +@markers.snapshot.skip_snapshot_verify( + paths=[ + # not implemented in LS + "$..AvailabilityZones..GroupLongName", + "$..AvailabilityZones..GroupName", + "$..AvailabilityZones..NetworkBorderGroup", + "$..AvailabilityZones..OptInStatus", + ] +) +@markers.aws.validated +def test_describe_availability_zones_filters(snapshot, aws_client): + availability_zones = aws_client.ec2.describe_availability_zones( + Filters=[{"Name": "zone-name", "Values": ["us-east-1a"]}] + ) + snapshot.match("availability_zones", availability_zones) diff --git a/tests/aws/services/ec2/test_ec2.snapshot.json b/tests/aws/services/ec2/test_ec2.snapshot.json index c76d1b6969e9a..a0e49176ceb28 100644 --- a/tests/aws/services/ec2/test_ec2.snapshot.json +++ b/tests/aws/services/ec2/test_ec2.snapshot.json @@ -419,5 +419,80 @@ } } } + }, + "tests/aws/services/ec2/test_ec2.py::test_describe_availability_zones_filter_with_zone_names": { + "recorded-date": "26-05-2025, 13:36:03", + "recorded-content": { + "availability_zones": { + "AvailabilityZones": [ + { + "GroupLongName": "US East (N. Virginia) 1", + "GroupName": "-zg-1", + "Messages": [], + "NetworkBorderGroup": "", + "OptInStatus": "opt-in-not-required", + "RegionName": "", + "State": "available", + "ZoneId": "use1-az6", + "ZoneName": "a", + "ZoneType": "availability-zone" + } + ], + "ResponseMetadata": { + "HTTPHeaders": {}, + "HTTPStatusCode": 200 + } + } + } + }, + "tests/aws/services/ec2/test_ec2.py::test_describe_availability_zones_filter_with_zone_ids": { + "recorded-date": "26-05-2025, 13:34:49", + "recorded-content": { + "availability_zones": { + "AvailabilityZones": [ + { + "GroupLongName": "US East (N. Virginia) 1", + "GroupName": "-zg-1", + "Messages": [], + "NetworkBorderGroup": "", + "OptInStatus": "opt-in-not-required", + "RegionName": "", + "State": "available", + "ZoneId": "use1-az1", + "ZoneName": "b", + "ZoneType": "availability-zone" + } + ], + "ResponseMetadata": { + "HTTPHeaders": {}, + "HTTPStatusCode": 200 + } + } + } + }, + "tests/aws/services/ec2/test_ec2.py::test_describe_availability_zones_filters": { + "recorded-date": "26-05-2025, 13:48:29", + "recorded-content": { + "availability_zones": { + "AvailabilityZones": [ + { + "GroupLongName": "US East (N. Virginia) 1", + "GroupName": "-zg-1", + "Messages": [], + "NetworkBorderGroup": "", + "OptInStatus": "opt-in-not-required", + "RegionName": "", + "State": "available", + "ZoneId": "use1-az6", + "ZoneName": "a", + "ZoneType": "availability-zone" + } + ], + "ResponseMetadata": { + "HTTPHeaders": {}, + "HTTPStatusCode": 200 + } + } + } } } diff --git a/tests/aws/services/ec2/test_ec2.validation.json b/tests/aws/services/ec2/test_ec2.validation.json index 19e617efc962a..d5febb36639f1 100644 --- a/tests/aws/services/ec2/test_ec2.validation.json +++ b/tests/aws/services/ec2/test_ec2.validation.json @@ -17,6 +17,15 @@ "tests/aws/services/ec2/test_ec2.py::TestEc2Integrations::test_vcp_peering_difference_regions": { "last_validated_date": "2024-06-07T21:28:25+00:00" }, + "tests/aws/services/ec2/test_ec2.py::test_describe_availability_zones_filter_with_zone_ids": { + "last_validated_date": "2025-05-26T13:34:49+00:00" + }, + "tests/aws/services/ec2/test_ec2.py::test_describe_availability_zones_filter_with_zone_names": { + "last_validated_date": "2025-05-26T13:36:03+00:00" + }, + "tests/aws/services/ec2/test_ec2.py::test_describe_availability_zones_filters": { + "last_validated_date": "2025-05-26T13:48:29+00:00" + }, "tests/aws/services/ec2/test_ec2.py::test_raise_create_volume_without_size": { "last_validated_date": "2025-02-04T12:53:29+00:00" }