Error listing Lambda layers after layer deletion (#5376)
This commit is contained in:
parent
f743567789
commit
c40c6895ce
@ -364,12 +364,16 @@ class Layer(object):
|
||||
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(),
|
||||
}
|
||||
|
||||
|
||||
@ -1242,7 +1246,9 @@ class LayerStorage(object):
|
||||
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)
|
||||
|
@ -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
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user