Fix: redshift:EnableSnapshotCopy raises incorrect Exception (#3485)

The previous code was trying to raise a botocore ClientError directly, which
was actually generating a secondary AttributeError because the arguments passed
to ClientError() were incorrect.

This replaces the ClientError() call with a proper moto exception class for
Redshift and fixes the test assertions appropriately.

Supersedes #1957
This commit is contained in:
Brian Pandola 2020-11-21 02:35:46 -08:00 committed by GitHub
parent 689cd8f285
commit 4245497a97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 4 deletions

View File

@ -573,10 +573,8 @@ class RedshiftBackend(BaseBackend):
cluster.encrypted == "true"
and kwargs["snapshot_copy_grant_name"] is None
):
raise ClientError(
"InvalidParameterValue",
"SnapshotCopyGrantName is required for Snapshot Copy "
"on KMS encrypted clusters.",
raise InvalidParameterValueError(
"SnapshotCopyGrantName is required for Snapshot Copy on KMS encrypted clusters."
)
status = {
"DestinationRegion": kwargs["destination_region"],

View File

@ -12,6 +12,7 @@ from boto.redshift.exceptions import (
InvalidSubnet,
)
from botocore.exceptions import ClientError
import pytest
import sure # noqa
from moto import mock_ec2
@ -1260,6 +1261,14 @@ def test_enable_snapshot_copy():
MasterUserPassword="password",
NodeType="ds2.xlarge",
)
with pytest.raises(ClientError) as ex:
client.enable_snapshot_copy(
ClusterIdentifier="test", DestinationRegion="us-west-2", RetentionPeriod=3,
)
ex.value.response["Error"]["Code"].should.equal("InvalidParameterValue")
ex.value.response["Error"]["Message"].should.contain(
"SnapshotCopyGrantName is required for Snapshot Copy on KMS encrypted clusters."
)
client.enable_snapshot_copy(
ClusterIdentifier="test",
DestinationRegion="us-west-2",