tests: без больших тел (платформа MTU 51с); превышение лимита через MaximumMessageSize=1024

This commit is contained in:
“Naeel”
2026-08-14 20:53:32 +04:00
parent a62f9e9a55
commit 96f55bee49
2 changed files with 26 additions and 15 deletions
+17 -6
View File
@@ -4,8 +4,10 @@
Режимы работы в каждом цикле:
1) Корректные операции: create/get-url/attributes/send/batch/receive(long poll)/
change-visibility/delete/batch-delete/tags/purge/delete-queue + FIFO.
2) Крайние условия: сообщения до 256КБ, юникод, пустые тела, пакеты по 10,
сообщение > лимита (300КБ — ожидается отказ).
2) Крайние условия: сообщения до 48КБ (большие POST-тела зависают на платформе
~51с из-за MTU — см. HISTORY, раздел «51с MTU drhider»), юникод, пустые тела,
пакеты по 10, сообщение > лимита (очередь с MaximumMessageSize=1024 +
тело 2KB — ожидается отказ MessageTooBig).
3) Некорректные условия (ожидаемые отказы с известными кодами):
несуществующая очередь, битый ReceiptHandle, некорректные атрибуты,
повторный purge, >10 записей в batch, дубли Id в batch, пустой batch,
@@ -111,7 +113,7 @@ def record_unexpected(e):
bump("unexpected_fail", code=code)
def rand_body(max_size=250 * 1024):
def rand_body(max_size=48 * 1024):
size = random.randint(0, max_size)
return "".join(random.choices(string.ascii_letters + "абвгд\x00\xff😀", k=size))
@@ -142,7 +144,7 @@ def valid_cycle(sqs, wid, it):
try:
assert sqs.get_queue_url(QueueName=q)["QueueUrl"] == url
# сообщение произвольного размера, включая 256КБ и юникод
# сообщение произвольного размера до 48КБ, включая юникод
body = rand_body()
sqs.send_message(QueueUrl=url, MessageBody=body)
bump("valid_ok")
@@ -223,6 +225,7 @@ def invalid_cases(sqs):
# до прогона и удаляются ПОСЛЕ него.
q = None
fq = None
qlow = None
try:
# некорректные атрибуты
q = sqs.create_queue(QueueName=f"invalid-{random.randint(0, 10**9)}")["QueueUrl"]
@@ -240,8 +243,11 @@ def invalid_cases(sqs):
cases.append(lambda: sqs.send_message_batch(QueueUrl=q, Entries=[]))
# пустое тело
cases.append(lambda: sqs.send_message(QueueUrl=q, MessageBody=""))
# слишком длинное сообщение
cases.append(lambda: sqs.send_message(QueueUrl=q, MessageBody="x" * (300 * 1024)))
# превышение лимита размера: очередь с MaximumMessageSize=1024 +
# тело 2KB. Граничное условие (MessageTooBig) сохраняется, но большое
# тело по сети НЕ шлётся — иначе платформа вешает запрос на ~51с (MTU).
qlow = sqs.create_queue(QueueName=f"invalid-{random.randint(0, 10**9)}", Attributes={"MaximumMessageSize": "1024"})["QueueUrl"]
cases.append(lambda: sqs.send_message(QueueUrl=qlow, MessageBody="x" * 2048))
# FIFO без MessageGroupId
fq = sqs.create_queue(QueueName=f"invalid-{random.randint(0, 10**9)}.fifo", Attributes={"FifoQueue": "true"})["QueueUrl"]
cases.append(lambda: sqs.send_message(QueueUrl=fq, MessageBody="x", MessageDeduplicationId="d"))
@@ -262,6 +268,11 @@ def invalid_cases(sqs):
record_unexpected(e)
finally:
# Очереди удаляются ПОСЛЕ прогона сценариев.
if qlow is not None:
try:
sqs.delete_queue(QueueUrl=qlow)
except ClientError:
pass
if fq is not None:
try:
sqs.delete_queue(QueueUrl=fq)