Merge pull request #1667 from iainb/enforce-message-size
SNS - Enforce 'Message too long' exception when publishing messages
This commit is contained in:
commit
db4c84c680
@ -24,6 +24,7 @@ from .utils import make_arn_for_topic, make_arn_for_subscription
|
|||||||
|
|
||||||
DEFAULT_ACCOUNT_ID = 123456789012
|
DEFAULT_ACCOUNT_ID = 123456789012
|
||||||
DEFAULT_PAGE_SIZE = 100
|
DEFAULT_PAGE_SIZE = 100
|
||||||
|
MAXIMUM_MESSAGE_LENGTH = 262144 # 256 KiB
|
||||||
|
|
||||||
|
|
||||||
class Topic(BaseModel):
|
class Topic(BaseModel):
|
||||||
@ -327,6 +328,9 @@ class SNSBackend(BaseBackend):
|
|||||||
# Note that the AWS docs around length are wrong: https://github.com/spulec/moto/issues/1503
|
# Note that the AWS docs around length are wrong: https://github.com/spulec/moto/issues/1503
|
||||||
raise ValueError('Subject must be less than 100 characters')
|
raise ValueError('Subject must be less than 100 characters')
|
||||||
|
|
||||||
|
if len(message) > MAXIMUM_MESSAGE_LENGTH:
|
||||||
|
raise InvalidParameterValue("An error occurred (InvalidParameter) when calling the Publish operation: Invalid parameter: Message too long")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
topic = self.get_topic(arn)
|
topic = self.get_topic(arn)
|
||||||
message_id = topic.publish(message, subject=subject,
|
message_id = topic.publish(message, subject=subject,
|
||||||
|
@ -10,6 +10,7 @@ import sure # noqa
|
|||||||
|
|
||||||
import responses
|
import responses
|
||||||
from botocore.exceptions import ClientError
|
from botocore.exceptions import ClientError
|
||||||
|
from nose.tools import assert_raises
|
||||||
from moto import mock_sns, mock_sqs
|
from moto import mock_sns, mock_sqs
|
||||||
|
|
||||||
|
|
||||||
@ -308,6 +309,20 @@ def test_publish_subject():
|
|||||||
raise RuntimeError('Should have raised an InvalidParameter exception')
|
raise RuntimeError('Should have raised an InvalidParameter exception')
|
||||||
|
|
||||||
|
|
||||||
|
@mock_sns
|
||||||
|
def test_publish_message_too_long():
|
||||||
|
sns = boto3.resource('sns', region_name='us-east-1')
|
||||||
|
topic = sns.create_topic(Name='some-topic')
|
||||||
|
|
||||||
|
with assert_raises(ClientError):
|
||||||
|
topic.publish(
|
||||||
|
Message="".join(["." for i in range(0, 262145)]))
|
||||||
|
|
||||||
|
# message short enough - does not raise an error
|
||||||
|
topic.publish(
|
||||||
|
Message="".join(["." for i in range(0, 262144)]))
|
||||||
|
|
||||||
|
|
||||||
def _setup_filter_policy_test(filter_policy):
|
def _setup_filter_policy_test(filter_policy):
|
||||||
sns = boto3.resource('sns', region_name='us-east-1')
|
sns = boto3.resource('sns', region_name='us-east-1')
|
||||||
topic = sns.create_topic(Name='some-topic')
|
topic = sns.create_topic(Name='some-topic')
|
||||||
|
Loading…
Reference in New Issue
Block a user