Skip to content

Commit 7fbf2c3

Browse files
authored
YMQ: add more tests for Message methods (#10359)
1 parent cda64ac commit 7fbf2c3

File tree

2 files changed

+504
-353
lines changed

2 files changed

+504
-353
lines changed

ydb/core/http_proxy/ut/datastreams_fixture.h

Lines changed: 103 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -347,94 +347,95 @@ class THttpProxyTestMock : public NUnitTest::TBaseFixture {
347347
return json;
348348
}
349349

350-
NJson::TJsonMap DeleteQueue(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
351-
auto res = SendHttpRequest("/Root", "AmazonSQS.DeleteQueue", request, FormAuthorizationStr("ru-central1"));
350+
NJson::TJsonMap SendJsonRequest(TString method, NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
351+
auto res = SendHttpRequest("/Root", TStringBuilder() << "AmazonSQS." << method, request, FormAuthorizationStr("ru-central1"));
352352
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, expectedHttpCode);
353353
NJson::TJsonMap json;
354354
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
355355
return json;
356356
}
357357

358+
NJson::TJsonMap DeleteQueue(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
359+
return SendJsonRequest("DeleteQueue", request, expectedHttpCode);
360+
}
361+
358362
NJson::TJsonMap GetQueueAttributes(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
359-
auto res = SendHttpRequest("/Root", "AmazonSQS.GetQueueAttributes", request, FormAuthorizationStr("ru-central1"));
360-
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, expectedHttpCode);
361-
NJson::TJsonMap json;
362-
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
363-
return json;
363+
return SendJsonRequest("GetQueueAttributes", request, expectedHttpCode);
364364
}
365365

366366
NJson::TJsonMap SendMessage(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
367-
auto res = SendHttpRequest("/Root", "AmazonSQS.SendMessage", request, FormAuthorizationStr("ru-central1"));
368-
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, expectedHttpCode);
369-
NJson::TJsonMap json;
370-
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
367+
auto json = SendJsonRequest("SendMessage", request, expectedHttpCode);
368+
UNIT_ASSERT(!GetByPath<TString>(json, "MD5OfMessageBody").empty());
371369
return json;
372370
}
373371

372+
NJson::TJsonMap SendMessageBatch(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
373+
return SendJsonRequest("SendMessageBatch", request, expectedHttpCode);
374+
}
375+
374376
NJson::TJsonMap ReceiveMessage(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
375-
auto res = SendHttpRequest("/Root", "AmazonSQS.ReceiveMessage", request, FormAuthorizationStr("ru-central1"));
376-
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, expectedHttpCode);
377-
NJson::TJsonMap json;
378-
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
379-
return json;
377+
return SendJsonRequest("ReceiveMessage", request, expectedHttpCode);
380378
}
381379

382380
NJson::TJsonMap DeleteMessage(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
383-
auto res = SendHttpRequest("/Root", "AmazonSQS.DeleteMessage", request, FormAuthorizationStr("ru-central1"));
384-
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, expectedHttpCode);
385-
NJson::TJsonMap json;
386-
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
387-
return json;
381+
return SendJsonRequest("DeleteMessage", request, expectedHttpCode);
382+
}
383+
384+
NJson::TJsonMap DeleteMessageBatch(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
385+
return SendJsonRequest("DeleteMessageBatch", request, expectedHttpCode);
388386
}
389387

390388
NJson::TJsonMap GetQueueUrl(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
391-
auto res = SendHttpRequest("/Root", "AmazonSQS.GetQueueUrl", request, FormAuthorizationStr("ru-central1"));
392-
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, expectedHttpCode);
393-
NJson::TJsonMap json;
394-
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
395-
return json;
389+
return SendJsonRequest("GetQueueUrl", request, expectedHttpCode);
396390
}
397391

398392
NJson::TJsonMap ListQueues(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
399-
auto res = SendHttpRequest("/Root", "AmazonSQS.ListQueues", request, FormAuthorizationStr("ru-central1"));
400-
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, expectedHttpCode);
401-
NJson::TJsonMap json;
402-
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
403-
return json;
393+
return SendJsonRequest("ListQueues", request, expectedHttpCode);
404394
}
405395

