From 025e975e446f0945c53182dbe6aebfe43c07273f Mon Sep 17 00:00:00 2001 From: William Richard Date: Tue, 25 Jul 2017 17:54:05 -0400 Subject: [PATCH] Add ecr get_authorization_token response and tests --- moto/ecr/responses.py | 17 ++++++++++---- tests/test_ecr/test_ecr_boto3.py | 38 ++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/moto/ecr/responses.py b/moto/ecr/responses.py index 40d8cfb66..6c12a186d 100644 --- a/moto/ecr/responses.py +++ b/moto/ecr/responses.py @@ -1,12 +1,13 @@ from __future__ import unicode_literals import json +from datetime import datetime +import time from moto.core.responses import BaseResponse from .models import ecr_backends class ECRResponse(BaseResponse): - @property def ecr_backend(self): return ecr_backends[self.region] @@ -111,9 +112,17 @@ class ECRResponse(BaseResponse): 'ECR.generate_presigned_url is not yet implemented') def get_authorization_token(self): - if self.is_not_dryrun('GetAuthorizationToken'): - raise NotImplementedError( - 'ECR.get_authorization_token is not yet implemented') + registry_ids = self._get_param('registryIds') + if not registry_ids: + registry_ids = [self.region] + auth_data = [] + for registry_id in registry_ids: + auth_data.append({ + 'authorizationToken': '{}-auth-token'.format(registry_id), + 'expiresAt': time.mktime(datetime(2015, 1, 1).timetuple()), + 'proxyEndpoint': 'https://012345678910.dkr.ecr.{}.amazonaws.com'.format(registry_id) + }) + return json.dumps({'authorizationData': auth_data}) def get_download_url_for_layer(self): if self.is_not_dryrun('GetDownloadUrlForLayer'): diff --git a/tests/test_ecr/test_ecr_boto3.py b/tests/test_ecr/test_ecr_boto3.py index 647015446..5a10fb778 100644 --- a/tests/test_ecr/test_ecr_boto3.py +++ b/tests/test_ecr/test_ecr_boto3.py @@ -2,11 +2,13 @@ from __future__ import unicode_literals import hashlib import json +from datetime import datetime from random import random import sure # noqa import boto3 +from dateutil.tz import tzlocal from moto import mock_ecr @@ -368,3 +370,39 @@ def test_describe_images_by_digest(): image_detail['repositoryName'].should.equal("test_repository") image_detail['imageTags'].should.equal([put_response['imageId']['imageTag']]) image_detail['imageDigest'].should.equal(digest) + + +@mock_ecr +def test_get_authorization_token_assume_region(): + client = boto3.client('ecr', region_name='us-east-1') + auth_token_response = client.get_authorization_token() + + list(auth_token_response.keys()).should.equal(['authorizationData', 'ResponseMetadata']) + auth_token_response['authorizationData'].should.equal([ + { + 'authorizationToken': 'us-east-1-auth-token', + 'proxyEndpoint': 'https://012345678910.dkr.ecr.us-east-1.amazonaws.com', + 'expiresAt': datetime(2015, 1, 1, tzinfo=tzlocal()) + }, + ]) + + +@mock_ecr +def test_get_authorization_token_explicit_regions(): + client = boto3.client('ecr', region_name='us-east-1') + auth_token_response = client.get_authorization_token(registryIds=['us-east-1', 'us-west-1']) + + list(auth_token_response.keys()).should.equal(['authorizationData', 'ResponseMetadata']) + auth_token_response['authorizationData'].should.equal([ + { + 'authorizationToken': 'us-east-1-auth-token', + 'proxyEndpoint': 'https://012345678910.dkr.ecr.us-east-1.amazonaws.com', + 'expiresAt': datetime(2015, 1, 1, tzinfo=tzlocal()), + }, + { + 'authorizationToken': 'us-west-1-auth-token', + 'proxyEndpoint': 'https://012345678910.dkr.ecr.us-west-1.amazonaws.com', + 'expiresAt': datetime(2015, 1, 1, tzinfo=tzlocal()) + + } + ])