From cf78a2ba4d5a058f1dca56717b2c83b03b4e2d7d Mon Sep 17 00:00:00 2001
From: Fadi SHEHADEH <fadi.shehadeh@savoirfairelinux.com>
Date: Wed, 16 Nov 2022 16:49:00 -0500
Subject: [PATCH] drt: fix ut

- mobile shutdown: added time / block for callback
- check existing connection before removing node from rt
- threadpool instead of lock for shutdown

Change-Id: I79fc9506cd465763cd38723aedd08a59a0573970
---
 src/jamidht/swarm/routing_table.cpp         |   6 +-
 src/jamidht/swarm/swarm_manager.cpp         |  20 ++--
 test/unitTest/conversation/conversation.cpp | 100 ++++++++++++++++++++
 test/unitTest/swarm/routing_table.cpp       |  80 ++++++++--------
 4 files changed, 156 insertions(+), 50 deletions(-)

diff --git a/src/jamidht/swarm/routing_table.cpp b/src/jamidht/swarm/routing_table.cpp
index 7f88bd0e36..7211972a01 100644
--- a/src/jamidht/swarm/routing_table.cpp
+++ b/src/jamidht/swarm/routing_table.cpp
@@ -200,7 +200,7 @@ Bucket::printBucket(unsigned number) const
 
     unsigned nodeNum = 1;
     for (auto it = nodes.begin(); it != nodes.end(); ++it) {
-        JAMI_DEBUG("Node {:s}   Id: {:s}", std::to_string(nodeNum), it->first.toString());
+        JAMI_DEBUG("Node {:s}   Id: {:s}  isMobile: {:s}", std::to_string(nodeNum), it->first.toString(), std::to_string(it->second.isMobile_));
         nodeNum++;
     }
     JAMI_ERROR("Mobile Nodes");
