Update SNS get_endpoint_attributes response for Not Found endpoints (#3637)

The response returned for sns.get_endpoint_attributes was not in
sync with the actual response from boto.

Co-authored-by: Antillon, Alejandro <alejandro.antillon@f-secure.com>
This commit is contained in:
aantillonl 2021-01-31 14:29:10 +02:00 committed by GitHub
parent cd044ef00b
commit e9dc5edf7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 3 deletions

View File

@ -1,12 +1,24 @@
from __future__ import unicode_literals
from moto.core.exceptions import RESTError
NOT_FOUND_ENDPOINT_ERROR = """<ErrorResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
<Error>
<Type>{{ sender }}</Type>
<Code>{{ error_type }}</Code>
<Message>{{ message }}</Message>
</Error>
<RequestId>9dd01905-5012-5f99-8663-4b3ecd0dfaef</RequestId>
</ErrorResponse>"""
class SNSNotFoundError(RESTError):
code = 404
def __init__(self, message):
super(SNSNotFoundError, self).__init__("NotFound", message)
def __init__(self, message, **kwargs):
kwargs.setdefault("template", "endpoint_error")
kwargs.setdefault("sender", "Sender")
self.templates["endpoint_error"] = NOT_FOUND_ENDPOINT_ERROR
super(SNSNotFoundError, self).__init__("NotFound", message, **kwargs)
class ResourceNotFoundError(RESTError):

View File

@ -605,7 +605,7 @@ class SNSBackend(BaseBackend):
try:
return self.platform_endpoints[arn]
except KeyError:
raise SNSNotFoundError("Endpoint with arn {0} not found".format(arn))
raise SNSNotFoundError("Endpoint does not exist")
def set_endpoint_attributes(self, arn, attributes):
endpoint = self.get_endpoint(arn)

View File

@ -5,6 +5,7 @@ from botocore.exceptions import ClientError
from moto import mock_sns
import sure # noqa
from moto.core import ACCOUNT_ID
import pytest
@mock_sns
@ -206,6 +207,18 @@ def test_get_endpoint_attributes():
)
@mock_sns
def test_get_non_existent_endpoint_attributes():
conn = boto3.client("sns", region_name="us-east-1")
endpoint_arn = "arn:aws:sns:us-east-1:123456789012:endpoint/APNS/my-application/c1f76c42-192a-4e75-b04f-a9268ce2abf3"
with pytest.raises(conn.exceptions.NotFoundException) as excinfo:
conn.get_endpoint_attributes(EndpointArn=endpoint_arn)
error = excinfo.value.response["Error"]
error["Type"].should.equal("Sender")
error["Code"].should.equal("NotFound")
error["Message"].should.equal("Endpoint does not exist")
@mock_sns
def test_get_missing_endpoint_attributes():
conn = boto3.client("sns", region_name="us-east-1")