From 3548b2fdfe83c95bdd27b8fc8f46fbcf71e2e677 Mon Sep 17 00:00:00 2001 From: Miguel Company <miguelcompany@eprosima.com> Date: Tue, 3 Sep 2024 15:39:38 +0200 Subject: [PATCH] Refs #20866. Fix unit tests. Signed-off-by: Miguel Company <miguelcompany@eprosima.com> --- .../dds/subscriber/DataReaderHistoryTests.cpp | 127 +++++++----------- 1 file changed, 46 insertions(+), 81 deletions(-) diff --git a/test/unittest/dds/subscriber/DataReaderHistoryTests.cpp b/test/unittest/dds/subscriber/DataReaderHistoryTests.cpp index 1b69e5672dc..2fea658022c 100644 --- a/test/unittest/dds/subscriber/DataReaderHistoryTests.cpp +++ b/test/unittest/dds/subscriber/DataReaderHistoryTests.cpp @@ -51,6 +51,23 @@ class TestType : public TopicDataType (override)); }; +bool add_test_change( + eprosima::fastdds::dds::detail::DataReaderHistory& history, + eprosima::fastdds::rtps::CacheChange_t& change, + std::vector<std::unique_ptr<eprosima::fastdds::rtps::CacheChange_t>>& test_changes) +{ + ++change.sequenceNumber; + eprosima::fastdds::rtps::Time_t::now(change.sourceTimestamp); + eprosima::fastdds::rtps::CacheChange_t* new_change = new eprosima::fastdds::rtps::CacheChange_t(); + new_change->copy(&change); + new_change->reader_info.writer_ownership_strength = change.reader_info.writer_ownership_strength; + + EXPECT_TRUE(history.received_change(new_change, 0)); + bool ret = history.update_instance_nts(new_change); + test_changes.push_back(std::unique_ptr<eprosima::fastdds::rtps::CacheChange_t>(new_change)); + return ret; +} + /*! * \test DDS-OWN-HIST-01 Tests `DataReaderInstance` handles successfully the reception of Non-Keyed samples with * different Ownership's strength. @@ -65,6 +82,7 @@ TEST(DataReaderHistory, exclusive_ownership_non_keyed_sample_reception) DataReaderHistory history(type, topic, qos); eprosima::fastdds::RecursiveTimedMutex mutex; eprosima::fastdds::rtps::StatelessReader reader(&history, &mutex); + std::vector<std::unique_ptr<eprosima::fastdds::rtps::CacheChange_t>> changes; eprosima::fastdds::rtps::CacheChange_t dw1_change; dw1_change.writerGUID = {{}, 1}; @@ -77,50 +95,32 @@ TEST(DataReaderHistory, exclusive_ownership_non_keyed_sample_reception) dw3_change.reader_info.writer_ownership_strength = 3; // Receives a sample with seq 1 from DW1 and update instance with strength 1. - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw1_change)); + ASSERT_TRUE(add_test_change(history, dw1_change, changes)); // Receives a sample with seq 1 from DW2 and update instance with strength 2. - ++dw2_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw2_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw2_change)); + ASSERT_TRUE(add_test_change(history, dw2_change, changes)); // Receives a sample with seq 2 from DW1 and update instance with strength 1. - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw1_change)); + ASSERT_FALSE(add_test_change(history, dw1_change, changes)); // Receives a sample with seq 2 from DW2 and update instance with strength 2. - ++dw2_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw2_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw2_change)); + ASSERT_TRUE(add_test_change(history, dw2_change, changes)); // Receives a sample with seq 1 from DW3 and update instance with strength 3. - ++dw3_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw3_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw3_change)); + ASSERT_TRUE(add_test_change(history, dw3_change, changes)); // Receives a sample with seq 3 from DW1 and update instance with strength 1. - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw1_change)); + ASSERT_FALSE(add_test_change(history, dw1_change, changes)); // Receives a sample with seq 3 from DW2 and update instance with strength 2. - ++dw2_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw2_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw2_change)); + ASSERT_FALSE(add_test_change(history, dw2_change, changes)); // Receives a sample with seq 2 from DW3 and update instance with strength 1. - ++dw3_change.sequenceNumber; dw3_change.reader_info.writer_ownership_strength = 1; - ASSERT_TRUE(history.received_change(&dw3_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw3_change)); + ASSERT_TRUE(add_test_change(history, dw3_change, changes)); // Receives a sample with seq 4 from DW2 and update instance with strength 2. - ++dw2_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw2_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw2_change)); + ASSERT_TRUE(add_test_change(history, dw2_change, changes)); ASSERT_EQ(9u, history.getHistorySize()); } @@ -142,6 +142,7 @@ TEST(DataReaderHistory, exclusive_ownership_keyed_sample_reception) DataReaderHistory history(type, topic, qos); eprosima::fastdds::RecursiveTimedMutex mutex; eprosima::fastdds::rtps::StatelessReader reader(&history, &mutex); + std::vector<std::unique_ptr<eprosima::fastdds::rtps::CacheChange_t>> changes; const InstanceHandle_t instance_1 = eprosima::fastdds::rtps::GUID_t{{}, 1}; const InstanceHandle_t instance_2 = eprosima::fastdds::rtps::GUID_t{{}, 2}; @@ -158,112 +159,76 @@ TEST(DataReaderHistory, exclusive_ownership_keyed_sample_reception) // Receives instance 1 with seq 1 from DW1 and update instance with strength 1. dw1_change.instanceHandle = instance_1; - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw1_change)); + ASSERT_TRUE(add_test_change(history, dw1_change, changes)); // Receives instance 2 with seq 2 from DW1 and update instance with strength 1. dw1_change.instanceHandle = instance_2; - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw1_change)); + ASSERT_TRUE(add_test_change(history, dw1_change, changes)); // Receives instance 1 with seq 1 from DW2 and update instance with strength 2. dw2_change.instanceHandle = instance_1; - ++dw2_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw2_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw2_change)); + ASSERT_TRUE(add_test_change(history, dw2_change, changes)); // Receives instance 1 with seq 3 from DW1 and update instance with strength 1. dw1_change.instanceHandle = instance_1; - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw1_change)); + ASSERT_FALSE(add_test_change(history, dw1_change, changes)); // Receives instance 2 with seq 4 from DW1 and update instance with strength 1. dw1_change.instanceHandle = instance_2; - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw1_change)); + ASSERT_TRUE(add_test_change(history, dw1_change, changes)); // Receives instance 2 with seq 1 from DW3 and update instance with strength 3. dw3_change.instanceHandle = instance_2; - ++dw3_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw3_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw3_change)); + ASSERT_TRUE(add_test_change(history, dw3_change, changes)); // Receives instance 1 with seq 5 from DW1 and update instance with strength 1. dw1_change.instanceHandle = instance_1; - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw1_change)); + ASSERT_FALSE(add_test_change(history, dw1_change, changes)); // Receives instance 2 with seq 6 from DW1 and update instance with strength 1. dw1_change.instanceHandle = instance_2; - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw1_change)); + ASSERT_FALSE(add_test_change(history, dw1_change, changes)); // Receives instance 3 with seq 2 from DW3 and update instance with strength 3. dw3_change.instanceHandle = instance_3; - ++dw3_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw3_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw3_change)); + ASSERT_TRUE(add_test_change(history, dw3_change, changes)); // Receives instance 3 with seq 2 from DW2 and update instance with strength 2. dw2_change.instanceHandle = instance_3; - ++dw2_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw2_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw2_change)); + ASSERT_FALSE(add_test_change(history, dw2_change, changes)); // Receives instance 3 with seq 3 from DW3 and update instance with strength 1. dw3_change.instanceHandle = instance_3; dw3_change.reader_info.writer_ownership_strength = 1; - ++dw3_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw3_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw3_change)); + ASSERT_TRUE(add_test_change(history, dw3_change, changes)); // Receives instance 3 with seq 3 from DW2 and update instance with strength 2. dw2_change.instanceHandle = instance_3; - ++dw2_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw2_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw2_change)); + ASSERT_TRUE(add_test_change(history, dw2_change, changes)); // Receives instance 1 with seq 7 from DW1 and update instance with strength 1. dw1_change.instanceHandle = instance_1; - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw1_change)); + ASSERT_FALSE(add_test_change(history, dw1_change, changes)); // Receives instance 2 with seq 8 from DW1 and update instance with strength 1. dw1_change.instanceHandle = instance_2; - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw1_change)); + ASSERT_FALSE(add_test_change(history, dw1_change, changes)); // Receives instance 3 with seq 9 from DW1 and update instance with strength 1. dw1_change.instanceHandle = instance_3; - ++dw1_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw1_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw1_change)); + ASSERT_FALSE(add_test_change(history, dw1_change, changes)); // Receives instance 1 with seq 4 from DW2 and update instance with strength 2. dw2_change.instanceHandle = instance_1; - ++dw2_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw2_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw2_change)); + ASSERT_TRUE(add_test_change(history, dw2_change, changes)); // Receives instance 2 with seq 5 from DW2 and update instance with strength 2. dw2_change.instanceHandle = instance_2; - ++dw2_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw2_change, 0)); - ASSERT_FALSE(history.update_instance_nts(&dw2_change)); + ASSERT_FALSE(add_test_change(history, dw2_change, changes)); // Receives instance 3 with seq 6 from DW2 and update instance with strength 2. dw2_change.instanceHandle = instance_3; - ++dw2_change.sequenceNumber; - ASSERT_TRUE(history.received_change(&dw2_change, 0)); - ASSERT_TRUE(history.update_instance_nts(&dw2_change)); + ASSERT_TRUE(add_test_change(history, dw2_change, changes)); ASSERT_EQ(18u, history.getHistorySize()); }