ECR: add CreateRepository name validation (#6479)

This commit is contained in:
David 2023-07-04 17:49:57 +02:00 committed by GitHub
parent b66272717f
commit 4011a68f06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 0 deletions

View File

@ -30,6 +30,9 @@ from moto.moto_api._internal import mock_random as random
from moto.utilities.tagging_service import TaggingService
ECR_REPOSITORY_ARN_PATTERN = "^arn:(?P<partition>[^:]+):ecr:(?P<region>[^:]+):(?P<account_id>[^:]+):repository/(?P<repo_name>.*)$"
ECR_REPOSITORY_NAME_PATTERN = (
"(?:[a-z0-9]+(?:[._-][a-z0-9]+)*/)*[a-z0-9]+(?:[._-][a-z0-9]+)*"
)
EcrRepositoryArn = namedtuple(
"EcrRepositoryArn", ["partition", "region", "account_id", "repo_name"]
@ -466,6 +469,12 @@ class ECRBackend(BaseBackend):
if self.repositories.get(repository_name):
raise RepositoryAlreadyExistsException(repository_name, self.account_id)
match = re.fullmatch(ECR_REPOSITORY_NAME_PATTERN, repository_name)
if not match:
raise InvalidParameterException(
f"Invalid parameter at 'repositoryName' failed to satisfy constraint: 'must satisfy regular expression '{ECR_REPOSITORY_NAME_PATTERN}'"
)
repository = Repository(
account_id=self.account_id,
region_name=self.region_name,

View File

@ -156,6 +156,19 @@ def test_create_repository_error_already_exists():
)
@mock_ecr
def test_create_repository_error_name_validation():
client = boto3.client("ecr", region_name="eu-central-1")
repo_name = "tesT"
with pytest.raises(ClientError) as e:
client.create_repository(repositoryName=repo_name)
ex = e.value
ex.operation_name.should.equal("CreateRepository")
ex.response["Error"]["Code"].should.contain("InvalidParameterException")
@mock_ecr
def test_describe_repositories():
client = boto3.client("ecr", region_name="us-east-1")