406396
NJson::TJsonMap PurgeQueue(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
407-
auto res = SendHttpRequest("/Root", "AmazonSQS.PurgeQueue", request, FormAuthorizationStr("ru-central1"));
408-
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, expectedHttpCode);
409-
NJson::TJsonMap json;
410-
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
411-
return json;
397+
return SendJsonRequest("PurgeQueue", request, expectedHttpCode);
412398
}
413399

414400
NJson::TJsonMap SetQueueAttributes(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
415-
auto res = SendHttpRequest("/Root", "AmazonSQS.SetQueueAttributes", request, FormAuthorizationStr("ru-central1"));
416-
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, expectedHttpCode);
417-
NJson::TJsonMap json;
418-
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
419-
return json;
401+
return SendJsonRequest("SetQueueAttributes", request, expectedHttpCode);
420402
}
421403

422-
bool WaitQueueAttributes(TString queueUrl, size_t retries, std::function<bool (NJson::TJsonMap json)> predicate) {
404+
void WaitQueueAttributes(TString queueUrl, size_t retries, NJson::TJsonMap attributes) {
405+
WaitQueueAttributes(queueUrl, retries, [&attributes](NJson::TJsonMap json) {
406+
for (const auto& [k, v] : attributes.GetMapSafe()) {
407+
if (json["Attributes"][k] != v) {
408+
return false;
409+
}
410+
}
411+
return true;
412+
});
413+
}
414+
415+
void WaitQueueAttributes(TString queueUrl, size_t retries, std::function<bool (NJson::TJsonMap json)> predicate) {
423416
for (size_t i = 0; i < retries; ++i) {
424417
auto json = GetQueueAttributes({
425418
{"QueueUrl", queueUrl},
426419
{"AttributeNames", NJson::TJsonArray{"All"}}
427420
});
428421

429422
if (predicate(json)) {
430-
return true;
423+
return;
431424
}
432425

433426
if (i + 1 < retries) {
434427
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
435428
}
436429
}
437-
return false;
430+
UNIT_FAIL("WaitQueueAttributes: predicate is still false");
431+
}
432+
433+
NJson::TJsonMap ChangeMessageVisibility(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
434+
return SendJsonRequest("ChangeMessageVisibility", request, expectedHttpCode);
435+
}
436+
437+
NJson::TJsonMap ChangeMessageVisibilityBatch(NJson::TJsonMap request, ui32 expectedHttpCode = 200) {
438+
return SendJsonRequest("ChangeMessageVisibilityBatch", request, expectedHttpCode);
438439
}
439440

440441
private:
@@ -593,6 +594,54 @@ class THttpProxyTestMock : public NUnitTest::TBaseFixture {
593594
"KeyColumnNames: [\"QueueIdNumberHash\", \"QueueIdNumber\", \"Offset\"]"
594595
);
595596

597+
client.CreateTable("/Root/SQS/.FIFO",
598+
"Name: \"Deduplication\""
599+
"Columns { Name: \"QueueIdNumberHash\" Type: \"Uint64\"}"
600+
"Columns { Name: \"QueueIdNumber\" Type: \"Uint64\"}"
601+
"Columns { Name: \"DedupId\" Type: \"String\"}"
602+
"Columns { Name: \"Deadline\" Type: \"Uint64\"}"
603+
"Columns { Name: \"Offset\" Type: \"Uint64\"}"
604+
"Columns { Name: \"MessageId\" Type: \"String\"}"
605+
"KeyColumnNames: [\"QueueIdNumberHash\", \"QueueIdNumber\", \"DedupId\"]"
606+
);
607+
608+
client.CreateTable("/Root/SQS/.FIFO",
609+
"Name: \"Groups\""
610+
"Columns { Name: \"QueueIdNumberHash\" Type: \"Uint64\"}"
611+
"Columns { Name: \"QueueIdNumber\" Type: \"Uint64\"}"
612+
"Columns { Name: \"GroupId\" Type: \"String\"}"
613+
"Columns { Name: \"VisibilityDeadline\" Type: \"Uint64\"}"
614+
"Columns { Name: \"RandomId\" Type: \"Uint64\"}"
615+
"Columns { Name: \"Head\" Type: \"Uint64\"}"
616+
"Columns { Name: \"Tail\" Type: \"Uint64\"}"
617+
"Columns { Name: \"ReceiveAttemptId\" Type: \"Utf8\"}"
618+
"Columns { Name: \"LockTimestamp\" Type: \"Uint64\"}"
619+
"KeyColumnNames: [\"QueueIdNumberHash\", \"QueueIdNumber\", \"GroupId\"]"
620+
);
621+
622+
client.CreateTable("/Root/SQS/.FIFO",
623+
"Name: \"Data\""
624+
"Columns { Name: \"QueueIdNumberHash\" Type: \"Uint64\"}"
625+
"Columns { Name: \"QueueIdNumber\" Type: \"Uint64\"}"
626+
"Columns { Name: \"RandomId\" Type: \"Uint64\"}"
627+
"Columns { Name: \"Offset\" Type: \"Uint64\"}"
628+
"Columns { Name: \"SenderId\" Type: \"String\"}"
629+
"Columns { Name: \"DedupId\" Type: \"String\"}"
630+
"Columns { Name: \"Attributes\" Type: \"String\"}"
631+
"Columns { Name: \"Data\" Type: \"String\"}"
632+
"Columns { Name: \"MessageId\" Type: \"String\"}"
633+
"KeyColumnNames: [\"QueueIdNumberHash\", \"QueueIdNumber\", \"RandomId\", \"Offset\"]"
634+
);
635+
636+
client.CreateTable("/Root/SQS/.FIFO",
637+
"Name: \"Reads\""
638+
"Columns { Name: \"QueueIdNumberHash\" Type: \"Uint64\"}"
639+
"Columns { Name: \"QueueIdNumber\" Type: \"Uint64\"}"
640+
"Columns { Name: \"ReceiveAttemptId\" Type: \"Utf8\"}"
641+
"Columns { Name: \"Deadline\" Type: \"Uint64\"}"
642+
"KeyColumnNames: [\"QueueIdNumberHash\", \"QueueIdNumber\", \"ReceiveAttemptId\"]"
643+
);
644+
596645
client.CreateTable("/Root/SQS",
597646
"Name: \".Settings\""
598647
"Columns { Name: \"Account\" Type: \"Utf8\"}"
@@ -697,12 +746,17 @@ class THttpProxyTestMock : public NUnitTest::TBaseFixture {
697746
<< sentTimestampIdxCommonColumns
698747
<< sendTimestampIdsKeys
699748
);
749+
700750
client.CreateTable("/Root/SQS/.FIFO",
701-
TStringBuilder()
702-
<< "Name: \"SentTimestampIdx\""
703-
<< "Columns { Name: \"GroupId\" Type: \"String\"}"
704-
<< sentTimestampIdxCommonColumns
705-
<< sendTimestampIdsKeys
751+
"Name: \"SentTimestampIdx\""
752+
"Columns { Name: \"QueueIdNumberHash\" Type: \"Uint64\"}"
753+
"Columns { Name: \"QueueIdNumber\" Type: \"Uint64\"}"
754+
"Columns { Name: \"SentTimestamp\" Type: \"Uint64\"}"
755+
"Columns { Name: \"Offset\" Type: \"Uint64\"}"
756+
"Columns { Name: \"GroupId\" Type: \"String\"}"
757+
"Columns { Name: \"RandomId\" Type: \"Uint64\"}"
758+
"Columns { Name: \"DelayDeadline\" Type: \"Uint64\"}"
759+
"KeyColumnNames: [\"QueueIdNumberHash\", \"QueueIdNumber\", \"SentTimestamp\", \"Offset\"]"
706760
);
707761

708762
client.CreateTable("/Root/SQS/.STD",

0 commit comments

Comments
 (0)