@@ -347,94 +347,95 @@ class THttpProxyTestMock : public NUnitTest::TBaseFixture {
347
347
return json;
348
348
}
349
349
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" ));
352
352
UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , expectedHttpCode);
353
353
NJson::TJsonMap json;
354
354
UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
355
355
return json;
356
356
}
357
357
358
+ NJson::TJsonMap DeleteQueue (NJson::TJsonMap request, ui32 expectedHttpCode = 200 ) {
359
+ return SendJsonRequest (" DeleteQueue" , request, expectedHttpCode);
360
+ }
361
+
358
362
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);
364
364
}
365
365
366
366
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 ());
371
369
return json;
372
370
}
373
371
372
+ NJson::TJsonMap SendMessageBatch (NJson::TJsonMap request, ui32 expectedHttpCode = 200 ) {
373
+ return SendJsonRequest (" SendMessageBatch" , request, expectedHttpCode);
374
+ }
375
+
374
376
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);
380
378
}
381
379
382
380
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) ;
388
386
}
389
387
390
388
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);
396
390
}
397
391
398
392
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);
404
394
}
405
395
406
396
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);
412
398
}
413
399
414
400
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);
420
402
}
421
403
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) {
423
416
for (size_t i = 0 ; i < retries; ++i) {
424
417
auto json = GetQueueAttributes ({
425
418
{" QueueUrl" , queueUrl},
426
419
{" AttributeNames" , NJson::TJsonArray{" All" }}
427
420
});
428
421
429
422
if (predicate (json)) {
430
- return true ;
423
+ return ;
431
424
}
432
425
433
426
if (i + 1 < retries) {
434
427
std::this_thread::sleep_for (std::chrono::milliseconds (1000 ));
435
428
}
436
429
}
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);
438
439
}
439
440
440
441
private:
@@ -593,6 +594,54 @@ class THttpProxyTestMock : public NUnitTest::TBaseFixture {
593
594
" KeyColumnNames: [\" QueueIdNumberHash\" , \" QueueIdNumber\" , \" Offset\" ]"
594
595
);
595
596
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
+
596
645
client.CreateTable (" /Root/SQS" ,
597
646
" Name: \" .Settings\" "
598
647
" Columns { Name: \" Account\" Type: \" Utf8\" }"
@@ -697,12 +746,17 @@ class THttpProxyTestMock : public NUnitTest::TBaseFixture {
697
746
<< sentTimestampIdxCommonColumns
698
747
<< sendTimestampIdsKeys
699
748
);
749
+
700
750
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\" ]"
706
760
);
707
761
708
762
client.CreateTable (" /Root/SQS/.STD" ,
0 commit comments