Page MenuHomePhabricator

D4749.diff
No OneTemporary

D4749.diff

diff --git a/services/tunnelbroker/test/AmqpManagerTest.cpp b/services/tunnelbroker/test/AmqpManagerTest.cpp
--- a/services/tunnelbroker/test/AmqpManagerTest.cpp
+++ b/services/tunnelbroker/test/AmqpManagerTest.cpp
@@ -7,6 +7,7 @@
#include <gtest/gtest.h>
+#include <future>
#include <string>
#include <thread>
@@ -14,6 +15,7 @@
class AmqpManagerTest : public testing::Test {
protected:
+ const size_t MESSSAGE_MAX_WAIT_TIME = 10000; // 10 seconds
virtual void SetUp() {
config::ConfigManager::getInstance().load();
AmqpManager::getInstance().init();
@@ -25,7 +27,8 @@
const std::string fromDeviceID =
"web:JouLWf84zqRIsjBdHLOcHS9M4eSCz7VF84wT1uOD83u1qxDAqmqI4swmxNINjuhd";
const std::string toDeviceID =
- "mobile:EMQNoQ7b2ueEmQ4QsevRWlXxFCNt055y20T1PHdoYAQRt0S6TLzZWNM6XSvdWqxm";
+ "mobile:"
+ "EMQNoQ7b2ueEmQ4QsevRWlXxFCNt055y20T1PHdoYAQRt0S6TLzZWNM6XSvdWqxm";
const std::string payload =
"lYlNcO6RR4i9UW3G1DGjdJTRRGbqtPya2aj94ZRjIGZWoHwT5MB9ciAgnQf2VafYb9Tl"
"8SZkX37tg4yZ9pOb4lqslY4g4h58OmWjumghVRvrPUZDalUuK8OLs1Qoengpu9wccxAk"
@@ -39,11 +42,28 @@
messageID, fromDeviceID, toDeviceID, payload, ""};
// To properly test multi-thread delivery we should send in another thread
std::thread sendThread([messageItem]() {
- EXPECT_EQ(AmqpManager::getInstance().send(&messageItem), true);
+ EXPECT_TRUE(AmqpManager::getInstance().send(&messageItem));
});
sendThread.join();
- DeliveryBrokerMessage receivedMessage =
- DeliveryBroker::getInstance().pop(toDeviceID);
+
+ std::promise<DeliveryBrokerMessage> promiseFinished;
+ std::future<DeliveryBrokerMessage> futureResult =
+ promiseFinished.get_future();
+ std::thread(
+ [](std::promise<DeliveryBrokerMessage> &promise,
+ const std::string &toDeviceID) {
+ promise.set_value(DeliveryBroker::getInstance().pop(toDeviceID));
+ },
+ std::ref(promiseFinished),
+ std::ref(toDeviceID))
+ .detach();
+ if (futureResult.wait_for(std::chrono::milliseconds(
+ MESSSAGE_MAX_WAIT_TIME)) == std::future_status::timeout) {
+ FAIL() << "Waiting timeout of " << MESSSAGE_MAX_WAIT_TIME
+ << "ms for a pop message from AMQP client is reached";
+ };
+ DeliveryBrokerMessage receivedMessage = futureResult.get();
+
EXPECT_EQ(messageID, receivedMessage.messageID);
EXPECT_EQ(fromDeviceID, receivedMessage.fromDeviceID);
EXPECT_EQ(payload, receivedMessage.payload);
@@ -64,8 +84,25 @@
EXPECT_EQ(AmqpManager::getInstance().send(&messageItem), true);
});
sendThread.join();
- DeliveryBrokerMessage receivedMessage =
- DeliveryBroker::getInstance().pop(toDeviceID);
+
+ std::promise<DeliveryBrokerMessage> promiseFinished;
+ std::future<DeliveryBrokerMessage> futureResult =
+ promiseFinished.get_future();
+ std::thread(
+ [](std::promise<DeliveryBrokerMessage> &promise,
+ const std::string &toDeviceID) {
+ promise.set_value(DeliveryBroker::getInstance().pop(toDeviceID));
+ },
+ std::ref(promiseFinished),
+ std::ref(toDeviceID))
+ .detach();
+ if (futureResult.wait_for(std::chrono::milliseconds(
+ MESSSAGE_MAX_WAIT_TIME)) == std::future_status::timeout) {
+ FAIL() << "Waiting timeout of " << MESSSAGE_MAX_WAIT_TIME
+ << "ms for a pop message from AMQP client is reached";
+ };
+ DeliveryBrokerMessage receivedMessage = futureResult.get();
+
EXPECT_EQ(messageID, receivedMessage.messageID)
<< "Generated messageID \"" << messageID
<< "\" differs from what was got from amqp message "

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 23, 4:02 PM (19 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2571465
Default Alt Text
D4749.diff (3 KB)

Event Timeline