From 25b117fcf5feaea8d4a0529e1a2d6bdded255cfd Mon Sep 17 00:00:00 2001 From: EugenioCollado <121509066+EugenioCollado@users.noreply.github.com> Date: Mon, 13 Jan 2025 07:30:07 +0100 Subject: [PATCH] Add test for security initialization error (#5550) * Regression tests Signed-off-by: Eugenio Collado * Update log macro Signed-off-by: Eugenio Collado * Uncrustify Signed-off-by: Eugenio Collado * Fix CI log flush Signed-off-by: Eugenio Collado --------- Signed-off-by: Eugenio Collado --- src/cpp/rtps/security/SecurityManager.cpp | 4 +- .../security/SecurityInitializationTests.cpp | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/cpp/rtps/security/SecurityManager.cpp b/src/cpp/rtps/security/SecurityManager.cpp index aa66847770d..420c2b7eb3c 100644 --- a/src/cpp/rtps/security/SecurityManager.cpp +++ b/src/cpp/rtps/security/SecurityManager.cpp @@ -397,10 +397,10 @@ bool SecurityManager::init( if (!e) { // Unexpected code path. Let's log any errors - logError(SECURITY, "Error while configuring security plugin.") + EPROSIMA_LOG_ERROR(SECURITY, "Error while configuring security plugin."); if (0 != strlen(exception.what())) { - logError(SECURITY, exception.what()) + EPROSIMA_LOG_ERROR(SECURITY, exception.what()); } cancel_init(); diff --git a/test/unittest/rtps/security/SecurityInitializationTests.cpp b/test/unittest/rtps/security/SecurityInitializationTests.cpp index 60dfb537fa6..74669bd3aeb 100644 --- a/test/unittest/rtps/security/SecurityInitializationTests.cpp +++ b/test/unittest/rtps/security/SecurityInitializationTests.cpp @@ -14,6 +14,8 @@ #include "SecurityTests.hpp" +#include "../../logging/mock/MockConsumer.h" + const char* const MockIdentity::class_id_ = "MockIdentityHandle"; const char* const MockHandshake::class_id_ = "MockHandshakeHandle"; const char* const SharedSecret::class_id_ = "SharedSecretHandle"; @@ -208,3 +210,43 @@ TEST_F(SecurityTest, initialization_ok) } +/* Regression test for Redmine 22545. + * + * Triggering a throw false in SecurityManager::init() should be logged properly as + * the error: "Error while configuring security plugin.". + */ +TEST_F(SecurityTest, initialization_logging_error) +{ + DefaultValue::Set(guid); + DefaultValue::Set(security_attributes_); + + EXPECT_CALL(*auth_plugin_, validate_local_identity(_, _, _, _, _, _)).Times(1). + WillOnce(DoAll(SetArgPointee<0>(&local_identity_handle_), Return(ValidationResult_t::VALIDATION_OK))); + EXPECT_CALL(crypto_plugin_->cryptokeyfactory_, + register_local_participant(Ref(local_identity_handle_), _, _, _, _)).Times(1). + WillOnce(Return(nullptr)); + + eprosima::fastdds::dds::MockConsumer* mockConsumer = new eprosima::fastdds::dds::MockConsumer(); + eprosima::fastdds::dds::Log::RegisterConsumer(std::unique_ptr(mockConsumer)); + eprosima::fastdds::dds::Log::SetVerbosity(eprosima::fastdds::dds::Log::Error); + + security_activated_ = manager_.init(security_attributes_, participant_properties_); + + // Check that the error message was logged. + // First flush the log to make sure the message is there. + eprosima::fastdds::dds::Log::Flush(); + + auto log_entries = mockConsumer->ConsumedEntries(); + ASSERT_GE(log_entries.size(), 1); + bool found = false; + for (auto entry : log_entries) + { + if (entry.message.find("Error while configuring security plugin.") != std::string::npos) + { + found = true; + break; + } + } + ASSERT_TRUE(found); +} +