diff --git a/src/cpp/rtps/writer/LivelinessManager.cpp b/src/cpp/rtps/writer/LivelinessManager.cpp index 889e3cc31d1..42ed418dfec 100644 --- a/src/cpp/rtps/writer/LivelinessManager.cpp +++ b/src/cpp/rtps/writer/LivelinessManager.cpp @@ -188,7 +188,7 @@ bool LivelinessManager::assert_liveliness( for (LivelinessData& w: writers_) { if (w.kind == writer.kind && - w.guid.guidPrefix == guid.guidPrefix) + w.guid.guidPrefix == guid.guidPrefix) { assert_writer_liveliness(w); } @@ -256,7 +256,7 @@ bool LivelinessManager::assert_liveliness( for (LivelinessData& writer: writers_) { if (writer.kind == kind && - guid_prefix == writer.guid.guidPrefix) + guid_prefix == writer.guid.guidPrefix) { assert_writer_liveliness(writer); } diff --git a/test/unittest/rtps/writer/LivelinessManagerTests.cpp b/test/unittest/rtps/writer/LivelinessManagerTests.cpp index bb86f3961c9..03ed08ababb 100644 --- a/test/unittest/rtps/writer/LivelinessManagerTests.cpp +++ b/test/unittest/rtps/writer/LivelinessManagerTests.cpp @@ -25,75 +25,87 @@ class LivelinessManagerTests : public ::testing::Test { - public: - - LivelinessManagerTests() : service_() {} - - void SetUp() - { - service_.init_thread(); - - writer_losing_liveliness = eprosima::fastrtps::rtps::GUID_t(); - writer_recovering_liveliness = eprosima::fastrtps::rtps::GUID_t(); - num_writers_lost = 0; - num_writers_recovered = 0; - } - - void TearDown() - { - } - - void run() - { - } - - eprosima::fastrtps::rtps::ResourceEvent service_; - - // Callback to test the liveliness manager - - void liveliness_changed(eprosima::fastrtps::rtps::GUID_t guid, - const eprosima::fastrtps::LivelinessQosPolicyKind&, - const eprosima::fastrtps::Duration_t&, - int alive_change, - int not_alive_change) +public: + + LivelinessManagerTests() + : service_() + { + } + + void SetUp() + { + service_.init_thread(); + + writer_losing_liveliness = eprosima::fastrtps::rtps::GUID_t(); + writer_recovering_liveliness = eprosima::fastrtps::rtps::GUID_t(); + num_writers_lost = 0; + num_writers_recovered = 0; + } + + void TearDown() + { + } + + void run() + { + } + + eprosima::fastrtps::rtps::ResourceEvent service_; + + // Callback to test the liveliness manager + + void liveliness_changed( + eprosima::fastrtps::rtps::GUID_t guid, + const eprosima::fastrtps::LivelinessQosPolicyKind&, + const eprosima::fastrtps::Duration_t&, + int alive_change, + int not_alive_change) + { + if (alive_change > 0) { - if (alive_change > 0) - { - std::unique_lock lock(liveliness_recovered_mutex_); - writer_recovering_liveliness = guid; - num_writers_recovered++; - liveliness_recovered_cv_.notify_one(); - } - else if (not_alive_change > 0) - { - std::unique_lock lock(liveliness_lost_mutex_); - writer_losing_liveliness = guid; - num_writers_lost++; - liveliness_lost_cv_.notify_one(); - } + std::unique_lock lock(liveliness_recovered_mutex_); + writer_recovering_liveliness = guid; + num_writers_recovered++; + liveliness_recovered_cv_.notify_one(); } - - void wait_liveliness_lost(unsigned int num_lost) + else if (not_alive_change > 0) { std::unique_lock lock(liveliness_lost_mutex_); - liveliness_lost_cv_.wait(lock, [&](){ return num_writers_lost == num_lost; }); - } - - void wait_liveliness_recovered(unsigned int num_recovered) - { - std::unique_lock lock(liveliness_recovered_mutex_); - liveliness_recovered_cv_.wait(lock, [&](){ return num_writers_recovered == num_recovered;}); + writer_losing_liveliness = guid; + num_writers_lost++; + liveliness_lost_cv_.notify_one(); } - - eprosima::fastrtps::rtps::GUID_t writer_losing_liveliness; - eprosima::fastrtps::rtps::GUID_t writer_recovering_liveliness; - unsigned int num_writers_lost; - unsigned int num_writers_recovered; - - std::mutex liveliness_lost_mutex_; - std::condition_variable liveliness_lost_cv_; - std::mutex liveliness_recovered_mutex_; - std::condition_variable liveliness_recovered_cv_; + } + + void wait_liveliness_lost( + unsigned int num_lost) + { + std::unique_lock lock(liveliness_lost_mutex_); + liveliness_lost_cv_.wait(lock, [&]() + { + return num_writers_lost == num_lost; + }); + } + + void wait_liveliness_recovered( + unsigned int num_recovered) + { + std::unique_lock lock(liveliness_recovered_mutex_); + liveliness_recovered_cv_.wait(lock, [&]() + { + return num_writers_recovered == num_recovered; + }); + } + + eprosima::fastrtps::rtps::GUID_t writer_losing_liveliness; + eprosima::fastrtps::rtps::GUID_t writer_recovering_liveliness; + unsigned int num_writers_lost; + unsigned int num_writers_recovered; + + std::mutex liveliness_lost_mutex_; + std::condition_variable liveliness_lost_cv_; + std::mutex liveliness_recovered_mutex_; + std::condition_variable liveliness_recovered_cv_; }; namespace eprosima { @@ -107,8 +119,8 @@ using eprosima::fastrtps::rtps::GUID_t; TEST_F(LivelinessManagerTests, WriterCanAlwaysBeAdded) { LivelinessManager liveliness_manager( - nullptr, - service_); + nullptr, + service_); GuidPrefix_t guidP; guidP.value[0] = 1; @@ -134,8 +146,8 @@ TEST_F(LivelinessManagerTests, WriterCanAlwaysBeAdded) TEST_F(LivelinessManagerTests, WriterCannotBeRemovedTwice) { LivelinessManager liveliness_manager( - nullptr, - service_); + nullptr, + service_); GuidPrefix_t guidP; guidP.value[0] = 1; @@ -159,8 +171,8 @@ TEST_F(LivelinessManagerTests, WriterCannotBeRemovedTwice) TEST_F(LivelinessManagerTests, AssertLivelinessByKind) { LivelinessManager liveliness_manager( - nullptr, - service_); + nullptr, + service_); GuidPrefix_t guidP; guidP.value[0] = 1; @@ -215,8 +227,8 @@ TEST_F(LivelinessManagerTests, AssertLivelinessByKind) TEST_F(LivelinessManagerTests, AssertLivelinessByWriter) { LivelinessManager liveliness_manager( - nullptr, - service_); + nullptr, + service_); GuidPrefix_t guidP; guidP.value[0] = 1; @@ -230,9 +242,9 @@ TEST_F(LivelinessManagerTests, AssertLivelinessByWriter) // If a manual by topic writer is asserted the other writers are unchanged EXPECT_TRUE(liveliness_manager.assert_liveliness( - GUID_t(guidP, 6), - MANUAL_BY_TOPIC_LIVELINESS_QOS, - Duration_t(1))); + GUID_t(guidP, 6), + MANUAL_BY_TOPIC_LIVELINESS_QOS, + Duration_t(1))); auto liveliness_data = liveliness_manager.get_liveliness_data(); EXPECT_EQ(liveliness_data[0].status, LivelinessData::WriterStatus::NOT_ASSERTED); EXPECT_EQ(liveliness_data[1].status, LivelinessData::WriterStatus::NOT_ASSERTED); @@ -242,9 +254,9 @@ TEST_F(LivelinessManagerTests, AssertLivelinessByWriter) EXPECT_EQ(liveliness_data[5].status, LivelinessData::WriterStatus::ALIVE); EXPECT_TRUE(liveliness_manager.assert_liveliness( - GUID_t(guidP, 5), - MANUAL_BY_TOPIC_LIVELINESS_QOS, - Duration_t(1))); + GUID_t(guidP, 5), + MANUAL_BY_TOPIC_LIVELINESS_QOS, + Duration_t(1))); liveliness_data = liveliness_manager.get_liveliness_data(); EXPECT_EQ(liveliness_data[0].status, LivelinessData::WriterStatus::NOT_ASSERTED); EXPECT_EQ(liveliness_data[1].status, LivelinessData::WriterStatus::NOT_ASSERTED); @@ -255,9 +267,9 @@ TEST_F(LivelinessManagerTests, AssertLivelinessByWriter) // If an automatic writer is asserted all automatic writers are asserted as well EXPECT_TRUE(liveliness_manager.assert_liveliness( - GUID_t(guidP, 1), - AUTOMATIC_LIVELINESS_QOS, - Duration_t(1))); + GUID_t(guidP, 1), + AUTOMATIC_LIVELINESS_QOS, + Duration_t(1))); liveliness_data = liveliness_manager.get_liveliness_data(); EXPECT_EQ(liveliness_data[0].status, LivelinessData::WriterStatus::ALIVE); EXPECT_EQ(liveliness_data[1].status, LivelinessData::WriterStatus::ALIVE); @@ -268,9 +280,9 @@ TEST_F(LivelinessManagerTests, AssertLivelinessByWriter) // If a manual by participant writer is asserted all manual by participant writers are asserted as well EXPECT_TRUE(liveliness_manager.assert_liveliness( - GUID_t(guidP, 4), - MANUAL_BY_PARTICIPANT_LIVELINESS_QOS, - Duration_t(1))); + GUID_t(guidP, 4), + MANUAL_BY_PARTICIPANT_LIVELINESS_QOS, + Duration_t(1))); liveliness_data = liveliness_manager.get_liveliness_data(); EXPECT_EQ(liveliness_data[0].status, LivelinessData::WriterStatus::ALIVE); EXPECT_EQ(liveliness_data[1].status, LivelinessData::WriterStatus::ALIVE); @@ -285,21 +297,22 @@ TEST_F(LivelinessManagerTests, AssertLivelinessByWriter) EXPECT_GT(liveliness_data[2].time, std::chrono::steady_clock::now()); EXPECT_GT(liveliness_data[3].time, std::chrono::steady_clock::now()); EXPECT_GT(liveliness_data[4].time, std::chrono::steady_clock::now()); - EXPECT_GT(liveliness_data[5].time, std::chrono::steady_clock::now());} + EXPECT_GT(liveliness_data[5].time, std::chrono::steady_clock::now()); +} //! Tests the case when the timer expires and liveliness manager is managing two automatic writers with different //! lease durations TEST_F(LivelinessManagerTests, TimerExpired_Automatic) { LivelinessManager liveliness_manager( - std::bind(&LivelinessManagerTests::liveliness_changed, - this, - std::placeholders::_1, - std::placeholders::_2, - std::placeholders::_3, - std::placeholders::_4, - std::placeholders::_5), - service_); + std::bind(&LivelinessManagerTests::liveliness_changed, + this, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4, + std::placeholders::_5), + service_); GuidPrefix_t guidP; guidP.value[0] = 1; @@ -330,14 +343,14 @@ TEST_F(LivelinessManagerTests, TimerExpired_Automatic) TEST_F(LivelinessManagerTests, TimerExpired_ManualByParticipant) { LivelinessManager liveliness_manager( - std::bind(&LivelinessManagerTests::liveliness_changed, - this, - std::placeholders::_1, - std::placeholders::_2, - std::placeholders::_3, - std::placeholders::_4, - std::placeholders::_5), - service_); + std::bind(&LivelinessManagerTests::liveliness_changed, + this, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4, + std::placeholders::_5), + service_); GuidPrefix_t guidP; @@ -371,14 +384,14 @@ TEST_F(LivelinessManagerTests, TimerExpired_ManualByParticipant) TEST_F(LivelinessManagerTests, TimerExpired_ManualByTopic) { LivelinessManager liveliness_manager( - std::bind(&LivelinessManagerTests::liveliness_changed, - this, - std::placeholders::_1, - std::placeholders::_2, - std::placeholders::_3, - std::placeholders::_4, - std::placeholders::_5), - service_); + std::bind(&LivelinessManagerTests::liveliness_changed, + this, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4, + std::placeholders::_5), + service_); GuidPrefix_t guidP; @@ -417,14 +430,14 @@ TEST_F(LivelinessManagerTests, TimerExpired_ManualByTopic) TEST_F(LivelinessManagerTests, TimerOwnerCalculation) { LivelinessManager liveliness_manager( - std::bind(&LivelinessManagerTests::liveliness_changed, - this, - std::placeholders::_1, - std::placeholders::_2, - std::placeholders::_3, - std::placeholders::_4, - std::placeholders::_5), - service_); + std::bind(&LivelinessManagerTests::liveliness_changed, + this, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4, + std::placeholders::_5), + service_); GuidPrefix_t guidP; @@ -454,14 +467,14 @@ TEST_F(LivelinessManagerTests, TimerOwnerCalculation) TEST_F(LivelinessManagerTests, TimerOwnerRemoved) { LivelinessManager liveliness_manager( - std::bind(&LivelinessManagerTests::liveliness_changed, - this, - std::placeholders::_1, - std::placeholders::_2, - std::placeholders::_3, - std::placeholders::_4, - std::placeholders::_5), - service_); + std::bind(&LivelinessManagerTests::liveliness_changed, + this, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4, + std::placeholders::_5), + service_); GuidPrefix_t guidP; @@ -478,10 +491,12 @@ TEST_F(LivelinessManagerTests, TimerOwnerRemoved) EXPECT_EQ(num_writers_lost, 1u); } -} -} +} // namespace fastrtps +} // namespace eprosima -int main(int argc, char **argv) +int main( + int argc, + char** argv) { testing::InitGoogleMock(&argc, argv); return RUN_ALL_TESTS();