Skip to content

Commit

Permalink
Error listing Lambda layers after layer deletion (#5376)
Browse files Browse the repository at this point in the history
  • Loading branch information
hajali-amine committed Aug 12, 2022
1 parent f743567 commit c40c689
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 4 deletions.
14 changes: 10 additions & 4 deletions moto/awslambda/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -364,12 +364,16 @@ def delete_version(self, layer_version):
self.layer_versions.pop(str(layer_version), None)

def to_dict(self):
if not self.layer_versions:
return {}

last_key = sorted(self.layer_versions.keys(), key=lambda version: int(version))[
-1
]
return {
"LayerName": self.name,
"LayerArn": self.layer_arn,
"LatestMatchingVersion": self.layer_versions[
str(self._latest_version)
].get_layer_version(),
"LatestMatchingVersion": self.layer_versions[last_key].get_layer_version(),
}


Expand Down Expand Up @@ -1242,7 +1246,9 @@ def put_layer_version(self, layer_version):
self._layers[layer_version.name].attach_version(layer_version)

def list_layers(self):
return [layer.to_dict() for layer in self._layers.values()]
return [
layer.to_dict() for layer in self._layers.values() if layer.layer_versions
]

def delete_layer_version(self, layer_name, layer_version):
self._layers[layer_name].delete_version(layer_version)
Expand Down
66 changes: 66 additions & 0 deletions tests/test_awslambda/test_lambda_layers.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,3 +230,69 @@ def test_delete_layer_version():

result = conn.list_layer_versions(LayerName=layer_name)["LayerVersions"]
result.should.equal([])


@mock_lambda
@mock_s3
def test_get_layer_with_no_layer_versions():
def get_layer_by_layer_name_from_list_of_layer_dicts(layer_name, layer_list):
for layer in layer_list:
if layer["LayerName"] == layer_name:
return layer
return None

conn = boto3.client("lambda", _lambda_region)
layer_name = str(uuid4())[0:6]

# Publish a new Layer and assert Layer exists and only version 1 is there
conn.publish_layer_version(
LayerName=layer_name,
Content={"ZipFile": get_test_zip_file1()},
)
assert (
get_layer_by_layer_name_from_list_of_layer_dicts(
layer_name, conn.list_layers()["Layers"]
)["LatestMatchingVersion"]["Version"]
== 1
)

# Add a new version of that Layer then delete that version
conn.publish_layer_version(
LayerName=layer_name,
Content={"ZipFile": get_test_zip_file1()},
)
assert (
get_layer_by_layer_name_from_list_of_layer_dicts(
layer_name, conn.list_layers()["Layers"]
)["LatestMatchingVersion"]["Version"]
== 2
)

conn.delete_layer_version(LayerName=layer_name, VersionNumber=2)
assert (
get_layer_by_layer_name_from_list_of_layer_dicts(
layer_name, conn.list_layers()["Layers"]
)["LatestMatchingVersion"]["Version"]
== 1
)

# Delete the last layer_version and check that the Layer is still in the LayerStorage
conn.delete_layer_version(LayerName=layer_name, VersionNumber=1)
assert (
get_layer_by_layer_name_from_list_of_layer_dicts(
layer_name, conn.list_layers()["Layers"]
)
is None
)

# Assert _latest_version didn't decrement
conn.publish_layer_version(
LayerName=layer_name,
Content={"ZipFile": get_test_zip_file1()},
)
assert (
get_layer_by_layer_name_from_list_of_layer_dicts(
layer_name, conn.list_layers()["Layers"]
)["LatestMatchingVersion"]["Version"]
== 3
)

0 comments on commit c40c689

Please sign in to comment.