From e5d95eb6d40facecd7169693567565b41c3c885b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Tue, 15 Jun 2021 16:40:34 -0400 Subject: [PATCH] test: fix testMemberJoinsNoBadFile by waiting for join before copying Change-Id: I4e34411c6e362c2aca31337224b077f7674d73da --- test/unitTest/conversation/conversation.cpp | 66 +++++++++++++++------ 1 file changed, 48 insertions(+), 18 deletions(-) diff --git a/test/unitTest/conversation/conversation.cpp b/test/unitTest/conversation/conversation.cpp index 790d487255..904a45ed6d 100644 --- a/test/unitTest/conversation/conversation.cpp +++ b/test/unitTest/conversation/conversation.cpp @@ -1428,9 +1428,9 @@ ConversationTest::testBanDevice() voteMessageGenerated = false, bob2GetMessage = false, bobGetMessage = false; confHandlers.insert( DRing::exportable_callback<DRing::ConversationSignal::ConversationRequestReceived>( - [&](const std::string& /*accountId* /, - const std::string& /* conversationId * /, - std::map<std::string, std::string> /*metadatas* /) { + [&](const std::string&, + const std::string&, + std::map<std::string, std::string>) { requestReceived = true; cv.notify_one(); })); @@ -2182,9 +2182,7 @@ ConversationTest::testMemberCannotBanOther() carlaConnected = false; confHandlers.insert( DRing::exportable_callback<DRing::ConversationSignal::ConversationRequestReceived>( - [&](const std::string& accountId, - const std::string& /* conversationId */, - std::map<std::string, std::string> /*metadatas*/) { + [&](const std::string&, const std::string&, std::map<std::string, std::string>) { requestReceived = true; cv.notify_one(); })); @@ -3010,7 +3008,8 @@ ConversationTest::testMemberJoinsNoBadFile() std::unique_lock<std::mutex> lk {mtx}; std::condition_variable cv; std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - bool conversationReady = false, errorDetected = false, carlaConnected = false; + bool conversationReady = false, errorDetected = false, carlaConnected = false, + memberMessageGenerated = false; confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationReady>( [&](const std::string& accountId, const std::string& /* conversationId */) { if (accountId == carlaId) { @@ -3018,12 +3017,21 @@ ConversationTest::testMemberJoinsNoBadFile() cv.notify_one(); } })); + confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::MessageReceived>( + [&](const std::string& accountId, + const std::string& conversationId, + std::map<std::string, std::string> message) { + if (accountId == aliceId && conversationId == convId && message["type"] == "member") { + memberMessageGenerated = true; + cv.notify_one(); + } + })); confHandlers.insert( DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( [&](const std::string&, const std::map<std::string, std::string>&) { auto details = carlaAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - if (daemonStatus == "REGISTERED") { + auto deviceAnnounced = details[DRing::Account::VolatileProperties::DEVICE_ANNOUNCED]; + if (deviceAnnounced == "true") { carlaConnected = true; cv.notify_one(); } @@ -3040,6 +3048,7 @@ ConversationTest::testMemberJoinsNoBadFile() DRing::registerSignalHandlers(confHandlers); aliceAccount->addConversationMember(convId, carlaUri, false); + CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(5), [&] { return memberMessageGenerated; })); // Cp conversations & convInfo auto repoPathAlice = fileutils::get_data_dir() + DIR_SEPARATOR_STR @@ -3057,15 +3066,14 @@ ConversationTest::testMemberJoinsNoBadFile() // Accept for alice and makes different heads addFile(carlaAccount, convId, "BADFILE"); ConversationRepository repo(carlaAccount, convId); - repo.join(); // Start Carla, should merge and all messages should be there - Manager::instance().sendRegister(carlaId, true); carlaAccount->loadConversations(); // Because of the copy + Manager::instance().sendRegister(carlaId, true); CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return carlaConnected; })); - carlaAccount->sendMessage(convId, "hi"s); errorDetected = false; + carlaAccount->sendMessage(convId, "hi"s); CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(60), [&] { return errorDetected; })); DRing::unregisterSignalHandlers(); @@ -3084,7 +3092,8 @@ ConversationTest::testMemberAddedNoCertificate() std::unique_lock<std::mutex> lk {mtx}; std::condition_variable cv; std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - bool conversationReady = false, errorDetected = false, carlaConnected = false; + bool conversationReady = false, errorDetected = false, carlaConnected = false, + memberMessageGenerated = false; confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationReady>( [&](const std::string& accountId, const std::string& /* conversationId */) { if (accountId == carlaId) { @@ -3092,12 +3101,21 @@ ConversationTest::testMemberAddedNoCertificate() cv.notify_one(); } })); + confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::MessageReceived>( + [&](const std::string& accountId, + const std::string& conversationId, + std::map<std::string, std::string> message) { + if (accountId == aliceId && conversationId == convId && message["type"] == "member") { + memberMessageGenerated = true; + cv.notify_one(); + } + })); confHandlers.insert( DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( [&](const std::string&, const std::map<std::string, std::string>&) { auto details = carlaAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - if (daemonStatus == "REGISTERED") { + auto deviceAnnounced = details[DRing::Account::VolatileProperties::DEVICE_ANNOUNCED]; + if (deviceAnnounced == "true") { carlaConnected = true; cv.notify_one(); } @@ -3114,6 +3132,7 @@ ConversationTest::testMemberAddedNoCertificate() DRing::registerSignalHandlers(confHandlers); aliceAccount->addConversationMember(convId, carlaUri, false); + CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(5), [&] { return memberMessageGenerated; })); // Cp conversations & convInfo auto repoPathAlice = fileutils::get_data_dir() + DIR_SEPARATOR_STR @@ -3167,7 +3186,8 @@ ConversationTest::testMemberJoinsInviteRemoved() std::unique_lock<std::mutex> lk {mtx}; std::condition_variable cv; std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - bool conversationReady = false, errorDetected = false, carlaConnected = false; + bool conversationReady = false, errorDetected = false, carlaConnected = false, + memberMessageGenerated = false; confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationReady>( [&](const std::string& accountId, const std::string& /* conversationId */) { if (accountId == carlaId) { @@ -3175,12 +3195,21 @@ ConversationTest::testMemberJoinsInviteRemoved() cv.notify_one(); } })); + confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::MessageReceived>( + [&](const std::string& accountId, + const std::string& conversationId, + std::map<std::string, std::string> message) { + if (accountId == aliceId && conversationId == convId && message["type"] == "member") { + memberMessageGenerated = true; + cv.notify_one(); + } + })); confHandlers.insert( DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( [&](const std::string&, const std::map<std::string, std::string>&) { auto details = carlaAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - if (daemonStatus == "REGISTERED") { + auto deviceAnnounced = details[DRing::Account::VolatileProperties::DEVICE_ANNOUNCED]; + if (deviceAnnounced == "true") { carlaConnected = true; cv.notify_one(); } @@ -3197,6 +3226,7 @@ ConversationTest::testMemberJoinsInviteRemoved() DRing::registerSignalHandlers(confHandlers); aliceAccount->addConversationMember(convId, carlaUri, false); + CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(5), [&] { return memberMessageGenerated; })); // Cp conversations & convInfo auto repoPathAlice = fileutils::get_data_dir() + DIR_SEPARATOR_STR -- GitLab