diff --git a/Source/core/MessageStore.cpp b/Source/core/MessageStore.cpp index d42bc63aa..5f7d54b27 100644 --- a/Source/core/MessageStore.cpp +++ b/Source/core/MessageStore.cpp @@ -51,11 +51,10 @@ ENUM_CONVERSION_END(Core::Messaging::Metadata::type) { _adminLock.Lock(); - while (_controlList.size() > 0) { - VARIABLE_IS_NOT_USED auto& control = *_controlList.front(); + for_each (_controlList.begin(), _controlList.end(), [this](VARIABLE_IS_NOT_USED Core::Messaging::IControl* const & control) { TRACE_L1(_T("MessageControl %s, size = %u was not disposed before"), typeid(control).name(), static_cast(_controlList.size())); - _controlList.front()->Destroy(); } + ); _adminLock.Unlock(); } @@ -157,9 +156,9 @@ namespace Core { { uint16_t length = 0; - ASSERT(bufferSize > (sizeof(_type) + (sizeof(_category[0]) * 2))); + ASSERT(bufferSize > (sizeof(_type) + _category.size() + 1)); - if (bufferSize > (sizeof(_type) + (sizeof(_category[0]) * 2))) { + if (bufferSize > (sizeof(_type) + _category.size() + 1)) { Core::FrameType<0> frame(const_cast(buffer), bufferSize, bufferSize); Core::FrameType<0>::Reader frameReader(frame, 0); _type = frameReader.Number(); diff --git a/Source/messaging/MessageUnit.cpp b/Source/messaging/MessageUnit.cpp index 429412f69..5a970a293 100644 --- a/Source/messaging/MessageUnit.cpp +++ b/Source/messaging/MessageUnit.cpp @@ -97,6 +97,8 @@ namespace Thunder { public: void Handle(Core::Messaging::IControl* control) override { + ASSERT(control != nullptr); + const string& module = control->Metadata().Module(); if (std::find(_modules.begin(), _modules.end(), module) == _modules.end()) { _modules.push_back(module); @@ -312,7 +314,6 @@ namespace Thunder { Messaging::ConsoleStandardOut::Instance().Close(); } Core::Messaging::IStore::Set(nullptr); - Core::Messaging::IControl::Iterate(handler); _adminLock.Lock(); _dispatcher.reset(nullptr); diff --git a/Tests/unit/core/CMakeLists.txt b/Tests/unit/core/CMakeLists.txt index eb8aa8826..32bb1f9eb 100644 --- a/Tests/unit/core/CMakeLists.txt +++ b/Tests/unit/core/CMakeLists.txt @@ -82,12 +82,10 @@ add_executable(${TEST_RUNNER_NAME} test_workerpool.cpp test_xgetopt.cpp ) -#[[ target_sources(${TEST_RUNNER_NAME} PRIVATE test_message_unit.cpp) target_link_libraries(${TEST_RUNNER_NAME} ThunderMessaging ) -]] else() add_executable(${TEST_RUNNER_NAME} test_databuffer.cpp diff --git a/Tests/unit/core/test_message_unit.cpp b/Tests/unit/core/test_message_unit.cpp index 446f05f09..cd17b8757 100644 --- a/Tests/unit/core/test_message_unit.cpp +++ b/Tests/unit/core/test_message_unit.cpp @@ -31,8 +31,6 @@ #include "../IPTestAdministrator.h" -#define PRINT_MODULES(NAME, MODULES) {std::cout << NAME << " ---> "; std::for_each(MODULES.begin(), MODULES.end(), [](std::string MODULE){std::cout << " " << MODULE;}); std::cout << std::endl;}; - namespace Thunder { namespace Tests { namespace Core { @@ -77,9 +75,9 @@ namespace Core { _controls.emplace_back(new Control({ ::Thunder::Core::Messaging::Metadata::type::TRACING, _T("Test_Category_2"), EXPAND_AND_QUOTE(MODULE_NAME) })); _controls.emplace_back(new Control({ ::Thunder::Core::Messaging::Metadata::type::TRACING, _T("Test_Category_3"), EXPAND_AND_QUOTE(MODULE_NAME) })); _controls.emplace_back(new Control({ ::Thunder::Core::Messaging::Metadata::type::TRACING, _T("Test_Category_4"), EXPAND_AND_QUOTE(MODULE_NAME) })); + _controls.emplace_back(new Control({ ::Thunder::Core::Messaging::Metadata::type::TRACING, _T("Test_Category_5"), EXPAND_AND_QUOTE(MODULE_NAME) })); _controls.emplace_back(new Control({ ::Thunder::Core::Messaging::Metadata::type::TRACING, _T("Test_Category_1"), _T("Test_Module2") })); _controls.emplace_back(new Control({ ::Thunder::Core::Messaging::Metadata::type::LOGGING, _T("Test_Category_5"), _T("SysLog") })); - } ~Core_Messaging_MessageUnit() = default; @@ -94,6 +92,7 @@ namespace Core { void SetUp() override { + _activeConfig = false; } void TearDown() override @@ -253,8 +252,6 @@ namespace Core { std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - int matches = 0; int count = 0; @@ -301,8 +298,6 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - int matches = 0; int count = 0; @@ -331,13 +326,11 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); modules.clear(); client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - /* bool */ enabled = false; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; - + client.Controls(item, *it); while (item.Next()) { @@ -375,13 +368,11 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - bool enabled = false; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; - + client.Controls(item, *it); while (item.Next()) { @@ -405,13 +396,11 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); modules.clear(); client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - enabled = false; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; - + client.Controls(item, *it); while (item.Next()) { @@ -445,7 +434,7 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); + // Controls from the default are disabled by default, except a few, like the once announce with the ANNOUNCE-macros bool enabled = true; @@ -461,17 +450,46 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); } } - // Controls from the default are disabled by default, except a few + EXPECT_GT(modules.size(), 0); + EXPECT_TRUE(enabled); + + // Effective only for exsting modules / controls for this category + // Disable all controls within a category via metadata + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::REPORTING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::OPERATIONAL_STREAM, _T(""), _T("")}, false); + + modules.clear(); + client.Modules(modules); + + enabled = false; + + for (auto it = modules.begin(), end = modules.end(); it != end; it++) { + ::Thunder::Messaging::MessageUnit::Iterator item; + + client.Controls(item, *it); + + while (item.Next()) { + enabled = enabled + || item.Enabled() + ; + } + } + + // All categories are disabled EXPECT_FALSE(enabled); - // Enable message via metadata, eg, set enable for the previously added Control, eg, enable category + // WARNING: This effects all successive tests as it can differ from the defaults + + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("")}, true); client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::REPORTING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::OPERATIONAL_STREAM, _T(""), _T("")}, true); modules.clear(); client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - enabled = true; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { @@ -501,14 +519,12 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); client.AddInstance(0); //we are in framework - ::Thunder::Core::Messaging::Metadata messageToToggle(::Thunder::Core::Messaging::Metadata::type::LOGGING, _T("Test_Category_5"), _T("SysLog")); - std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); + // Controls from the default are disabled by default, except a few, like the once announce with the ANNOUNCE-macros - int matches = 0; + bool enabled = true; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; @@ -516,26 +532,52 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); client.Controls(item, *it); while (item.Next()) { - if ( item.Type() == messageToToggle.Type() - && item.Category() == messageToToggle.Category() - && item.Module() == messageToToggle.Module() - && item.Enabled() - ) { - ++matches; - } + enabled = enabled + && item.Enabled() + ; } } - EXPECT_EQ(matches, 1); + EXPECT_GT(modules.size(), 0); + EXPECT_TRUE(enabled); - client.Enable(messageToToggle, false); + // Effective only for exsting modules / controls for this category + // Disable all controls within a category via metadata + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::REPORTING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::OPERATIONAL_STREAM, _T(""), _T("")}, false); modules.clear(); client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); + enabled = false; - matches = 0; + for (auto it = modules.begin(), end = modules.end(); it != end; it++) { + ::Thunder::Messaging::MessageUnit::Iterator item; + + client.Controls(item, *it); + + while (item.Next()) { + enabled = enabled + || item.Enabled() + ; + } + } + + // All categories are disabled + EXPECT_FALSE(enabled); + + // WARNING: This effects all successive tests as it can differ from the defaults + + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("SysLog")}, true); + + modules.clear(); + client.Modules(modules); + + enabled = true; + + int matches = 0; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; @@ -543,17 +585,23 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); client.Controls(item, *it); while (item.Next()) { - if ( item.Type() == messageToToggle.Type() - && item.Category() == messageToToggle.Category() - && item.Module() == messageToToggle.Module() - && !item.Enabled() - ) { + if (item.Module() == "SysLog") { + enabled = enabled + && item.Enabled() + ; ++matches; } } } - EXPECT_EQ(matches, 1); + EXPECT_TRUE(enabled); + EXPECT_GT(matches, 0); + + // Re-enable all + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::REPORTING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::OPERATIONAL_STREAM, _T(""), _T("")}, true); client.RemoveInstance(0); @@ -565,19 +613,37 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); ToggleDefaultConfig(true); const ::Thunder::Core::Messaging::Metadata toBeAdded(::Thunder::Core::Messaging::Metadata::type::LOGGING, _T("Test_Category_5"), _T("SysLog")); + Control control(toBeAdded); ::Thunder::Messaging::MessageClient client(DispatcherIdentifier(), DispatcherBasePath() /*, socketPort not specified, domain socket used instead */); client.AddInstance(0); //we are in framework - // LOGGING is enabled and available by default - std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); + int matches = 0; - bool enabled = false; + for (auto it = modules.begin(), end = modules.end(); it != end; it++) { + ::Thunder::Messaging::MessageUnit::Iterator item; + + client.Controls(item, *it); + + while (item.Next()) { + if ( toBeAdded.Type() == item.Type() + && toBeAdded.Category() == item.Category() + && toBeAdded.Module() == item.Module() + ) { + ++matches; + } + } + } + + EXPECT_EQ(matches, 0); + + matches = 0; + + ::Thunder::Core::Messaging::IControl::Announce(&control); for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; @@ -585,18 +651,19 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); client.Controls(item, *it); while (item.Next()) { - enabled = enabled - || - ( toBeAdded.Type() == item.Type() - && toBeAdded.Category() == item.Category() - && toBeAdded.Module() == item.Module() - && item.Enabled() - ) - ; + if ( toBeAdded.Type() == item.Type() + && toBeAdded.Category() == item.Category() + && toBeAdded.Module() == item.Module() + ) { + ++matches; + } } } - EXPECT_TRUE(enabled); + EXPECT_EQ(matches, 1); + + // The control goes out of scope + ::Thunder::Core::Messaging::IControl::Revoke(&control); client.RemoveInstance(0); @@ -608,18 +675,23 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); ToggleDefaultConfig(true); ::Thunder::Core::Messaging::Metadata message(::Thunder::Core::Messaging::Metadata::type::TRACING, _T("Test_Category_1"), EXPAND_AND_QUOTE(MODULE_NAME)); + Control control(message); ::Thunder::Messaging::MessageClient client(DispatcherIdentifier(), DispatcherBasePath() /*, socketPort not specified, domain socket used instead */); client.AddInstance(0); //we are in framework - // TRACING is not enabled but available by default + ::Thunder::Core::Messaging::IControl::Announce(&control); + + // Disable all controls within a category via metadata + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::REPORTING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::OPERATIONAL_STREAM, _T(""), _T("")}, false); std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - bool enabled = false; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { @@ -643,13 +715,9 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); client.Enable(message, true); - client.Enable(message, true); - modules.clear(); client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - enabled = false; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { @@ -671,6 +739,13 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); EXPECT_TRUE(enabled); + ::Thunder::Core::Messaging::IControl::Revoke(&control); + + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::REPORTING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::OPERATIONAL_STREAM, _T(""), _T("")}, true); + client.RemoveInstance(0); ToggleDefaultConfig(false); @@ -678,20 +753,28 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); TEST_F(Core_Messaging_MessageUnit, EnablingMessageSpecifiedByModuleShouldEnableAllCategoriesInsideIt) { - ToggleDefaultConfig(false); - - const ::Thunder::Core::Messaging::Metadata message(::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), EXPAND_AND_QUOTE(MODULE_NAME)); + ToggleDefaultConfig(true); ::Thunder::Messaging::MessageClient client(DispatcherIdentifier(), DispatcherBasePath() /*, socketPort not specified, domain socket used instead */); + const ::Thunder::Core::Messaging::Metadata toBeAdded(::Thunder::Core::Messaging::Metadata::type::LOGGING, _T("Test_Category_5"), _T("SysLog")); + Control control(toBeAdded); + client.AddInstance(0); //we are in framework + ::Thunder::Core::Messaging::IControl::Announce(&control); + + // Effective only for exsting modules / controls for this category + // Disable all controls within a category via metadata + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::REPORTING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::OPERATIONAL_STREAM, _T(""), _T("")}, false); + std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - - bool enabled = true; + bool enabled = false; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; @@ -699,44 +782,51 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); client.Controls(item, *it); while (item.Next()) { - if ( message.Type() == item.Type() - && message.Module() == item.Module() - ) { - enabled = enabled - && item.Enabled() - ; - } + enabled = enabled + || item.Enabled() + ; } } + // All categories are disabled EXPECT_FALSE(enabled); - client.Enable(message, true); + // WARNING: This effects all successive tests as it can differ from the defaults + + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("SysLog")}, true); modules.clear(); client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - enabled = true; + int matches = 0; + for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; client.Controls(item, *it); while (item.Next()) { - if ( message.Type() == item.Type() - && message.Module() == item.Module() + if ( item.Module() == "SysLog" + && item.Category() == "Test_Category_5" + && item.Enabled() ) { - enabled = enabled - && item.Enabled() - ; + ++matches; } } } EXPECT_TRUE(enabled); + EXPECT_EQ(matches, 1); + + ::Thunder::Core::Messaging::IControl::Revoke(&control); + + // Re-enable all + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::REPORTING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::OPERATIONAL_STREAM, _T(""), _T("")}, true); client.RemoveInstance(0); @@ -747,18 +837,30 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); { ToggleDefaultConfig(true); - const ::Thunder::Core::Messaging::Metadata message(::Thunder::Core::Messaging::Metadata::type::TRACING, _T("Test_Category_1"), _T("")); - ::Thunder::Messaging::MessageClient client(DispatcherIdentifier(), DispatcherBasePath() /*, socketPort not specified, domain socket used instead */); + const ::Thunder::Core::Messaging::Metadata moduleMessage(::Thunder::Core::Messaging::Metadata::type::TRACING, _T("Test_Category_5"), EXPAND_AND_QUOTE(MODULE_NAME)); + Control moduleControl(moduleMessage); + + const ::Thunder::Core::Messaging::Metadata syslogMessage(::Thunder::Core::Messaging::Metadata::type::TRACING, _T("Test_Category_5"), _T("SysLog")); + Control syslogControl(syslogMessage); + client.AddInstance(0); //we are in framework + ::Thunder::Core::Messaging::IControl::Announce(&moduleControl); + ::Thunder::Core::Messaging::IControl::Announce(&syslogControl); + + // Effective only for exsting modules / controls for this category + // Disable all controls within a category via metadata + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::REPORTING, _T(""), _T("")}, false); + client.Enable({::Thunder::Core::Messaging::Metadata::type::OPERATIONAL_STREAM, _T(""), _T("")}, false); + std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - - bool enabled = true; + bool enabled = false; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; @@ -766,44 +868,51 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); client.Controls(item, *it); while (item.Next()) { - if ( message.Type() == item.Type() - && message.Category() == item.Category() - ) { - enabled = enabled - && item.Enabled() - ; - } + enabled = enabled + || item.Enabled() + ; } } + // All categories are disabled EXPECT_FALSE(enabled); - client.Enable(message, true); + // WARNING: This effects all successive tests as it can differ from the defaults + + client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T("Test_Category_5"), _T("")}, true); modules.clear(); client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - enabled = true; + int matches = 0; + for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; client.Controls(item, *it); while (item.Next()) { - if ( message.Type() == item.Type() - && message.Category() == item.Category() + if ( item.Category() == "Test_Category_5" + && item.Enabled() ) { - enabled = enabled - && item.Enabled() - ; + ++matches; } } } EXPECT_TRUE(enabled); + EXPECT_EQ(matches, 2); // 'all' within the same TYPE, ie, TRACING + + ::Thunder::Core::Messaging::IControl::Revoke(&moduleControl); + ::Thunder::Core::Messaging::IControl::Revoke(&syslogControl); + + // Re-enable all + client.Enable({::Thunder::Core::Messaging::Metadata::type::LOGGING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::TRACING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::REPORTING, _T(""), _T("")}, true); + client.Enable({::Thunder::Core::Messaging::Metadata::type::OPERATIONAL_STREAM, _T(""), _T("")}, true); client.RemoveInstance(0); @@ -866,8 +975,6 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item; @@ -901,8 +1008,6 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); std::vector modules; client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - std::vector buffer; for (auto it = modules.begin(), end = modules.end(); it != end; it++) { @@ -925,8 +1030,6 @@ PRINT_MODULES(__PRETTY_FUNCTION__, modules); modules.clear(); client.Modules(modules); -PRINT_MODULES(__PRETTY_FUNCTION__, modules); - for (auto it = modules.begin(), end = modules.end(); it != end; it++) { ::Thunder::Messaging::MessageUnit::Iterator item;