@@ -1838,4 +1838,208 @@ Y_UNIT_TEST_SUITE(TestHttpProxy) {
18381838 UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
18391839 UNIT_ASSERT_VALUES_EQUAL (GetByPath<TString>(json, " __type" ), " AWS.SimpleQueueService.NonExistentQueue" );
18401840 }
1841+
1842+ Y_UNIT_TEST_F (TestSetQueueAttributes, THttpProxyTestMock) {
1843+ auto createQueueReq = CreateSqsCreateQueueRequest ();
1844+ NJson::TJsonValue attributes;
1845+ attributes[" DelaySeconds" ] = " 1" ;
1846+ createQueueReq[" Attributes" ] = attributes;
1847+ auto res = SendHttpRequest (" /Root" , " AmazonSQS.CreateQueue" , std::move (createQueueReq), FormAuthorizationStr (" ru-central1" ));
1848+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
1849+ NJson::TJsonValue json;
1850+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
1851+
1852+ TString resultQueueUrl = GetByPath<TString>(json, " QueueUrl" );
1853+
1854+ NJson::TJsonValue setQueueAttributes;
1855+ setQueueAttributes[" QueueUrl" ] = resultQueueUrl;
1856+ attributes = {};
1857+ attributes[" DelaySeconds" ] = " 2" ;
1858+ setQueueAttributes[" Attributes" ] = attributes;
1859+
1860+ res = SendHttpRequest (" /Root" , " AmazonSQS.SetQueueAttributes" , std::move (setQueueAttributes), FormAuthorizationStr (" ru-central1" ));
1861+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
1862+
1863+ NJson::TJsonValue getQueueAttributes;
1864+ getQueueAttributes[" QueueUrl" ] = resultQueueUrl;
1865+ NJson::TJsonArray attributeNames = {" DelaySeconds" };
1866+ getQueueAttributes[" AttributeNames" ] = attributeNames;
1867+
1868+ res = SendHttpRequest (" /Root" , " AmazonSQS.GetQueueAttributes" , std::move (getQueueAttributes), FormAuthorizationStr (" ru-central1" ));
1869+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
1870+ NJson::TJsonValue resultJson;
1871+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &resultJson));
1872+ UNIT_ASSERT_VALUES_EQUAL (resultJson[" Attributes" ][" DelaySeconds" ], " 2" );
1873+ }
1874+
1875+ Y_UNIT_TEST_F (TestSendMessageBatch, THttpProxyTestMock) {
1876+ auto createQueueReq = CreateSqsCreateQueueRequest ();
1877+ auto res = SendHttpRequest (" /Root" , " AmazonSQS.CreateQueue" , std::move (createQueueReq), FormAuthorizationStr (" ru-central1" ));
1878+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
1879+ NJson::TJsonValue json;
1880+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
1881+ TString resultQueueUrl = GetByPath<TString>(json, " QueueUrl" );
1882+ UNIT_ASSERT (resultQueueUrl.EndsWith (" ExampleQueueName" ));
1883+
1884+ NJson::TJsonValue message0;
1885+ message0[" Id" ] = " Id-0" ;
1886+ message0[" MessageBody" ] = " MessageBody-0" ;
1887+ message0[" MessageDeduplicationId" ] = " MessageDeduplicationId-0" ;
1888+
1889+ NJson::TJsonValue message1;
1890+ message1[" Id" ] = " Id-1" ;
1891+ message1[" MessageBody" ] = " MessageBody-1" ;
1892+ message1[" MessageDeduplicationId" ] = " MessageDeduplicationId-1" ;
1893+
1894+ NJson::TJsonArray entries = {message0, message1};
1895+
1896+ NJson::TJsonValue sendMessageBatchReq;
1897+ sendMessageBatchReq[" QueueUrl" ] = resultQueueUrl;
1898+ sendMessageBatchReq[" Entries" ] = entries;
1899+
1900+ res = SendHttpRequest (" /Root" , " AmazonSQS.SendMessageBatch" , std::move (sendMessageBatchReq), FormAuthorizationStr (" ru-central1" ));
1901+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
1902+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
1903+ UNIT_ASSERT (json[" Successful" ].GetArray ().size () == 2 );
1904+ auto succesful0 = json[" Successful" ][0 ];
1905+ UNIT_ASSERT (succesful0[" Id" ] == " Id-0" );
1906+ UNIT_ASSERT (!GetByPath<TString>(succesful0, " Md5OfMessageBody" ).empty ());
1907+ UNIT_ASSERT (!GetByPath<TString>(succesful0, " MessageId" ).empty ());
1908+ }
1909+
1910+ Y_UNIT_TEST_F (TestDeleteMessageBatch, THttpProxyTestMock) {
1911+ auto createQueueReq = CreateSqsCreateQueueRequest ();
1912+ auto res = SendHttpRequest (" /Root" , " AmazonSQS.CreateQueue" , std::move (createQueueReq), FormAuthorizationStr (" ru-central1" ));
1913+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
1914+ NJson::TJsonValue json;
1915+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
1916+ TString resultQueueUrl = GetByPath<TString>(json, " QueueUrl" );
1917+ UNIT_ASSERT (resultQueueUrl.EndsWith (" ExampleQueueName" ));
1918+
1919+ NJson::TJsonValue message0;
1920+ message0[" Id" ] = " Id-0" ;
1921+ message0[" MessageBody" ] = " MessageBody-0" ;
1922+ message0[" MessageDeduplicationId" ] = " MessageDeduplicationId-0" ;
1923+
1924+ NJson::TJsonValue message1;
1925+ message1[" Id" ] = " Id-1" ;
1926+ message1[" MessageBody" ] = " MessageBody-1" ;
1927+ message1[" MessageDeduplicationId" ] = " MessageDeduplicationId-1" ;
1928+
1929+ NJson::TJsonArray entries = {message0, message1};
1930+
1931+ NJson::TJsonValue sendMessageBatchReq;
1932+ sendMessageBatchReq[" QueueUrl" ] = resultQueueUrl;
1933+ sendMessageBatchReq[" Entries" ] = entries;
1934+
1935+ res = SendHttpRequest (" /Root" , " AmazonSQS.SendMessageBatch" , std::move (sendMessageBatchReq), FormAuthorizationStr (" ru-central1" ));
1936+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
1937+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
1938+ UNIT_ASSERT (json[" Successful" ].GetArray ().size () == 2 );
1939+
1940+ TVector<NJson::TJsonValue> messages;
1941+ for (int i = 0 ; i < 20 ; ++i) {
1942+ NJson::TJsonValue receiveMessageReq;
1943+ receiveMessageReq[" QueueUrl" ] = resultQueueUrl;
1944+ res = SendHttpRequest (" /Root" , " AmazonSQS.ReceiveMessage" , std::move (receiveMessageReq), FormAuthorizationStr (" ru-central1" ));
1945+ if (res.Body != TString (" {}" )) {
1946+ NJson::ReadJsonTree (res.Body , &json);
1947+ if (json[" Messages" ].GetArray ().size () == 2 ) {
1948+ messages.push_back (json[" Messages" ][0 ]);
1949+ messages.push_back (json[" Messages" ][1 ]);
1950+ break ;
1951+ }
1952+ if (json[" Messages" ].GetArray ().size () == 1 ) {
1953+ messages.push_back (json[" Messages" ][0 ]);
1954+ if (messages.size () == 2 ) {
1955+ break ;
1956+ }
1957+ }
1958+ }
1959+ std::this_thread::sleep_for (std::chrono::milliseconds (1000 ));
1960+ }
1961+
1962+ UNIT_ASSERT_VALUES_EQUAL (messages.size (), 2 );
1963+
1964+ auto receiptHandle0 = messages[0 ][" ReceiptHandle" ].GetString ();
1965+ UNIT_ASSERT (!receiptHandle0.Empty ());
1966+ auto receiptHandle1 = messages[1 ][" ReceiptHandle" ].GetString ();
1967+ UNIT_ASSERT (!receiptHandle1.Empty ());
1968+
1969+ NJson::TJsonValue deleteMessageBatchReq;
1970+ deleteMessageBatchReq[" QueueUrl" ] = resultQueueUrl;
1971+
1972+ NJson::TJsonValue entry0;
1973+ entry0[" Id" ] = " Id-0" ;
1974+ entry0[" ReceiptHandle" ] = receiptHandle0;
1975+
1976+ NJson::TJsonValue entry1;
1977+ entry1[" Id" ] = " Id-1" ;
1978+ entry1[" ReceiptHandle" ] = receiptHandle1;
1979+
1980+ NJson::TJsonArray deleteEntries = {entry0, entry1};
1981+ deleteMessageBatchReq[" Entries" ] = deleteEntries;
1982+
1983+ res = SendHttpRequest (" /Root" , " AmazonSQS.DeleteMessageBatch" , std::move (deleteMessageBatchReq), FormAuthorizationStr (" ru-central1" ));
1984+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
1985+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
1986+ UNIT_ASSERT_VALUES_EQUAL (json[" Successful" ].GetArray ().size (), 2 );
1987+ UNIT_ASSERT_VALUES_EQUAL (json[" Successful" ][0 ][" Id" ], " Id-0" );
1988+ UNIT_ASSERT_VALUES_EQUAL (json[" Successful" ][1 ][" Id" ], " Id-1" );
1989+
1990+ NJson::TJsonValue receiveMessageReq;
1991+ receiveMessageReq[" QueueUrl" ] = resultQueueUrl;
1992+ res = SendHttpRequest (" /Root" , " AmazonSQS.ReceiveMessage" , std::move (receiveMessageReq), FormAuthorizationStr (" ru-central1" ));
1993+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
1994+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
1995+ UNIT_ASSERT_VALUES_EQUAL (json[" Messages" ].GetArray ().size (), 0 );
1996+
1997+ }
1998+
1999+ Y_UNIT_TEST_F (TestListDeadLetterSourceQueues, THttpProxyTestMock) {
2000+ auto createQueueReq = CreateSqsCreateQueueRequest ();
2001+ auto res = SendHttpRequest (" /Root" , " AmazonSQS.CreateQueue" , std::move (createQueueReq), FormAuthorizationStr (" ru-central1" ));
2002+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
2003+ NJson::TJsonValue json;
2004+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
2005+
2006+ TString resultQueueUrl = GetByPath<TString>(json, " QueueUrl" );
2007+
2008+ auto createDlqReq = CreateSqsCreateQueueRequest ();
2009+ createQueueReq[" QueueName" ] = " DlqName" ;
2010+ res = SendHttpRequest (" /Root" , " AmazonSQS.CreateQueue" , std::move (createQueueReq), FormAuthorizationStr (" ru-central1" ));
2011+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
2012+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
2013+
2014+ TString dlqUrl = GetByPath<TString>(json, " QueueUrl" );
2015+
2016+ NJson::TJsonValue getQueueAttributes;
2017+ getQueueAttributes[" QueueUrl" ] = dlqUrl;
2018+ NJson::TJsonArray attributeNames = {" QueueArn" };
2019+ getQueueAttributes[" AttributeNames" ] = attributeNames;
2020+ res = SendHttpRequest (" /Root" , " AmazonSQS.GetQueueAttributes" , std::move (getQueueAttributes), FormAuthorizationStr (" ru-central1" ));
2021+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
2022+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
2023+
2024+ TString dlqArn = GetByPath<TString>(json[" Attributes" ], " QueueArn" );
2025+
2026+ NJson::TJsonValue setQueueAttributes;
2027+ setQueueAttributes[" QueueUrl" ] = resultQueueUrl;
2028+ NJson::TJsonValue attributes = {};
2029+ auto redrivePolicy = TStringBuilder ()
2030+ << " {\" deadLetterTargetArn\" : \" " << dlqArn << " \" , \" maxReceiveCount\" : 100}" ;
2031+ attributes[" RedrivePolicy" ] = redrivePolicy;
2032+ setQueueAttributes[" Attributes" ] = attributes;
2033+
2034+ res = SendHttpRequest (" /Root" , " AmazonSQS.SetQueueAttributes" , std::move (setQueueAttributes), FormAuthorizationStr (" ru-central1" ));
2035+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
2036+
2037+ NJson::TJsonValue listDeadLetterSourceQueues;
2038+ listDeadLetterSourceQueues[" QueueUrl" ] = dlqUrl;
2039+ res = SendHttpRequest (" /Root" , " AmazonSQS.ListDeadLetterSourceQueues" , std::move (listDeadLetterSourceQueues), FormAuthorizationStr (" ru-central1" ));
2040+ UNIT_ASSERT_VALUES_EQUAL (res.HttpCode , 200 );
2041+ UNIT_ASSERT (NJson::ReadJsonTree (res.Body , &json));
2042+ UNIT_ASSERT_VALUES_EQUAL (json[" QueueUrls" ][0 ], resultQueueUrl);
2043+ }
2044+
18412045} // Y_UNIT_TEST_SUITE(TestHttpProxy)
0 commit comments