fixed spulec/moto#1684 and fixed spulec/moto#1685
This commit is contained in:
parent
6d12c83b89
commit
cc799b55da
@ -99,6 +99,7 @@ class Image(BaseObject):
|
|||||||
|
|
||||||
def __init__(self, tag, manifest, repository, digest=None, registry_id=DEFAULT_REGISTRY_ID):
|
def __init__(self, tag, manifest, repository, digest=None, registry_id=DEFAULT_REGISTRY_ID):
|
||||||
self.image_tag = tag
|
self.image_tag = tag
|
||||||
|
self.image_tags = [tag]
|
||||||
self.image_manifest = manifest
|
self.image_manifest = manifest
|
||||||
self.image_size_in_bytes = 50 * 1024 * 1024
|
self.image_size_in_bytes = 50 * 1024 * 1024
|
||||||
self.repository = repository
|
self.repository = repository
|
||||||
@ -118,6 +119,11 @@ class Image(BaseObject):
|
|||||||
def get_image_manifest(self):
|
def get_image_manifest(self):
|
||||||
return self.image_manifest
|
return self.image_manifest
|
||||||
|
|
||||||
|
def update_tag(self, tag):
|
||||||
|
self.image_tag = tag
|
||||||
|
if tag not in self.image_tags:
|
||||||
|
self.image_tags.append(tag)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def response_object(self):
|
def response_object(self):
|
||||||
response_object = self.gen_response_object()
|
response_object = self.gen_response_object()
|
||||||
@ -139,7 +145,7 @@ class Image(BaseObject):
|
|||||||
@property
|
@property
|
||||||
def response_describe_object(self):
|
def response_describe_object(self):
|
||||||
response_object = self.gen_response_object()
|
response_object = self.gen_response_object()
|
||||||
response_object['imageTags'] = [self.image_tag]
|
response_object['imageTags'] = self.image_tags
|
||||||
response_object['imageDigest'] = self.get_image_digest()
|
response_object['imageDigest'] = self.get_image_digest()
|
||||||
response_object['imageManifest'] = self.image_manifest
|
response_object['imageManifest'] = self.image_manifest
|
||||||
response_object['repositoryName'] = self.repository
|
response_object['repositoryName'] = self.repository
|
||||||
@ -255,15 +261,16 @@ class ECRBackend(BaseBackend):
|
|||||||
else:
|
else:
|
||||||
raise Exception("{0} is not a repository".format(repository_name))
|
raise Exception("{0} is not a repository".format(repository_name))
|
||||||
|
|
||||||
existing_image = list(filter(lambda x: x.response_object['imageManifest'] == image_manifest, repository.images))
|
existing_images = list(filter(lambda x: x.response_object['imageManifest'] == image_manifest, repository.images))
|
||||||
if not existing_image:
|
if not existing_images:
|
||||||
|
# this image is not in ECR yet
|
||||||
image = Image(image_tag, image_manifest, repository_name)
|
image = Image(image_tag, image_manifest, repository_name)
|
||||||
repository.images.append(image)
|
repository.images.append(image)
|
||||||
|
return image
|
||||||
else:
|
else:
|
||||||
image = Image(image_tag, image_manifest, repository_name, existing_image[0].get_image_digest())
|
# update existing image
|
||||||
repository.images.append(image)
|
existing_images[0].update_tag(image_tag)
|
||||||
|
return existing_images[0]
|
||||||
return image
|
|
||||||
|
|
||||||
def batch_get_image(self, repository_name, registry_id=None, image_ids=None, accepted_media_types=None):
|
def batch_get_image(self, repository_name, registry_id=None, image_ids=None, accepted_media_types=None):
|
||||||
if repository_name in self.repositories:
|
if repository_name in self.repositories:
|
||||||
|
@ -45,7 +45,8 @@ def _create_image_manifest():
|
|||||||
{
|
{
|
||||||
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
|
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
|
||||||
"size": 73109,
|
"size": 73109,
|
||||||
"digest": _create_image_digest("layer3")
|
# randomize image digest
|
||||||
|
"digest": _create_image_digest()
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -230,21 +231,14 @@ def test_put_image_with_multiple_tags():
|
|||||||
type(response2['imageDetails']).should.be(list)
|
type(response2['imageDetails']).should.be(list)
|
||||||
len(response2['imageDetails']).should.be(1)
|
len(response2['imageDetails']).should.be(1)
|
||||||
|
|
||||||
response['imageDetails'][0]['imageDigest'].should.contain("sha")
|
response2['imageDetails'][0]['imageDigest'].should.contain("sha")
|
||||||
|
|
||||||
# response['imageDetails'][0]['registryId'].should.equal("012345678910")
|
response2['imageDetails'][0]['registryId'].should.equal("012345678910")
|
||||||
# response['imageDetails'][1]['registryId'].should.equal("012345678910")
|
|
||||||
# response['imageDetails'][2]['registryId'].should.equal("012345678910")
|
|
||||||
# response['imageDetails'][3]['registryId'].should.equal("012345678910")
|
|
||||||
#
|
|
||||||
# response['imageDetails'][0]['repositoryName'].should.equal("test_repository")
|
|
||||||
# response['imageDetails'][1]['repositoryName'].should.equal("test_repository")
|
|
||||||
# response['imageDetails'][2]['repositoryName'].should.equal("test_repository")
|
|
||||||
# response['imageDetails'][3]['repositoryName'].should.equal("test_repository")
|
|
||||||
#
|
|
||||||
# response['imageDetails'][0].should_not.have.key('imageTags')
|
|
||||||
# len(response['imageDetails'][1]['imageTags']).should.be(1)
|
|
||||||
|
|
||||||
|
response2['imageDetails'][0]['repositoryName'].should.equal("test_repository")
|
||||||
|
|
||||||
|
len(response2['imageDetails'][0]['imageTags']).should.be(2)
|
||||||
|
response2['imageDetails'][0]['imageTags'].should.be.equal(['v1', 'latest'])
|
||||||
|
|
||||||
@mock_ecr
|
@mock_ecr
|
||||||
def test_list_images():
|
def test_list_images():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user