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