@@ -417,6 +417,7 @@ void
 RoutingTable::printRoutingTable() const
 {
     int counter = 1;
+    JAMI_DEBUG("SWARM: {:s} ", id_.toString());
     for (auto it = buckets.begin(); it != buckets.end(); ++it) {
         it->printBucket(counter);
         counter++;
@@ -516,8 +517,7 @@ void
 RoutingTable::deleteNode(const NodeId& nodeId)
 {
     auto bucket = findBucket(nodeId);
-    shutdownNode(nodeId);
-    bucket->removeNode(nodeId);
+    bucket->shutdownNode(nodeId);
     bucket->removeConnectingNode(nodeId);
     bucket->removeKnownNode(nodeId);
     bucket->removeMobileNode(nodeId);
diff --git a/src/jamidht/swarm/swarm_manager.cpp b/src/jamidht/swarm/swarm_manager.cpp
index e0e56d05d2..174f28e254 100644
--- a/src/jamidht/swarm/swarm_manager.cpp
+++ b/src/jamidht/swarm/swarm_manager.cpp
@@ -90,11 +90,13 @@ SwarmManager::addChannel(const std::shared_ptr<ChannelSocketInterface>& channel)
 void
 SwarmManager::removeNode(const NodeId& nodeId)
 {
-    {
-        std::lock_guard<std::mutex> lock(mutex);
-        removeNodeInternal(nodeId);
+    if (isConnectedWith(nodeId)) {
+        {
+            std::lock_guard<std::mutex> lock(mutex);
+            removeNodeInternal(nodeId);
+        }
+        maintainBuckets();
     }
-    maintainBuckets();
 }
 
 void
@@ -269,10 +271,12 @@ SwarmManager::receiveMessage(const std::shared_ptr<ChannelSocketInterface>& sock
     });
 
     socket->onShutdown([w = weak(), deviceId = socket->deviceId()] {
-        auto shared = w.lock();
-        if (shared && !shared->isShutdown_) {
-            shared->removeNode(deviceId);
-        }
+        dht::ThreadPool::io().run([w, deviceId] {
+            auto shared = w.lock();
+            if (shared && !shared->isShutdown_) {
+                shared->removeNode(deviceId);
+            }
+        });
     });
 }
 
diff --git a/test/unitTest/conversation/conversation.cpp b/test/unitTest/conversation/conversation.cpp
index a3fe35c2d8..488404186d 100644
--- a/test/unitTest/conversation/conversation.cpp
+++ b/test/unitTest/conversation/conversation.cpp
@@ -217,6 +217,8 @@ ConversationTest::tearDown()
 void
 ConversationTest::testCreateConversation()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto aliceDeviceId = aliceAccount->currentDeviceId();
     auto uri = aliceAccount->getUsername();
@@ -267,6 +269,8 @@ ConversationTest::testCreateConversation()
 void
 ConversationTest::testGetConversation()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto uri = aliceAccount->getUsername();
     auto convId = libjami::startConversation(aliceId);
@@ -279,6 +283,8 @@ ConversationTest::testGetConversation()
 void
 ConversationTest::testGetConversationsAfterRm()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto uri = aliceAccount->getUsername();
 
@@ -310,6 +316,8 @@ ConversationTest::testGetConversationsAfterRm()
 void
 ConversationTest::testRemoveInvalidConversation()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto uri = aliceAccount->getUsername();
 
@@ -341,6 +349,8 @@ ConversationTest::testRemoveInvalidConversation()
 void
 ConversationTest::testSendMessage()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -402,6 +412,8 @@ ConversationTest::testSendMessage()
 void
 ConversationTest::testSendMessageWithBadDisplayName()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -479,6 +491,8 @@ ConversationTest::testSendMessageWithBadDisplayName()
 void
 ConversationTest::testReplaceWithBadCertificate()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -573,6 +587,8 @@ ConversationTest::testReplaceWithBadCertificate()
 void
 ConversationTest::testSendMessageTriggerMessageReceived()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     std::mutex mtx;
     std::unique_lock<std::mutex> lk {mtx};
@@ -606,6 +622,8 @@ ConversationTest::testSendMessageTriggerMessageReceived()
 void
 ConversationTest::testMergeTwoDifferentHeads()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto carlaAccount = Manager::instance().getAccount<JamiAccount>(carlaId);
     auto aliceUri = aliceAccount->getUsername();
@@ -671,6 +689,8 @@ ConversationTest::testMergeTwoDifferentHeads()
 void
 ConversationTest::testMergeAfterMigration()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto carlaAccount = Manager::instance().getAccount<JamiAccount>(carlaId);
     auto aliceUri = aliceAccount->getUsername();
@@ -780,6 +800,8 @@ ConversationTest::testMergeAfterMigration()
 void
 ConversationTest::testSendMessageToMultipleParticipants()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -877,6 +899,8 @@ ConversationTest::testSendMessageToMultipleParticipants()
 void
 ConversationTest::testPingPongMessages()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -948,6 +972,8 @@ ConversationTest::testPingPongMessages()
 void
 ConversationTest::testIsComposing()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto aliceUri = aliceAccount->getUsername();
@@ -1019,6 +1045,8 @@ ConversationTest::testIsComposing()
 void
 ConversationTest::testMessageStatus()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto aliceUri = aliceAccount->getUsername();
@@ -1096,6 +1124,8 @@ ConversationTest::testMessageStatus()
 void
 ConversationTest::testSetMessageDisplayed()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto aliceUri = aliceAccount->getUsername();
@@ -1210,6 +1240,8 @@ ConversationTest::testSetMessageDisplayed()
 void
 ConversationTest::testSetMessageDisplayedTwice()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto aliceUri = aliceAccount->getUsername();
@@ -1292,6 +1324,8 @@ ConversationTest::testSetMessageDisplayedTwice()
 void
 ConversationTest::testSetMessageDisplayedPreference()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto aliceUri = aliceAccount->getUsername();
@@ -1400,6 +1434,8 @@ ConversationTest::testSetMessageDisplayedPreference()
 void
 ConversationTest::testSetMessageDisplayedAfterClone()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto aliceUri = aliceAccount->getUsername();
@@ -1511,6 +1547,8 @@ std::string
 ConversationTest::createFakeConversation(std::shared_ptr<JamiAccount> account,
                                          const std::string& fakeCert)
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto repoPath = fileutils::get_data_dir() + DIR_SEPARATOR_STR + account->getAccountID()
                     + DIR_SEPARATOR_STR + "conversations" + DIR_SEPARATOR_STR + "tmp";
 
@@ -1677,6 +1715,8 @@ ConversationTest::createFakeConversation(std::shared_ptr<JamiAccount> account,
 void
 ConversationTest::testVoteNonEmpty()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto aliceUri = aliceAccount->getUsername();
@@ -1772,6 +1812,8 @@ ConversationTest::testVoteNonEmpty()
 void
 ConversationTest::testNoBadFileInInitialCommit()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto carlaAccount = Manager::instance().getAccount<JamiAccount>(carlaId);
     auto carlaUri = carlaAccount->getUsername();
@@ -1841,6 +1883,8 @@ ConversationTest::testNoBadFileInInitialCommit()
 void
 ConversationTest::testNoBadCertInInitialCommit()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto carlaAccount = Manager::instance().getAccount<JamiAccount>(carlaId);
     auto carlaUri = carlaAccount->getUsername();
@@ -1916,6 +1960,8 @@ ConversationTest::testNoBadCertInInitialCommit()
 void
 ConversationTest::testPlainTextNoBadFile()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -1992,6 +2038,8 @@ ConversationTest::testPlainTextNoBadFile()
 void
 ConversationTest::testVoteNoBadFile()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto aliceUri = aliceAccount->getUsername();
@@ -2091,6 +2139,8 @@ ConversationTest::testVoteNoBadFile()
 void
 ConversationTest::testETooBigClone()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2166,6 +2216,8 @@ ConversationTest::testETooBigClone()
 void
 ConversationTest::testETooBigFetch()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2250,6 +2302,8 @@ ConversationTest::testETooBigFetch()
 void
 ConversationTest::testUnknownModeDetected()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2313,6 +2367,8 @@ ConversationTest::testUnknownModeDetected()
 void
 ConversationTest::testUpdateProfile()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2394,6 +2450,8 @@ ConversationTest::testUpdateProfile()
 void
 ConversationTest::testGetProfileRequest()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2441,6 +2499,8 @@ ConversationTest::testGetProfileRequest()
 void
 ConversationTest::testCheckProfileInConversationRequest()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2495,6 +2555,8 @@ ConversationTest::testCheckProfileInConversationRequest()
 void
 ConversationTest::testCheckProfileInTrustRequest()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2542,6 +2604,8 @@ END:VCARD";
 void
 ConversationTest::testMemberCannotUpdateProfile()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2612,6 +2676,8 @@ ConversationTest::testMemberCannotUpdateProfile()
 void
 ConversationTest::testUpdateProfileWithBadFile()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2692,6 +2758,8 @@ END:VCARD";
 void
 ConversationTest::testFetchProfileUnauthorized()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2771,6 +2839,8 @@ END:VCARD";
 void
 ConversationTest::testDoNotLoadIncorrectConversation()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto uri = aliceAccount->getUsername();
     auto convId = libjami::startConversation(aliceId);
@@ -2796,6 +2866,8 @@ ConversationTest::testDoNotLoadIncorrectConversation()
 void
 ConversationTest::testSyncingWhileAccepting()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2848,6 +2920,8 @@ ConversationTest::testSyncingWhileAccepting()
 void
 ConversationTest::testCountInteractions()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto convId = libjami::startConversation(aliceId);
     std::mutex mtx;
@@ -2884,6 +2958,8 @@ ConversationTest::testCountInteractions()
 void
 ConversationTest::testReplayConversation()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -2971,6 +3047,8 @@ ConversationTest::testReplayConversation()
 void
 ConversationTest::testSyncWithoutPinnedCert()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -3083,6 +3161,8 @@ ConversationTest::testSyncWithoutPinnedCert()
 void
 ConversationTest::testImportMalformedContacts()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto malformedContacts = fileutils::loadFile(std::filesystem::current_path().string()
                                                  + "/conversation/rsc/incorrectContacts");
     auto bobArchive = std::filesystem::current_path().string() + "/bob.gz";
@@ -3106,6 +3186,8 @@ ConversationTest::testImportMalformedContacts()
 void
 ConversationTest::testRemoveReaddMultipleDevice()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -3253,6 +3335,8 @@ END:VCARD";
 void
 ConversationTest::testSendReply()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -3325,6 +3409,8 @@ ConversationTest::testSendReply()
 void
 ConversationTest::testSearchInConv()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -3419,6 +3505,8 @@ ConversationTest::testSearchInConv()
 void
 ConversationTest::testConversationPreferences()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto uri = aliceAccount->getUsername();
     std::mutex mtx;
@@ -3464,6 +3552,8 @@ ConversationTest::testConversationPreferences()
 void
 ConversationTest::testConversationPreferencesBeforeClone()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -3559,6 +3649,8 @@ ConversationTest::testConversationPreferencesBeforeClone()
 void
 ConversationTest::testConversationPreferencesMultiDevices()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -3650,6 +3742,8 @@ ConversationTest::testConversationPreferencesMultiDevices()
 void
 ConversationTest::testFixContactDetails()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -3687,6 +3781,8 @@ ConversationTest::testFixContactDetails()
 void
 ConversationTest::testRemoveOneToOneNotInDetails()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -3740,6 +3836,8 @@ ConversationTest::testRemoveOneToOneNotInDetails()
 void
 ConversationTest::testMessageEdition()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
@@ -3833,6 +3931,8 @@ ConversationTest::testMessageEdition()
 void
 ConversationTest::testMessageReaction()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     auto aliceAccount = Manager::instance().getAccount<JamiAccount>(aliceId);
     auto bobAccount = Manager::instance().getAccount<JamiAccount>(bobId);
     auto bobUri = bobAccount->getUsername();
diff --git a/test/unitTest/swarm/routing_table.cpp b/test/unitTest/swarm/routing_table.cpp
index e67c5c44e1..57f1195e65 100644
--- a/test/unitTest/swarm/routing_table.cpp
+++ b/test/unitTest/swarm/routing_table.cpp
@@ -39,12 +39,12 @@ using NodeId = dht::PkId;
 namespace jami {
 namespace test {
 
-constexpr size_t nNodes = 10;
-constexpr size_t mNodes = 5;
-constexpr size_t kNodes = 10;
+constexpr size_t nNodes = 6;
+constexpr size_t mNodes = 3;
+constexpr size_t kNodes = 4;
 
 constexpr size_t BOOTSTRAP_SIZE = 2;
-constexpr int time = 2;
+constexpr int time = 10;
 
 struct Counter
 {
@@ -238,13 +238,15 @@ RoutingTableTest::needSocketCallBack(const std::shared_ptr<SwarmManager>& sm)
                                                                       auto&& onSocket) {
         Manager::instance().ioContext()->post([this, wsm, nodeId, onSocket = std::move(onSocket)] {
             auto sm = wsm.lock();
-
-            if (!sm)
+            if (!sm || sm->isShutdown())
                 return;
-
             NodeId node = DeviceId(nodeId);
             std::lock_guard<std::mutex> lk(channelSocketsMtx_);
             if (auto smRemote = getManager(node)) {
+                if (sm->isShutdown()) {
+                    std::cout << "SWARMMANAGER " << sm->getId() << " IS SHUTDOWN" << std::endl;
+                    return;
+                }
                 auto myId = sm->getId();
                 auto& cstRemote = channelSockets_[node][myId];
                 auto& cstMe = channelSockets_[myId][node];
@@ -255,7 +257,6 @@ RoutingTableTest::needSocketCallBack(const std::shared_ptr<SwarmManager>& sm)
                     cstMe = std::make_shared<ChannelSocketTest>(node, "test1", 0);
                 }
                 ChannelSocketTest::link(cstMe, cstRemote);
-
                 onSocket(cstMe);
                 smRemote->addChannel(cstRemote);
             }
@@ -273,6 +274,7 @@ RoutingTableTest::distribution()
             dist.resize(val + 1);
         dist[val]++;
     }
+
     for (size_t i = 0; i < dist.size(); i++) {
         std::cout << "Swarm Managers with " << i << " nodes: " << dist[i] << std::endl;
     }
@@ -281,6 +283,8 @@ RoutingTableTest::distribution()
 void
 RoutingTableTest::testBucketMainFunctions()
 {
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     NodeId node0 = nodeTestIds1.at(0);
     NodeId node1 = nodeTestIds1.at(1);
     NodeId node2 = nodeTestIds1.at(2);
@@ -302,7 +306,7 @@ RoutingTableTest::testBucketMainFunctions()
     bucket.addNode(sNode1);
     bucket.addNode(std::move(InfoNode1));
 
-    bucket.printBucket(0);
+    //bucket.printBucket(0);
 
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Supposed to have node", true, bucket.hasNode(sNode1->deviceId()));
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Supposed to have node", true, bucket.hasNode(sNode2->deviceId()));
@@ -405,7 +409,8 @@ RoutingTableTest::testBucketMainFunctions()
 void
 RoutingTableTest::testBucketKnownNodes()
 {
-    std::cout << "\ntestBucketKnownNodes" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     Bucket bucket(randomNodeIds.at(0));
 
     for (size_t i = 0; i < randomNodeIds.size(); i++) {
@@ -423,7 +428,7 @@ RoutingTableTest::testBucketKnownNodes()
 void
 RoutingTableTest::testRoutingTableMainFunctions()
 {
-    std::cout << "\ntestRoutingTableMainFunctions" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     RoutingTable rt;
     NodeId node1 = nodeTestIds1.at(0);
@@ -487,7 +492,7 @@ RoutingTableTest::testRoutingTableMainFunctions()
 
     rt.shutdownNode(node2);
     rt.shutdownNode(node3);
-    rt.printRoutingTable();
+
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Not supposed to exist", true, rt.hasConnectingNode(node2));
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Not supposed to exist", true, rt.hasConnectingNode(node3));
 }
@@ -495,7 +500,7 @@ RoutingTableTest::testRoutingTableMainFunctions()
 void
 RoutingTableTest::testSwarmManagerConnectingNodes_1b()
 {
-    std::cout << "\ntestSwarmManagerConnectingNodes_1b" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     SwarmManager sm1(nodeTestIds1.at(0));
     auto& rt1 = sm1.getRoutingTable();
@@ -515,7 +520,7 @@ RoutingTableTest::testSwarmManagerConnectingNodes_1b()
 void
 RoutingTableTest::testClosestNodes_1b()
 {
-    std::cout << "\ntestClosestNodes_1b" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     SwarmManager sm1(nodeTestIds1.at(0));
     SwarmManager sm2(nodeTestIds2.at(0));
@@ -559,7 +564,7 @@ RoutingTableTest::testClosestNodes_1b()
 void
 RoutingTableTest::testClosestNodes_multipleb()
 {
-    std::cout << "\ntestClosestNodes_multipleb" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     auto sm1 = std::make_shared<SwarmManager>(nodeTestIds1.at(2));
     auto sm2 = std::make_shared<SwarmManager>(nodeTestIds1.at(6));
@@ -589,7 +594,7 @@ RoutingTableTest::testClosestNodes_multipleb()
 void
 RoutingTableTest::testBucketSplit_1n()
 {
-    std::cout << "\ntestBucketSplit_1n" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     SwarmManager sm1(nodeTestIds2.at(0));
     SwarmManager sm2(nodeTestIds2.at(nodeTestIds2.size() - 1));
@@ -744,7 +749,7 @@ RoutingTableTest::testBucketSplit_1n()
 void
 RoutingTableTest::testSendKnownNodes_1b()
 {
-    std::cout << "\ntestSendKnownNodes" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     auto sm1 = std::make_shared<SwarmManager>(nodeTestIds2.at(0));
     auto sm2 = std::make_shared<SwarmManager>(nodeTestIds3.at(0));
@@ -792,7 +797,7 @@ RoutingTableTest::testSendKnownNodes_1b()
 void
 RoutingTableTest::testSendKnownNodes_multipleb()
 {
-    std::cout << "\ntestSendKnownNodes_multipleb" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     auto sm1 = std::make_shared<SwarmManager>(nodeTestIds2.at(8));
     auto sm2 = std::make_shared<SwarmManager>(nodeTestIds3.at(0));
@@ -840,7 +845,7 @@ RoutingTableTest::testSendKnownNodes_multipleb()
 void
 RoutingTableTest::testMobileNodeFunctions()
 {
-    std::cout << "\ntestMobileNodeFunctions" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     RoutingTable rt;
     NodeId node1 = nodeTestIds1.at(0);
@@ -869,7 +874,7 @@ RoutingTableTest::testMobileNodeFunctions()
 void
 RoutingTableTest::testMobileNodeAnnouncement()
 {
-    std::cout << "\ntestMobileNodeAnnouncement" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     auto sm1 = std::make_shared<SwarmManager>(nodeTestIds1.at(0));
     auto sm2 = std::make_shared<SwarmManager>(nodeTestIds2.at(1));
@@ -905,7 +910,7 @@ RoutingTableTest::testMobileNodeAnnouncement()
 void
 RoutingTableTest::testMobileNodeSplit()
 {
-    std::cout << "\ntestMobileNodeSplit" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     SwarmManager sm1(nodeTestIds1.at(0));
 
@@ -919,8 +924,6 @@ RoutingTableTest::testMobileNodeSplit()
 
     auto& buckets = rt1.getBuckets();
 
-    rt1.printRoutingTable();
-
     unsigned counter = 1;
 
     for (auto& buckIt : buckets) {
@@ -963,7 +966,7 @@ RoutingTableTest::testMobileNodeSplit()
 void
 RoutingTableTest::testSendMobileNodes()
 {
-    std::cout << "\ntestSendMobileNodes" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     auto sm1 = std::make_shared<SwarmManager>(nodeTestIds2.at(8));
     auto sm2 = std::make_shared<SwarmManager>(nodeTestIds3.at(0));
@@ -1038,7 +1041,7 @@ RoutingTableTest::crossNodes(NodeId nodeId)
 void
 RoutingTableTest::testSwarmManagersSmallBootstrapList()
 {
-    std::cout << "\ntestSwarmManagersSmallBootstrapList" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     for (const auto& sm : swarmManagers) {
         needSocketCallBack(sm.second);
@@ -1059,11 +1062,10 @@ RoutingTableTest::testSwarmManagersSmallBootstrapList()
 
     counter.wait();
 
-    std::cout << "Waiting " << time * 2 << "s..." << std::endl;
     sleep(time * 2);
 
     crossNodes(swarmManagers.begin()->first);
-    distribution();
+    // distribution();
 
     CPPUNIT_ASSERT_EQUAL(swarmManagers.size(), discoveredNodes.size());
 }
@@ -1071,7 +1073,7 @@ RoutingTableTest::testSwarmManagersSmallBootstrapList()
 void
 RoutingTableTest::testRoutingTableForConnectingNode()
 {
-    std::cout << "\ntestRoutingTableForConnectingNode" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     for (const auto& sm : swarmManagers) {
         needSocketCallBack(sm.second);
@@ -1115,7 +1117,7 @@ RoutingTableTest::testRoutingTableForConnectingNode()
 void
 RoutingTableTest::testRoutingTableForShuttingNode()
 {
-    std::cout << "\ntestRoutingTableForShuttingNode" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     for (const auto& sm : swarmManagers) {
         needSocketCallBack(sm.second);
@@ -1173,7 +1175,8 @@ RoutingTableTest::testRoutingTableForShuttingNode()
 void
 RoutingTableTest::testRoutingTableForMassShuttingsNodes()
 {
-    std::cout << "\ntestRoutingTableForMassShuttingsNodes" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
+
     std::vector<NodeId> swarmToCompare;
 
     for (const auto& sm : swarmManagers) {
@@ -1197,7 +1200,6 @@ RoutingTableTest::testRoutingTableForMassShuttingsNodes()
     }
     counter.wait();
 
-    std::cout << "Waiting " << time * 2 << "s... " << std::endl;
     sleep(time * 2);
 
     crossNodes(swarmManagers.begin()->first);
@@ -1251,7 +1253,7 @@ RoutingTableTest::testRoutingTableForMassShuttingsNodes()
 void
 RoutingTableTest::testSwarmManagersWMobileModes()
 {
-    std::cout << "\testSwarmManagersWMobileModes" << std::endl;
+    std::cout << "\nRunning test: " << __func__ << std::endl;
 
     for (const auto& sm : swarmManagers) {
         needSocketCallBack(sm.second);
@@ -1272,14 +1274,13 @@ RoutingTableTest::testSwarmManagersWMobileModes()
 
     counter.wait();
 
-    std::cout << "Waiting " << time << "s..." << std::endl;
     sleep(time);
 
-    distribution();
+    // distribution();
 
     crossNodes(swarmManagers.begin()->first);
     sleep(2);
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Supposed to be equal",
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Supposed to be equal with mobile nodes",
                                  swarmManagers.size(),
                                  discoveredNodes.size());
 
@@ -1289,26 +1290,27 @@ RoutingTableTest::testSwarmManagersWMobileModes()
         for (auto it = swarmManagers.begin(); it != swarmManagers.end();) {
             if (it->second->isMobile()) {
                 it->second->shutdown();
-                it = swarmManagers.erase(it);
                 channelSockets_.erase(it->second->getId());
+                it = swarmManagers.erase(it);
+
             } else {
                 ++it;
             }
         }
     }
 
-    sleep(10);
+    sleep(20);
 
     {
         if (!swarmManagers.empty()) {
             crossNodes(swarmManagers.begin()->first);
-            distribution();
+            // distribution();
         }
     }
 
     sleep(10);
 
-    CPPUNIT_ASSERT_EQUAL_MESSAGE("Supposed to be equal",
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Supposed to be equal without mobile nodes",
                                  swarmManagers.size(),
                                  discoveredNodes.size());
 }
-- 
GitLab