void SQSQueue::Push(const Message& message) { if(IsInitialized()) { AWS_LOGSTREAM_TRACE(CLASS_TAG, "Sending message to " << m_queueUrl); SendMessageRequest sendMessageRequest; sendMessageRequest.SetQueueUrl(m_queueUrl); sendMessageRequest.SetMessageBody(message.GetBody()); sendMessageRequest.SetMessageAttributes(message.GetMessageAttributes()); std::shared_ptr<AsyncCallerContext> sendMessageContext = Aws::MakeShared<QueueMessageContext>(CLASS_TAG, message); m_client->SendMessageAsync(sendMessageRequest, std::bind(&SQSQueue::OnMessageSentOutcomeReceived, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4), sendMessageContext); } else { AWS_LOG_ERROR(CLASS_TAG, "Queue is not initialized, not pushing. Call EnsureQueueIsInitialized before calling this method."); } }
TEST_F(QueueOperationTest, TestSendReceiveDelete) { Aws::String queueName = BuildResourceName(BASE_SEND_RECEIVE_QUEUE_NAME); Aws::String queueUrl = CreateDefaultQueue(queueName); ASSERT_TRUE(queueUrl.find(queueName) != Aws::String::npos); SendMessageRequest sendMessageRequest; sendMessageRequest.SetMessageBody("TestMessageBody"); MessageAttributeValue stringAttributeValue; stringAttributeValue.SetStringValue("TestString"); stringAttributeValue.SetDataType("String"); sendMessageRequest.AddMessageAttributes("TestStringAttribute", stringAttributeValue); MessageAttributeValue binaryAttributeValue; Aws::Utils::ByteBuffer byteBuffer(10); for(unsigned i = 0; i < 10; ++i) { byteBuffer[i] = (unsigned char)i; } binaryAttributeValue.SetBinaryValue(byteBuffer); binaryAttributeValue.SetDataType("Binary"); sendMessageRequest.AddMessageAttributes("TestBinaryAttribute", binaryAttributeValue); sendMessageRequest.SetQueueUrl(queueUrl); SendMessageOutcome sendMessageOutcome = sqsClient->SendMessage(sendMessageRequest); ASSERT_TRUE(sendMessageOutcome.IsSuccess()); EXPECT_TRUE(sendMessageOutcome.GetResult().GetMessageId().length() > 0); ReceiveMessageRequest receiveMessageRequest; receiveMessageRequest.SetMaxNumberOfMessages(1); receiveMessageRequest.SetQueueUrl(queueUrl); receiveMessageRequest.AddMessageAttributeNames("All"); ReceiveMessageOutcome receiveMessageOutcome = sqsClient->ReceiveMessage(receiveMessageRequest); ASSERT_TRUE(receiveMessageOutcome.IsSuccess()); ReceiveMessageResult receiveMessageResult = receiveMessageOutcome.GetResult(); ASSERT_EQ(1uL, receiveMessageResult.GetMessages().size()); EXPECT_EQ("TestMessageBody", receiveMessageResult.GetMessages()[0].GetBody()); Aws::Map<Aws::String, MessageAttributeValue> messageAttributes = receiveMessageResult.GetMessages()[0].GetMessageAttributes(); ASSERT_TRUE(messageAttributes.find("TestStringAttribute") != messageAttributes.end()); EXPECT_EQ(stringAttributeValue.GetStringValue(), messageAttributes["TestStringAttribute"].GetStringValue()); ASSERT_TRUE(messageAttributes.find("TestBinaryAttribute") != messageAttributes.end()); EXPECT_EQ(byteBuffer, messageAttributes["TestBinaryAttribute"].GetBinaryValue()); DeleteMessageRequest deleteMessageRequest; deleteMessageRequest.SetQueueUrl(queueUrl); deleteMessageRequest.SetReceiptHandle(receiveMessageResult.GetMessages()[0].GetReceiptHandle()); DeleteMessageOutcome deleteMessageOutcome = sqsClient->DeleteMessage(deleteMessageRequest); ASSERT_TRUE(deleteMessageOutcome.IsSuccess()); receiveMessageOutcome = sqsClient->ReceiveMessage(receiveMessageRequest); EXPECT_EQ(0uL, receiveMessageOutcome.GetResult().GetMessages().size()); DeleteQueueRequest deleteQueueRequest; deleteQueueRequest.WithQueueUrl(queueUrl); DeleteQueueOutcome deleteQueueOutcome = sqsClient->DeleteQueue(deleteQueueRequest); ASSERT_TRUE(deleteQueueOutcome.IsSuccess()); }