From eaeb865a338fec6f8303d1db44ad3aa3f5c8b0d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Tue, 22 Jun 2021 12:17:48 -0400 Subject: [PATCH] ut_syncHistory: fix testCreateConversationWithMessagesThenAddDevice sendMessage is async, causing messages to be mixed before the assert Change-Id: Ia08855a6a1516db2ee5acf01c166055831be80eb --- test/unitTest/syncHistory/syncHistory.cpp | 45 +++++++++++++++-------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/test/unitTest/syncHistory/syncHistory.cpp b/test/unitTest/syncHistory/syncHistory.cpp index d8a8f36c79..9da0f30a0f 100644 --- a/test/unitTest/syncHistory/syncHistory.cpp +++ b/test/unitTest/syncHistory/syncHistory.cpp @@ -208,11 +208,39 @@ void SyncHistoryTest::testCreateConversationWithMessagesThenAddDevice() { auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); - // Start conversation auto convId = aliceAccount->startConversation(); + + std::mutex mtx; + std::unique_lock<std::mutex> lk {mtx}; + std::condition_variable cv; + std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; + auto conversationReady = false; + auto messageReceived = false; + confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::MessageReceived>( + [&](const std::string& accountId, + const std::string& /* conversationId */, + std::map<std::string, std::string> /*message*/) { + messageReceived = true; + cv.notify_one(); + })); + confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationReady>( + [&](const std::string& accountId, const std::string& conversationId) { + if (accountId == alice2Id && conversationId == convId) { + conversationReady = true; + cv.notify_one(); + } + })); + DRing::registerSignalHandlers(confHandlers); + confHandlers.clear(); + + // Start conversation + messageReceived = false; aliceAccount->sendMessage(convId, std::string("Message 1")); + CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(10), [&] { return messageReceived; })); aliceAccount->sendMessage(convId, std::string("Message 2")); + CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(10), [&] { return messageReceived; })); aliceAccount->sendMessage(convId, std::string("Message 3")); + CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(10), [&] { return messageReceived; })); // Now create alice2 auto aliceArchive = std::filesystem::current_path().string() + "/alice.gz"; @@ -228,21 +256,6 @@ SyncHistoryTest::testCreateConversationWithMessagesThenAddDevice() details[ConfProperties::ARCHIVE_PATH] = aliceArchive; alice2Id = Manager::instance().addAccount(details); - std::mutex mtx; - std::unique_lock<std::mutex> lk {mtx}; - std::condition_variable cv; - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - auto conversationReady = false; - confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationReady>( - [&](const std::string& accountId, const std::string& conversationId) { - if (accountId == alice2Id && conversationId == convId) { - conversationReady = true; - cv.notify_one(); - } - })); - DRing::registerSignalHandlers(confHandlers); - confHandlers.clear(); - // Check if conversation is ready CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(60), [&]() { return conversationReady; })); auto alice2Account = Manager::instance().getAccount<JamiAccount>(alice2Id); -- GitLab