Skip to content

Commit 196ca4c

Browse files
authored
SQS: add SequenceNumber to FIFO queue SendMessage responses (getmoto#9789)
1 parent 43e4a6d commit 196ca4c

2 files changed

Lines changed: 14 additions & 3 deletions

File tree

moto/sqs/responses.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ def send_message(self) -> ActionResult:
152152
system_message_attributes = self._get_param("MessageSystemAttributes")
153153
validate_message_attributes(system_message_attributes)
154154
queue_name = self._get_queue_name()
155+
queue = self.sqs_backend.get_queue(queue_name)
155156
message = self.sqs_backend.send_message(
156157
queue_name,
157158
message,
@@ -167,11 +168,13 @@ def send_message(self) -> ActionResult:
167168
}
168169
if len(message.message_attributes) > 0:
169170
resp["MD5OfMessageAttributes"] = message.attribute_md5
171+
if queue.fifo_queue and message.sequence_number:
172+
resp["SequenceNumber"] = message.sequence_number
170173
return ActionResult(resp)
171174

172175
def send_message_batch(self) -> ActionResult:
173176
queue_name = self._get_queue_name()
174-
self.sqs_backend.get_queue(queue_name)
177+
queue = self.sqs_backend.get_queue(queue_name)
175178
entries = self._get_param("Entries", [])
176179
entries = {str(idx): entry for idx, entry in enumerate(entries)}
177180
for entry in entries.values():
@@ -209,6 +212,8 @@ def send_message_batch(self) -> ActionResult:
209212
}
210213
if len(msg.message_attributes) > 0:
211214
msg_dict["MD5OfMessageAttributes"] = msg.attribute_md5
215+
if queue.fifo_queue:
216+
msg_dict["SequenceNumber"] = msg.sequence_number
212217
resp["Successful"].append(msg_dict)
213218
return ActionResult(resp)
214219

tests/test_sqs/test_sqs.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,7 @@ def test_message_send_without_attributes():
462462
assert msg.get("MD5OfMessageBody") == "58fd9edd83341c29f1aebba81c31e257"
463463
assert "MD5OfMessageAttributes" not in msg
464464
assert " \n" not in msg.get("MessageId")
465+
assert "SequenceNumber" not in msg
465466

466467
messages = queue.receive_messages()
467468
assert len(messages) == 1
@@ -1357,12 +1358,13 @@ def test_fifo_send_receive_message_with_attribute_name(attribute_name, expected)
13571358

13581359
body = "this is a test message"
13591360

1360-
client.send_message(
1361+
resp = client.send_message(
13611362
QueueUrl=queue_url,
13621363
MessageBody=body,
13631364
MessageDeduplicationId="123",
13641365
MessageGroupId="456",
13651366
)
1367+
assert "SequenceNumber" in resp
13661368

13671369
message = client.receive_message(
13681370
QueueUrl=queue_url, AttributeNames=[attribute_name], MaxNumberOfMessages=2
@@ -1850,7 +1852,7 @@ def test_delete_message_using_old_receipt_handle():
18501852

18511853

18521854
@mock_aws
1853-
def test_send_message_batch():
1855+
def test_fifo_send_message_batch():
18541856
client = boto3.client("sqs", region_name=REGION)
18551857
response = client.create_queue(
18561858
QueueName=f"{str(uuid4())[0:6]}.fifo", Attributes={"FifoQueue": "true"}
@@ -1887,6 +1889,8 @@ def test_send_message_batch():
18871889
)
18881890

18891891
assert sorted([entry["Id"] for entry in response["Successful"]]) == ["id_1", "id_2"]
1892+
for entry in response["Successful"]:
1893+
assert "SequenceNumber" in entry
18901894

18911895
response = client.receive_message(
18921896
QueueUrl=queue_url,
@@ -3346,6 +3350,8 @@ def test_message_delay_is_more_than_15_minutes():
33463350

33473351
assert sorted([entry["Id"] for entry in response["Successful"]]) == ["id_1"]
33483352
assert sorted([entry["Id"] for entry in response["Failed"]]) == ["id_2"]
3353+
for entry in response["Successful"]:
3354+
assert "SequenceNumber" not in entry
33493355

33503356
time.sleep(1.1)
33513357

0 commit comments

Comments
 (0)