From 9f019792df857bd8247aedc3f2ea55f595d58b84 Mon Sep 17 00:00:00 2001 From: Mike Bjerkness Date: Mon, 22 May 2017 21:57:14 -0500 Subject: [PATCH] Added tests --- moto/ecr/responses.py | 5 +- tests/test_ecr/test_ecr_boto3.py | 186 +++++++++++++++++++++++++------ 2 files changed, 159 insertions(+), 32 deletions(-) diff --git a/moto/ecr/responses.py b/moto/ecr/responses.py index 3a37162a0..a778b6bac 100644 --- a/moto/ecr/responses.py +++ b/moto/ecr/responses.py @@ -32,7 +32,10 @@ class ECRResponse(BaseResponse): def describe_repositories(self): describe_repositories_name = self._get_param('repositoryNames') - repositories = self.ecr_backend.describe_repositories(describe_repositories_name) + registry_id = self._get_param('registryId') + + repositories = self.ecr_backend.describe_repositories( + repository_names=describe_repositories_name, registry_id=registry_id) return json.dumps({ 'repositories': repositories, 'failures': [] diff --git a/tests/test_ecr/test_ecr_boto3.py b/tests/test_ecr/test_ecr_boto3.py index ce5a54b17..5a9f5bb61 100644 --- a/tests/test_ecr/test_ecr_boto3.py +++ b/tests/test_ecr/test_ecr_boto3.py @@ -1,6 +1,5 @@ from __future__ import unicode_literals -# from nose.tools import assert_raises import hashlib import json from random import random @@ -10,7 +9,6 @@ import sure # noqa import boto3 from moto import mock_ecr -import datetime def _create_image_digest(contents=None): @@ -87,6 +85,73 @@ def test_describe_repositories(): response['repositories'][1]['repositoryUri']]).should.equal(set(respository_uris)) +@mock_ecr +def test_describe_repositories_1(): + client = boto3.client('ecr', region_name='us-east-1') + _ = client.create_repository( + repositoryName='test_repository1' + ) + _ = client.create_repository( + repositoryName='test_repository0' + ) + response = client.describe_repositories(registryId='012345678910') + len(response['repositories']).should.equal(2) + + respository_arns = ['arn:aws:ecr:us-east-1:012345678910:repository/test_repository1', + 'arn:aws:ecr:us-east-1:012345678910:repository/test_repository0'] + set([response['repositories'][0]['repositoryArn'], + response['repositories'][1]['repositoryArn']]).should.equal(set(respository_arns)) + + respository_uris = ['012345678910.dkr.ecr.us-east-1.amazonaws.com/test_repository1', + '012345678910.dkr.ecr.us-east-1.amazonaws.com/test_repository0'] + set([response['repositories'][0]['repositoryUri'], + response['repositories'][1]['repositoryUri']]).should.equal(set(respository_uris)) + + +@mock_ecr +def test_describe_repositories_2(): + client = boto3.client('ecr', region_name='us-east-1') + _ = client.create_repository( + repositoryName='test_repository1' + ) + _ = client.create_repository( + repositoryName='test_repository0' + ) + response = client.describe_repositories(registryId='109876543210') + len(response['repositories']).should.equal(0) + + +@mock_ecr +def test_describe_repositories_3(): + client = boto3.client('ecr', region_name='us-east-1') + _ = client.create_repository( + repositoryName='test_repository1' + ) + _ = client.create_repository( + repositoryName='test_repository0' + ) + response = client.describe_repositories(repositoryNames=['test_repository1']) + len(response['repositories']).should.equal(1) + respository_arn = 'arn:aws:ecr:us-east-1:012345678910:repository/test_repository1' + response['repositories'][0]['repositoryArn'].should.equal(respository_arn) + + respository_uri = '012345678910.dkr.ecr.us-east-1.amazonaws.com/test_repository1' + response['repositories'][0]['repositoryUri'].should.equal(respository_uri) + + +@mock_ecr +def test_describe_repositories_4(): + client = boto3.client('ecr', region_name='us-east-1') + _ = client.create_repository( + repositoryName='test_repository1' + ) + _ = client.create_repository( + repositoryName='test_repository0' + ) + response = client.describe_repositories(repositoryNames=['not_a_valid_name']) + len(response['repositories']).should.equal(0) + + @mock_ecr def test_delete_repository(): client = boto3.client('ecr', region_name='us-east-1') @@ -106,6 +171,20 @@ def test_delete_repository(): len(response['repositories']).should.equal(0) +@mock_ecr +def test_delete_repository_1(): + client = boto3.client('ecr', region_name='us-east-1') + _ = client.create_repository( + repositoryName='test_repository' + ) + + invalid_repository_name = 'not_a_repository' + try: + client.delete_repository(repositoryName=invalid_repository_name) + except Exception as e: + str(e).should.equal('{0} is not a repository'.format(invalid_repository_name)) + + @mock_ecr def test_put_image(): client = boto3.client('ecr', region_name='us-east-1') @@ -126,28 +205,38 @@ def test_put_image(): def test_list_images(): client = boto3.client('ecr', region_name='us-east-1') _ = client.create_repository( - repositoryName='test_repository' + repositoryName='test_repository_1' + ) + + _ = client.create_repository( + repositoryName='test_repository_2' ) _ = client.put_image( - repositoryName='test_repository', + repositoryName='test_repository_1', imageManifest=json.dumps(_create_image_manifest()), imageTag='latest' ) _ = client.put_image( - repositoryName='test_repository', + repositoryName='test_repository_1', imageManifest=json.dumps(_create_image_manifest()), imageTag='v1' ) _ = client.put_image( - repositoryName='test_repository', + repositoryName='test_repository_1', imageManifest=json.dumps(_create_image_manifest()), imageTag='v2' ) - response = client.list_images(repositoryName='test_repository') + _ = client.put_image( + repositoryName='test_repository_2', + imageManifest=json.dumps(_create_image_manifest()), + imageTag='oldest' + ) + + response = client.list_images(repositoryName='test_repository_1') type(response['imageIds']).should.be(list) len(response['imageIds']).should.be(3) @@ -156,6 +245,15 @@ def test_list_images(): response['imageIds'][1]['imageTag'], response['imageIds'][2]['imageTag']]).should.equal(set(image_tags)) + response = client.list_images(repositoryName='test_repository_2') + type(response['imageIds']).should.be(list) + len(response['imageIds']).should.be(1) + response['imageIds'][0]['imageTag'].should.equal('oldest') + + response = client.list_images(repositoryName='test_repository_2', registryId='109876543210') + type(response['imageIds']).should.be(list) + len(response['imageIds']).should.be(0) + @mock_ecr def test_describe_images(): @@ -211,31 +309,57 @@ def test_describe_images(): response['imageDetails'][1]['imageSizeInBytes'].should.equal(52428800) response['imageDetails'][2]['imageSizeInBytes'].should.equal(52428800) - # response['imageDetails'][0]['imagePushedAt'].should.equal('2017-05-09') - # response['imageDetails'][1]['imagePushedAt'].should.equal('2017-05-09') - # response['imageDetails'][2]['imagePushedAt'].should.equal('2017-05-09') + invalid_repository_name = 'not_a_valid_repository' + try: + client.describe_images(repositoryName=invalid_repository_name) + except Exception as e: + str(e).should.equal('{0} is not a repository'.format(invalid_repository_name)) - ''' - image_digests = [ - "hi", "mike", "name" - ] - set([response['imageDetails'][0]['imageDigest'], - response['imageDetails'][1]['imageDigest'], - response['imageDetails'][2]['imageDigest']]).should.equal(set(image_digests)) - ''' + +@mock_ecr +def test_put_image(): + client = boto3.client('ecr', region_name='us-east-1') + _ = client.create_repository( + repositoryName='test_repository' + ) + + response = client.put_image( + repositoryName='test_repository', + imageManifest=json.dumps(_create_image_manifest()), + imageTag='latest' + ) + + response['image']['imageId']['imageTag'].should.equal('latest') + response['image']['imageId']['imageDigest'].should.contain("sha") + response['image']['repositoryName'].should.equal('test_repository') + response['image']['registryId'].should.equal('012345678910') + + invalid_repository_name = 'not_a_valid_repository' + + try: + client.put_image( + repositoryName=invalid_repository_name, + imageManifest=json.dumps(_create_image_manifest()), + imageTag='latest') + except Exception as e: + str(e).should.equal('{0} is not a repository'.format(invalid_repository_name)) ''' -'imageDetails': [ - { - 'registryId': 'string', - 'repositoryName': 'string', - 'imageDigest': 'string', - 'imageTags': [ - 'string', - ], - 'imageSizeInBytes': 123, - 'imagePushedAt': datetime(2015, 1, 1) - }, -], -''' +obj = { + "image": { + "repository": "test_repository", + "imageManifest": "{\"layers\": [{\"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\", \"digest\": \"sha256:77ea7eee3d80b1a38f83906dd3048e2689457eb90e18a7d12f839c5ae37106a2\", \"size\": 32654}, {\"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\", \"digest\": \"sha256:95cf1a2e1698fe3ca1fcc3f653119146b271d0b62e487ec264441e886a11bd06\", \"size\": 16724}, {\"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\", \"digest\": \"sha256:a0e70458d19e37e14d6388030a017c587283e2fb6ef10c0744cad0294c47e8f8\", \"size\": 73109}], \"schemaVersion\": 2, \"config\": {\"mediaType\": \"application/vnd.docker.container.image.v1+json\", \"digest\": \"sha256:b79606fb3afea5bd1609ed40b622142f1c98125abcfe89a76a661b0e8e343910\", \"size\": 7023}, \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\"}", + "imageId": { + "imageTag": "latest", + "imageDigest": "sha256:c639b9999fadc04554ed2ef5cec140d35136d23f0ee15ad71f0708e334fc21ba" + }, + "imageSizeInBytes": 52428800, + "imageDigest": null, + "imageTag": "latest", + "registryId": "012345678910", + "repositoryName": "test_repository", + "imagePushedAt": null + } +} +''' \ No newline at end of file