diff --git a/test/unitTest/call/call.cpp b/test/unitTest/call/call.cpp index 23db702083fa496413ce3ba9490ebcd59433aced..5b5a54b81ed5ec86a2ba6987f8376331976f4adf 100644 --- a/test/unitTest/call/call.cpp +++ b/test/unitTest/call/call.cpp @@ -31,6 +31,8 @@ #include "dring.h" #include "account_const.h" +#include "common.h" + using namespace DRing::Account; namespace jami { @@ -97,29 +99,8 @@ CallTest::setUp() JAMI_INFO("Initialize account..."); auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - std::mutex mtx; - std::unique_lock<std::mutex> lk {mtx}; - std::condition_variable cv; - std::atomic_bool accountsReady {false}; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - bool ready = false; - auto details = aliceAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready = (daemonStatus == "REGISTERED"); - details = bobAccount->getVolatileAccountDetails(); - daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready &= (daemonStatus == "REGISTERED"); - if (ready) { - accountsReady = true; - cv.notify_one(); - } - })); - DRing::registerSignalHandlers(confHandlers); - CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return accountsReady.load(); })); - DRing::unregisterSignalHandlers(); + + wait_for_announcement_of({aliceId, bobId}); } void @@ -161,10 +142,6 @@ CallTest::tearDown() void CallTest::testCall() { - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - JAMI_INFO("Waiting...."); - std::this_thread::sleep_for(std::chrono::seconds(10)); auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); auto bobUri = bobAccount->getUsername(); @@ -206,10 +183,6 @@ CallTest::testCall() void CallTest::testCachedCall() { - std::this_thread::sleep_for(std::chrono::seconds(5)); - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - JAMI_INFO("Waiting...."); auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); auto bobUri = bobAccount->getUsername(); @@ -264,10 +237,6 @@ CallTest::testCachedCall() void CallTest::testStopSearching() { - JAMI_INFO("Waiting...."); - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - std::this_thread::sleep_for(std::chrono::seconds(5)); auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); auto bobUri = bobAccount->getUsername(); @@ -325,29 +294,7 @@ CallTest::testDeclineMultiDevice() details[ConfProperties::ARCHIVE_PATH] = bobArchive; bob2Id = Manager::instance().addAccount(details); - bool ready = false; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - auto bob2Account = Manager::instance().getAccount<JamiAccount>(bob2Id); - if (!bob2Account) - return; - auto details = bob2Account->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - if (daemonStatus == "REGISTERED") { - ready = true; - cv.notify_one(); - } - })); - DRing::registerSignalHandlers(confHandlers); - - CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(20), [&] { return ready; })); - DRing::unregisterSignalHandlers(); - - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - JAMI_INFO("Waiting...."); - std::this_thread::sleep_for(std::chrono::seconds(5)); + wait_for_announcement_of(bob2Id); std::atomic<int> callReceived {0}; std::atomic<int> callStopped {0}; diff --git a/test/unitTest/common.h b/test/unitTest/common.h new file mode 100644 index 0000000000000000000000000000000000000000..e14552e28a0c5514917bb2ee9818ab9507a5cb1c --- /dev/null +++ b/test/unitTest/common.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2021 Savoir-faire Linux Inc. + * + * Author: Olivier Dion <olivier.dion>@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#pragma once + +static void +wait_for_announcement_of(const std::vector<std::string> accountIDs, + std::chrono::seconds timeout = std::chrono::seconds(30)) +{ + std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; + std::mutex mtx; + std::unique_lock<std::mutex> lk {mtx}; + std::condition_variable cv; + std::vector<std::atomic_bool> accountsReady(accountIDs.size()); + + confHandlers.insert( + DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( + [&](const std::string& accountID, const std::map<std::string, std::string>& details) { + for (size_t i = 0; i < accountIDs.size(); ++i) { + if (accountIDs[i] != accountID) { + continue; + } + + try { + if ("true" + != details.at(DRing::Account::VolatileProperties::DEVICE_ANNOUNCED)) { + continue; + } + } catch (const std::out_of_range&) { + continue; + } + + accountsReady[i] = true; + cv.notify_one(); + } + })); + + JAMI_DBG("Waiting for %zu account to be announced...", accountIDs.size()); + + DRing::registerSignalHandlers(confHandlers); + + CPPUNIT_ASSERT(cv.wait_for(lk, timeout, [&] { + for (const auto& rdy : accountsReady) { + if (not rdy) { + return false; + } + } + + return true; + })); + + DRing::unregisterSignalHandlers(); + + JAMI_DBG("%zu account announced!", accountIDs.size()); +} + +static void +wait_for_announcement_of(const std::string& accountID, + std::chrono::seconds timeout = std::chrono::seconds(30)) +{ + wait_for_announcement_of({accountID}, timeout); +} diff --git a/test/unitTest/connectionManager/connectionManager.cpp b/test/unitTest/connectionManager/connectionManager.cpp index ecf87d224cb05cc6f9598875bd9d9db6afd32937..261dcb0e86e7b4019a9125b1337032d1fea97f4d 100644 --- a/test/unitTest/connectionManager/connectionManager.cpp +++ b/test/unitTest/connectionManager/connectionManager.cpp @@ -29,6 +29,7 @@ #include "../../test_runner.h" #include "dring.h" #include "account_const.h" +#include "common.h" using namespace DRing::Account; @@ -123,26 +124,7 @@ ConnectionManagerTest::setUp() bobId = Manager::instance().addAccount(details); JAMI_INFO("Initialize account..."); - auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); - auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - std::mutex mtx; - std::unique_lock<std::mutex> lk {mtx}; - std::condition_variable cv; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - bool ready = false; - auto details = aliceAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready = (daemonStatus == "REGISTERED"); - details = bobAccount->getVolatileAccountDetails(); - daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready &= (daemonStatus == "REGISTERED"); - })); - DRing::registerSignalHandlers(confHandlers); - cv.wait_for(lk, std::chrono::seconds(30)); - DRing::unregisterSignalHandlers(); + wait_for_announcement_of({aliceId, bobId}); } void diff --git a/test/unitTest/conversation/conversation.cpp b/test/unitTest/conversation/conversation.cpp index 5bc91e99c2cb0119fa1eac3b36fc00c56895e9e2..ef03c7721a9d89e99a37f7470e91dddf75289bd2 100644 --- a/test/unitTest/conversation/conversation.cpp +++ b/test/unitTest/conversation/conversation.cpp @@ -37,6 +37,7 @@ #include "base64.h" #include "fileutils.h" #include "account_const.h" +#include "common.h" using namespace std::string_literals; using namespace DRing::Account; @@ -245,28 +246,8 @@ ConversationTest::setUp() carlaId = Manager::instance().addAccount(details); JAMI_INFO("Initialize account..."); - auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); - auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); - auto carlaAccount = Manager::instance().getAccount<JamiAccount>(carlaId); Manager::instance().sendRegister(carlaId, false); - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - std::mutex mtx; - std::unique_lock<std::mutex> lk {mtx}; - std::condition_variable cv; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - bool ready = false; - auto details = aliceAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready = (daemonStatus == "REGISTERED"); - details = bobAccount->getVolatileAccountDetails(); - daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready &= (daemonStatus == "REGISTERED"); - })); - DRing::registerSignalHandlers(confHandlers); - cv.wait_for(lk, std::chrono::seconds(30)); - DRing::unregisterSignalHandlers(); + wait_for_announcement_of({aliceId, bobId}); } void diff --git a/test/unitTest/conversationRepository/conversationRepository.cpp b/test/unitTest/conversationRepository/conversationRepository.cpp index 470449676668254588e6510cf4f2c0b377d25cee..87001200d29831f366f36ab345d0c402471be57c 100644 --- a/test/unitTest/conversationRepository/conversationRepository.cpp +++ b/test/unitTest/conversationRepository/conversationRepository.cpp @@ -35,6 +35,7 @@ #include "base64.h" #include "fileutils.h" #include "account_const.h" +#include "common.h" #include <git2.h> #include <filesystem> @@ -129,26 +130,7 @@ ConversationRepositoryTest::setUp() bobId = Manager::instance().addAccount(details); JAMI_INFO("Initialize account..."); - auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); - auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - std::mutex mtx; - std::unique_lock<std::mutex> lk {mtx}; - std::condition_variable cv; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - bool ready = false; - auto details = aliceAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready = (daemonStatus == "REGISTERED"); - details = bobAccount->getVolatileAccountDetails(); - daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready &= (daemonStatus == "REGISTERED"); - })); - DRing::registerSignalHandlers(confHandlers); - cv.wait_for(lk, std::chrono::seconds(30)); - DRing::unregisterSignalHandlers(); + wait_for_announcement_of({aliceId, bobId}); } void diff --git a/test/unitTest/fileTransfer/fileTransfer.cpp b/test/unitTest/fileTransfer/fileTransfer.cpp index 90d806fbb2fa0673687e6e7e5d6b1bea57ff966f..47379680df18fbf7e43a59fbbd0ba63f808f28ac 100644 --- a/test/unitTest/fileTransfer/fileTransfer.cpp +++ b/test/unitTest/fileTransfer/fileTransfer.cpp @@ -31,6 +31,7 @@ #include "data_transfer.h" #include "dring/datatransfer_interface.h" #include "account_const.h" +#include "common.h" using namespace DRing::Account; @@ -109,26 +110,7 @@ FileTransferTest::setUp() bobId = Manager::instance().addAccount(details); JAMI_INFO("Initialize account..."); - auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); - auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - std::mutex mtx; - std::unique_lock<std::mutex> lk {mtx}; - std::condition_variable cv; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - bool ready = false; - auto details = aliceAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready = (daemonStatus == "REGISTERED"); - details = bobAccount->getVolatileAccountDetails(); - daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready &= (daemonStatus == "REGISTERED"); - })); - DRing::registerSignalHandlers(confHandlers); - cv.wait_for(lk, std::chrono::seconds(30)); - DRing::unregisterSignalHandlers(); + wait_for_announcement_of({aliceId, bobId}); } void @@ -160,10 +142,6 @@ FileTransferTest::tearDown() void FileTransferTest::testCachedFileTransfer() { - std::this_thread::sleep_for(std::chrono::seconds(5)); - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - JAMI_INFO("Waiting...."); auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); auto bobUri = bobAccount->getUsername(); @@ -233,10 +211,6 @@ FileTransferTest::testCachedFileTransfer() void FileTransferTest::testMultipleFileTransfer() { - std::this_thread::sleep_for(std::chrono::seconds(5)); - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - JAMI_INFO("Waiting...."); auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); auto bobUri = bobAccount->getUsername(); diff --git a/test/unitTest/ice/ice_sdp_parser.cpp b/test/unitTest/ice/ice_sdp_parser.cpp index 0b24caf4e9673e318c699f6bb4a08be0d0e5184c..0d983be17d5794c94c2dc7a3050483baf7f98db1 100644 --- a/test/unitTest/ice/ice_sdp_parser.cpp +++ b/test/unitTest/ice/ice_sdp_parser.cpp @@ -34,6 +34,8 @@ #include "media/audio/audio_rtp_session.h" #include "media/audio/audio_receive_thread.h" +#include "common.h" + using namespace DRing::Account; using namespace DRing::Call; @@ -196,29 +198,7 @@ IceSdpParsingTest::setUp() auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobData_.accountId_); bobAccount->enableMultiStream(true); - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - std::mutex mtx; - std::unique_lock<std::mutex> lk {mtx}; - std::condition_variable cv; - std::atomic_bool accountsReady {false}; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - bool ready = false; - auto details = aliceAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready = (daemonStatus == "REGISTERED"); - details = bobAccount->getVolatileAccountDetails(); - daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready &= (daemonStatus == "REGISTERED"); - if (ready) { - accountsReady = true; - cv.notify_one(); - } - })); - DRing::registerSignalHandlers(confHandlers); - CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return accountsReady.load(); })); - DRing::unregisterSignalHandlers(); + wait_for_announcement_of({aliceAccount->getAccountID(), bobAccount->getAccountID()}); } void @@ -531,11 +511,6 @@ IceSdpParsingTest::configureTest(CallData& aliceData, CallData& bobData) void IceSdpParsingTest::audio_video_call() { - JAMI_INFO("Waiting for accounts setup ..."); - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - std::this_thread::sleep_for(std::chrono::seconds(10)); - configureTest(aliceData_, bobData_); JAMI_INFO("=== Start a call and validate ==="); diff --git a/test/unitTest/media_control/media_control.cpp b/test/unitTest/media_control/media_control.cpp index d801912202a75e20a3b00d7b74075a33899c2024..29dc40386e4c500156eed9987a7aae47d6b7dd3d 100644 --- a/test/unitTest/media_control/media_control.cpp +++ b/test/unitTest/media_control/media_control.cpp @@ -32,6 +32,8 @@ #include <condition_variable> #include <string> +#include "common.h" + using namespace DRing::Account; using namespace DRing::Call; @@ -142,31 +144,8 @@ MediaControlTest::setUp() bobAccountId_ = Manager::instance().addAccount(details); JAMI_INFO("Initialize account..."); - auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceAccountId_); - auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobAccountId_); - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - std::mutex mtx; - std::unique_lock<std::mutex> lk {mtx}; - std::condition_variable cv; - std::atomic_bool accountsReady {false}; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - bool ready = false; - auto details = aliceAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready = (daemonStatus == "REGISTERED"); - details = bobAccount->getVolatileAccountDetails(); - daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready &= (daemonStatus == "REGISTERED"); - if (ready) { - accountsReady = true; - cv.notify_one(); - } - })); - DRing::registerSignalHandlers(confHandlers); - CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return accountsReady.load(); })); - DRing::unregisterSignalHandlers(); + + wait_for_announcement_of({aliceAccountId_, bobAccountId_}); } void @@ -378,11 +357,6 @@ MediaControlTest::testWithScenario(CallData& aliceData, void MediaControlTest::testCallWithMediaList() { - JAMI_INFO("Waiting...."); - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - std::this_thread::sleep_for(std::chrono::seconds(5)); - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> signalHandlers; CallData aliceData; diff --git a/test/unitTest/media_negotiation/media_negotiation.cpp b/test/unitTest/media_negotiation/media_negotiation.cpp index ec05202d18fcf4513f96bd3101638de0e0036916..92d3452ec55d8306022682f3daf426ece7643f2e 100644 --- a/test/unitTest/media_negotiation/media_negotiation.cpp +++ b/test/unitTest/media_negotiation/media_negotiation.cpp @@ -34,6 +34,8 @@ #include "sip/sipcall.h" #include "sip/sdp.h" +#include "common.h" + using namespace DRing::Account; using namespace DRing::Call; @@ -184,36 +186,7 @@ MediaNegotiationTest::setUp() auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobData_.accountId_); bobAccount->enableMultiStream(true); - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - std::mutex mtx; - std::unique_lock<std::mutex> lk {mtx}; - std::condition_variable cv; - std::atomic_bool accountsReady {false}; - confHandlers.insert(DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&cv, - &accountsReady, - aliceAccW = aliceAccount->weak(), - bobAccW = bobAccount->weak()](const std::string&, - const std::map<std::string, std::string>&) { - bool ready = false; - if (auto acc = aliceAccW.lock()) { - auto details = acc->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready = (daemonStatus == "REGISTERED"); - } - if (auto acc = aliceAccW.lock()) { - auto details = acc->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready &= (daemonStatus == "REGISTERED"); - } - if (ready) { - accountsReady = true; - cv.notify_one(); - } - })); - DRing::registerSignalHandlers(confHandlers); - CPPUNIT_ASSERT(cv.wait_for(lk, std::chrono::seconds(30), [&] { return accountsReady.load(); })); - DRing::unregisterSignalHandlers(); + wait_for_announcement_of({aliceAccount->getAccountID(), bobAccount->getAccountID()}); } void @@ -731,11 +704,6 @@ MediaNegotiationTest::audio_and_video_then_mute_video() { JAMI_INFO("=== Begin test %s ===", __FUNCTION__); - JAMI_INFO("Waiting for accounts setup ..."); - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - std::this_thread::sleep_for(std::chrono::seconds(10)); - configureScenario(aliceData_, bobData_); MediaAttribute defaultAudio(MediaType::MEDIA_AUDIO); @@ -779,11 +747,6 @@ MediaNegotiationTest::audio_only_then_add_video() { JAMI_INFO("=== Begin test %s ===", __FUNCTION__); - JAMI_INFO("Waiting for accounts setup ..."); - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - std::this_thread::sleep_for(std::chrono::seconds(10)); - configureScenario(aliceData_, bobData_); MediaAttribute defaultAudio(MediaType::MEDIA_AUDIO); @@ -822,11 +785,6 @@ MediaNegotiationTest::audio_and_video_then_mute_audio() { JAMI_INFO("=== Begin test %s ===", __FUNCTION__); - JAMI_INFO("Waiting for accounts setup ..."); - // TODO remove. This sleeps is because it take some time for the DHT to be connected - // and account announced - std::this_thread::sleep_for(std::chrono::seconds(10)); - configureScenario(aliceData_, bobData_); MediaAttribute defaultAudio(MediaType::MEDIA_AUDIO); diff --git a/test/unitTest/syncHistory/syncHistory.cpp b/test/unitTest/syncHistory/syncHistory.cpp index 9a1c93c9d11d9f0be3acab55b1bd7f8749832af7..e31a4df8910bedbf8f1e964a491456e2ad0b1c9b 100644 --- a/test/unitTest/syncHistory/syncHistory.cpp +++ b/test/unitTest/syncHistory/syncHistory.cpp @@ -31,6 +31,7 @@ #include "../../test_runner.h" #include "dring.h" #include "account_const.h" +#include "common.h" using namespace DRing::Account; @@ -106,28 +107,7 @@ SyncHistoryTest::setUp() bobId = Manager::instance().addAccount(details); JAMI_INFO("Initialize account..."); - auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId); - auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId); - std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - std::mutex mtx; - std::unique_lock<std::mutex> lk {mtx}; - std::condition_variable cv; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - bool ready = false; - auto details = aliceAccount->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready = (daemonStatus == "REGISTERED"); - details = bobAccount->getVolatileAccountDetails(); - daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - ready &= (daemonStatus == "REGISTERED"); - if (ready) - cv.notify_one(); - })); - DRing::registerSignalHandlers(confHandlers); - cv.wait_for(lk, std::chrono::seconds(30)); - DRing::unregisterSignalHandlers(); + wait_for_announcement_of({aliceId, bobId}); alice2Id = ""; } @@ -183,25 +163,12 @@ SyncHistoryTest::testCreateConversationThenSync() details[ConfProperties::ARCHIVE_PATH] = aliceArchive; alice2Id = Manager::instance().addAccount(details); + wait_for_announcement_of(alice2Id); + std::mutex mtx; std::unique_lock<std::mutex> lk {mtx}; std::condition_variable cv; std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - auto alice2Account = Manager::instance().getAccount<JamiAccount>(alice2Id); - auto details = alice2Account->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - if (daemonStatus == "REGISTERED") - cv.notify_one(); - })); - DRing::registerSignalHandlers(confHandlers); - - cv.wait_for(lk, std::chrono::seconds(30)); - DRing::unregisterSignalHandlers(); - confHandlers.clear(); - auto conversationReady = false; confHandlers.insert(DRing::exportable_callback<DRing::ConversationSignal::ConversationReady>( [&](const std::string& accountId, const std::string& conversationId) { @@ -232,25 +199,12 @@ SyncHistoryTest::testCreateConversationWithOnlineDevice() details[ConfProperties::ARCHIVE_PIN] = ""; details[ConfProperties::ARCHIVE_PATH] = aliceArchive; alice2Id = Manager::instance().addAccount(details); + wait_for_announcement_of(alice2Id); std::mutex mtx; std::unique_lock<std::mutex> lk {mtx}; std::condition_variable cv; std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - auto alice2Account = Manager::instance().getAccount<JamiAccount>(alice2Id); - auto details = alice2Account->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - if (daemonStatus == "REGISTERED") - cv.notify_one(); - })); - DRing::registerSignalHandlers(confHandlers); - - cv.wait_for(lk, std::chrono::seconds(30)); - DRing::unregisterSignalHandlers(); - confHandlers.clear(); // Start conversation now auto convId = aliceAccount->startConversation(); @@ -498,25 +452,12 @@ SyncHistoryTest::testRemoveConversationOnAllDevices() details[ConfProperties::ARCHIVE_PIN] = ""; details[ConfProperties::ARCHIVE_PATH] = aliceArchive; alice2Id = Manager::instance().addAccount(details); + wait_for_announcement_of(alice2Id); std::mutex mtx; std::unique_lock<std::mutex> lk {mtx}; std::condition_variable cv; std::map<std::string, std::shared_ptr<DRing::CallbackWrapperBase>> confHandlers; - confHandlers.insert( - DRing::exportable_callback<DRing::ConfigurationSignal::VolatileDetailsChanged>( - [&](const std::string&, const std::map<std::string, std::string>&) { - auto alice2Account = Manager::instance().getAccount<JamiAccount>(alice2Id); - auto details = alice2Account->getVolatileAccountDetails(); - auto daemonStatus = details[DRing::Account::ConfProperties::Registration::STATUS]; - if (daemonStatus == "REGISTERED") - cv.notify_one(); - })); - DRing::registerSignalHandlers(confHandlers); - - cv.wait_for(lk, std::chrono::seconds(30)); - DRing::unregisterSignalHandlers(); - confHandlers.clear(); // Start conversation now auto convId = aliceAccount->startConversation();