Correctly raises an error when MessageGroupId is missing when sending a batch of messages to a FIFO queue.
This commit is contained in:
parent
7147c5f05a
commit
b44ab23c63
@ -123,9 +123,10 @@ class InvalidParameterValue(RESTError):
|
|||||||
class MissingParameter(RESTError):
|
class MissingParameter(RESTError):
|
||||||
code = 400
|
code = 400
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, parameter):
|
||||||
super(MissingParameter, self).__init__(
|
super(MissingParameter, self).__init__(
|
||||||
"MissingParameter", "The request must contain the parameter Actions."
|
"MissingParameter",
|
||||||
|
"The request must contain the parameter {}.".format(parameter),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -706,7 +706,13 @@ class SQSBackend(BaseBackend):
|
|||||||
message.sequence_number = "".join(
|
message.sequence_number = "".join(
|
||||||
random.choice(string.digits) for _ in range(20)
|
random.choice(string.digits) for _ in range(20)
|
||||||
)
|
)
|
||||||
if group_id is not None:
|
|
||||||
|
if group_id is None:
|
||||||
|
# MessageGroupId is a mandatory parameter for all
|
||||||
|
# messages in a fifo queue
|
||||||
|
if queue.fifo_queue:
|
||||||
|
raise MissingParameter("MessageGroupId")
|
||||||
|
else:
|
||||||
message.group_id = group_id
|
message.group_id = group_id
|
||||||
|
|
||||||
if message_attributes:
|
if message_attributes:
|
||||||
@ -925,7 +931,7 @@ class SQSBackend(BaseBackend):
|
|||||||
queue = self.get_queue(queue_name)
|
queue = self.get_queue(queue_name)
|
||||||
|
|
||||||
if not actions:
|
if not actions:
|
||||||
raise MissingParameter()
|
raise MissingParameter("Actions")
|
||||||
|
|
||||||
if not account_ids:
|
if not account_ids:
|
||||||
raise InvalidParameterValue(
|
raise InvalidParameterValue(
|
||||||
@ -998,14 +1004,11 @@ class SQSBackend(BaseBackend):
|
|||||||
queue = self.get_queue(queue_name)
|
queue = self.get_queue(queue_name)
|
||||||
|
|
||||||
if not len(tags):
|
if not len(tags):
|
||||||
raise RESTError(
|
raise MissingParameter("Tags")
|
||||||
"MissingParameter", "The request must contain the parameter Tags."
|
|
||||||
)
|
|
||||||
|
|
||||||
if len(tags) > 50:
|
if len(tags) > 50:
|
||||||
raise RESTError(
|
raise InvalidParameterValue(
|
||||||
"InvalidParameterValue",
|
"Too many tags added for queue {}.".format(queue_name)
|
||||||
"Too many tags added for queue {}.".format(queue_name),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
queue.tags.update(tags)
|
queue.tags.update(tags)
|
||||||
|
@ -2,6 +2,7 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
from moto.core.exceptions import RESTError
|
||||||
from moto.core.responses import BaseResponse
|
from moto.core.responses import BaseResponse
|
||||||
from moto.core.utils import (
|
from moto.core.utils import (
|
||||||
amz_crc32,
|
amz_crc32,
|
||||||
@ -234,14 +235,7 @@ class SQSResponse(BaseResponse):
|
|||||||
|
|
||||||
queue_name = self._get_queue_name()
|
queue_name = self._get_queue_name()
|
||||||
|
|
||||||
if not message_group_id:
|
try:
|
||||||
queue = self.sqs_backend.get_queue(queue_name)
|
|
||||||
if queue.attributes.get("FifoQueue", False):
|
|
||||||
return self._error(
|
|
||||||
"MissingParameter",
|
|
||||||
"The request must contain the parameter MessageGroupId.",
|
|
||||||
)
|
|
||||||
|
|
||||||
message = self.sqs_backend.send_message(
|
message = self.sqs_backend.send_message(
|
||||||
queue_name,
|
queue_name,
|
||||||
message,
|
message,
|
||||||
@ -251,6 +245,9 @@ class SQSResponse(BaseResponse):
|
|||||||
group_id=message_group_id,
|
group_id=message_group_id,
|
||||||
system_attributes=system_message_attributes,
|
system_attributes=system_message_attributes,
|
||||||
)
|
)
|
||||||
|
except RESTError as err:
|
||||||
|
return self._error(err.error_type, err.message)
|
||||||
|
|
||||||
template = self.response_template(SEND_MESSAGE_RESPONSE)
|
template = self.response_template(SEND_MESSAGE_RESPONSE)
|
||||||
return template.render(message=message, message_attributes=message_attributes)
|
return template.render(message=message, message_attributes=message_attributes)
|
||||||
|
|
||||||
|
@ -2555,7 +2555,7 @@ def test_list_queues_limits_to_1000_queues():
|
|||||||
|
|
||||||
|
|
||||||
@mock_sqs
|
@mock_sqs
|
||||||
def test_send_messages_to_fifo_without_message_group_id():
|
def test_send_message_to_fifo_without_message_group_id():
|
||||||
sqs = boto3.resource("sqs", region_name="eu-west-3")
|
sqs = boto3.resource("sqs", region_name="eu-west-3")
|
||||||
queue = sqs.create_queue(
|
queue = sqs.create_queue(
|
||||||
QueueName="blah.fifo",
|
QueueName="blah.fifo",
|
||||||
@ -2571,6 +2571,25 @@ def test_send_messages_to_fifo_without_message_group_id():
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_sqs
|
||||||
|
def test_send_messages_to_fifo_without_message_group_id():
|
||||||
|
sqs = boto3.resource("sqs", region_name="eu-west-3")
|
||||||
|
queue = sqs.create_queue(
|
||||||
|
QueueName="blah.fifo",
|
||||||
|
Attributes={"FifoQueue": "true", "ContentBasedDeduplication": "true"},
|
||||||
|
)
|
||||||
|
|
||||||
|
with pytest.raises(Exception) as e:
|
||||||
|
queue.send_messages(
|
||||||
|
Entries=[{"Id": "id_1", "MessageBody": "body_1",},]
|
||||||
|
)
|
||||||
|
ex = e.value
|
||||||
|
ex.response["Error"]["Code"].should.equal("MissingParameter")
|
||||||
|
ex.response["Error"]["Message"].should.equal(
|
||||||
|
"The request must contain the parameter MessageGroupId."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@mock_logs
|
@mock_logs
|
||||||
@mock_lambda
|
@mock_lambda
|
||||||
@mock_sqs
|
@mock_sqs
|
||||||
|
Loading…
x
Reference in New Issue
Block a user