From fcd6e76e70edf14cca4e19d9c17327ace813a56c Mon Sep 17 00:00:00 2001 From: elianalf <62831776+elianalf@users.noreply.github.com> Date: Fri, 17 May 2024 13:55:36 +0200 Subject: [PATCH] Set DataSharing in Writer|ReaderProxyData (#4761) * Refs #20933: Set datasharing on when pid is found Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> * Refs #20933: Set datasharing off after the clear Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> * Refs #20933: Add tests Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> * Refs #20933: Fix other_vendor_parameter_list_with_custom_pids test Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> * Refs #20933: Change implementation to fix failing tests Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> * Refs #20933: Apply suggestions Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> --------- Signed-off-by: elianalf <62831776+elianalf@users.noreply.github.com> (cherry picked from commit 904c5230296cb64821b982419a870724b2ba12e8) # Conflicts: # test/unittest/rtps/builtin/BuiltinDataSerializationTests.cpp --- .../core/policy/QosPoliciesSerializer.hpp | 2 +- src/cpp/rtps/builtin/data/ReaderProxyData.cpp | 2 + src/cpp/rtps/builtin/data/WriterProxyData.cpp | 1 + .../builtin/BuiltinDataSerializationTests.cpp | 536 ++++++++++++++++++ 4 files changed, 540 insertions(+), 1 deletion(-) diff --git a/src/cpp/fastdds/core/policy/QosPoliciesSerializer.hpp b/src/cpp/fastdds/core/policy/QosPoliciesSerializer.hpp index f068979c50a..3c7830c253b 100644 --- a/src/cpp/fastdds/core/policy/QosPoliciesSerializer.hpp +++ b/src/cpp/fastdds/core/policy/QosPoliciesSerializer.hpp @@ -855,7 +855,7 @@ inline bool QosPoliciesSerializer::read_content_from_cdr_m uint32_t pos_ref = cdr_message->pos; // If the parameter is sent, the remote endpoint is datasharing compatible - qos_policy.automatic(); + qos_policy.on("."); uint32_t num_domains = 0; bool valid = fastrtps::rtps::CDRMessage::readUInt32(cdr_message, &num_domains); diff --git a/src/cpp/rtps/builtin/data/ReaderProxyData.cpp b/src/cpp/rtps/builtin/data/ReaderProxyData.cpp index 896e2a875f8..097e152b670 100644 --- a/src/cpp/rtps/builtin/data/ReaderProxyData.cpp +++ b/src/cpp/rtps/builtin/data/ReaderProxyData.cpp @@ -994,6 +994,7 @@ bool ReaderProxyData::readFromCDRMessage( "Received with error."); return false; } + break; } @@ -1008,6 +1009,7 @@ bool ReaderProxyData::readFromCDRMessage( uint32_t qos_size; clear(); + m_qos.data_sharing.off(); try { if (ParameterList::readParameterListfromCDRMsg(*msg, param_process, true, qos_size)) diff --git a/src/cpp/rtps/builtin/data/WriterProxyData.cpp b/src/cpp/rtps/builtin/data/WriterProxyData.cpp index ebef33e3cd1..edb7f6e7ba1 100644 --- a/src/cpp/rtps/builtin/data/WriterProxyData.cpp +++ b/src/cpp/rtps/builtin/data/WriterProxyData.cpp @@ -986,6 +986,7 @@ bool WriterProxyData::readFromCDRMessage( uint32_t qos_size; clear(); + m_qos.data_sharing.off(); try { if (ParameterList::readParameterListfromCDRMsg(*msg, param_process, true, qos_size)) diff --git a/test/unittest/rtps/builtin/BuiltinDataSerializationTests.cpp b/test/unittest/rtps/builtin/BuiltinDataSerializationTests.cpp index 930dbe2d03b..6efd6995b1d 100644 --- a/test/unittest/rtps/builtin/BuiltinDataSerializationTests.cpp +++ b/test/unittest/rtps/builtin/BuiltinDataSerializationTests.cpp @@ -129,8 +129,94 @@ TEST(BuiltinDataSerializationTests, ok_with_defaults) } } +<<<<<<< HEAD // Regression test for redmine issue #10547 TEST(BuiltinDataSerializationTests, ignore_unsupported_type_info) +======= +TEST(BuiltinDataSerializationTests, msg_without_datasharing) +{ + { + uint8_t data_r_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00 + }; + + CDRMessage_t msg(0); + msg.init(data_r_buffer, static_cast(sizeof(data_r_buffer))); + msg.length = msg.max_size; + + ReaderProxyData out(max_unicast_locators, max_multicast_locators); + out.readFromCDRMessage(&msg, network, false, true); + ASSERT_EQ(out.m_qos.data_sharing.kind(), OFF); + } + + { + uint8_t data_w_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00 + + }; + + CDRMessage_t msg(0); + msg.init(data_w_buffer, static_cast(sizeof(data_w_buffer))); + msg.length = msg.max_size; + + ReaderProxyData out(max_unicast_locators, max_multicast_locators); + out.readFromCDRMessage(&msg, network, false, true); + ASSERT_EQ(out.m_qos.data_sharing.kind(), OFF); + } +} + +TEST(BuiltinDataSerializationTests, msg_with_datasharing) +{ + { + uint8_t data_r_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00, + //Data Sharing + 0x06, 0x80, 0x0c, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x9b, 0xf9, 0xbe, 0x1c, 0xb8 + + }; + + CDRMessage_t msg(0); + msg.init(data_r_buffer, static_cast(sizeof(data_r_buffer))); + msg.length = msg.max_size; + + ReaderProxyData out(max_unicast_locators, max_multicast_locators); + out.readFromCDRMessage(&msg, network, false, true); + ASSERT_EQ(out.m_qos.data_sharing.kind(), ON); + } + + { + uint8_t data_w_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00, + //Data Sharing + 0x06, 0x80, 0x0c, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x9b, 0xf9, 0xbe, 0x1c, 0xb8 + + }; + + CDRMessage_t msg(0); + msg.init(data_w_buffer, static_cast(sizeof(data_w_buffer))); + msg.length = msg.max_size; + + ReaderProxyData out(max_unicast_locators, max_multicast_locators); + out.readFromCDRMessage(&msg, network, false, true); + ASSERT_EQ(out.m_qos.data_sharing.kind(), ON); + } +} + + +// Regression test for redmine issue #10547. +// Update against OpenDDS 3.27. With this version we can read the remote DATA(w). +TEST(BuiltinDataSerializationTests, interoperability_with_opendds_3_27) +>>>>>>> 904c52302 (Set DataSharing in Writer|ReaderProxyData (#4761)) { // DATA(w) { @@ -423,7 +509,457 @@ TEST(BuiltinDataSerializationTests, property_list_with_binary_properties) msg.length = msg.max_size; ParticipantProxyData out(RTPSParticipantAllocationAttributes{}); +<<<<<<< HEAD EXPECT_NO_THROW(EXPECT_TRUE(out.readFromCDRMessage(&msg, true, network, false))); +======= + EXPECT_NO_THROW(EXPECT_TRUE(out.readFromCDRMessage(&msg, true, network, false, true))); +} + +// Regression test for redmine tickets 20306 and 20307 +TEST(BuiltinDataSerializationTests, other_vendor_parameter_list_with_custom_pids) +{ + /* Convenient functions to group code */ + auto participant_read = [](octet* buffer, uint32_t buffer_length, ParticipantProxyData& out) -> void + { + CDRMessage_t msg(0); + msg.init(buffer, buffer_length); + msg.length = msg.max_size; + + EXPECT_NO_THROW(EXPECT_TRUE(out.readFromCDRMessage(&msg, true, network, false, false, + fastdds::rtps::VendorId_t({2, 0})))); + }; + + auto writer_read = [](octet* buffer, uint32_t buffer_length, WriterProxyData& out) -> void + { + CDRMessage_t msg(0); + msg.init(buffer, buffer_length); + msg.length = msg.max_size; + + EXPECT_NO_THROW(EXPECT_TRUE(out.readFromCDRMessage(&msg, network, false, false, + fastdds::rtps::VendorId_t({2, 0})))); + }; + + auto reader_read = [](octet* buffer, uint32_t buffer_length, ReaderProxyData& out) -> void + { + CDRMessage_t msg(0); + msg.init(buffer, buffer_length); + msg.length = msg.max_size; + + EXPECT_NO_THROW(EXPECT_TRUE(out.readFromCDRMessage(&msg, network, false, false, + fastdds::rtps::VendorId_t({2, 0})))); + }; + + auto update_cache_change = + [](CacheChange_t& change, octet* buffer, uint32_t buffer_length, uint32_t qos_size) -> void + { + CDRMessage_t msg(0); + msg.init(buffer, buffer_length); + msg.length = msg.max_size; + + EXPECT_TRUE(fastdds::dds::ParameterList::updateCacheChangeFromInlineQos(change, &msg, qos_size)); + }; + + /* Custom PID tests */ + + // PID_PERSISTENCE_GUID + { + octet data_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00, + // PID_PERSISTENCE_GUID + 0x02, 0x80, 8, 0, + 1, 2, 3, 4, 5, 6, 7, 8, + // PID_SENTINEL + 0x01, 0, 0, 0 + }; + + uint32_t buffer_length = static_cast(sizeof(data_buffer)); + + // ParticipantProxyData check + ParticipantProxyData participant_pdata(RTPSParticipantAllocationAttributes{}); + participant_pdata.set_persistence_guid(c_Guid_Unknown); + participant_read(data_buffer, buffer_length, participant_pdata); + ASSERT_EQ(participant_pdata.get_persistence_guid(), c_Guid_Unknown); + + // WriterProxyData check + WriterProxyData writer_pdata(max_unicast_locators, max_multicast_locators); + writer_pdata.persistence_guid(c_Guid_Unknown); + writer_read(data_buffer, buffer_length, writer_pdata); + ASSERT_EQ(writer_pdata.persistence_guid(), c_Guid_Unknown); + + // ReaderProxyData check + ReaderProxyData reader_pdata(max_unicast_locators, max_multicast_locators); + reader_read(data_buffer, buffer_length, reader_pdata); + + // CacheChange_t check + CacheChange_t change; + update_cache_change(change, data_buffer, buffer_length, 0); + } + + // PID_CUSTOM_RELATED_SAMPLE_IDENTITY + { + octet data_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00, + // PID_CUSTOM_RELATED_SAMPLE_IDENTITY + 0x0f, 0x80, 8, 0, + 1, 2, 3, 4, 5, 6, 7, 8, + // PID_SENTINEL + 0x01, 0, 0, 0 + }; + + uint32_t buffer_length = static_cast(sizeof(data_buffer)); + + // ParticipantProxyData check + ParticipantProxyData participant_pdata(RTPSParticipantAllocationAttributes{}); + participant_read(data_buffer, buffer_length, participant_pdata); + + // WriterProxyData check + WriterProxyData writer_pdata(max_unicast_locators, max_multicast_locators); + writer_read(data_buffer, buffer_length, writer_pdata); + + // ReaderProxyData check + ReaderProxyData reader_pdata(max_unicast_locators, max_multicast_locators); + reader_read(data_buffer, buffer_length, reader_pdata); + + // CacheChange_t check + CacheChange_t change; + GuidPrefix_t prefix; + prefix.value[0] = 1; + change.write_params.related_sample_identity().writer_guid(GUID_t(prefix, 1)); + change.write_params.sample_identity().sequence_number() = {2, 0}; + update_cache_change(change, data_buffer, buffer_length, 0); + ASSERT_EQ(change.write_params.related_sample_identity().writer_guid(), GUID_t(prefix, 1)); + ASSERT_EQ(change.write_params.sample_identity().sequence_number(), SequenceNumber_t(2, 0)); + } + + // PID_DISABLE_POSITIVE_ACKS + { + octet data_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00, + // PID_DISABLE_POSITIVE_ACKS + 0x05, 0x80, 8, 0, + 1, 2, 3, 4, 5, 6, 7, 8, + // PID_SENTINEL + 0x01, 0, 0, 0 + }; + + uint32_t buffer_length = static_cast(sizeof(data_buffer)); + + // ParticipantProxyData check + ParticipantProxyData participant_pdata(RTPSParticipantAllocationAttributes{}); + participant_read(data_buffer, buffer_length, participant_pdata); + + // WriterProxyData check + WriterProxyData writer_pdata(max_unicast_locators, max_multicast_locators); + writer_pdata.m_qos.m_disablePositiveACKs.enabled = false; + writer_read(data_buffer, buffer_length, writer_pdata); + ASSERT_EQ(writer_pdata.m_qos.m_disablePositiveACKs.enabled, false); + + // ReaderProxyData check + ReaderProxyData reader_pdata(max_unicast_locators, max_multicast_locators); + reader_pdata.m_qos.m_disablePositiveACKs.enabled = false; + reader_read(data_buffer, buffer_length, reader_pdata); + ASSERT_EQ(reader_pdata.m_qos.m_disablePositiveACKs.enabled, false); + + // CacheChange_t check + CacheChange_t change; + update_cache_change(change, data_buffer, buffer_length, 0); + } + + // PID_DATASHARING + { + octet data_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00, + // PID_DATASHARING + 0x06, 0x80, 8, 0, + 1, 2, 3, 4, 5, 6, 7, 8, + // PID_SENTINEL + 0x01, 0, 0, 0 + }; + + uint32_t buffer_length = static_cast(sizeof(data_buffer)); + + // ParticipantProxyData check + ParticipantProxyData participant_pdata(RTPSParticipantAllocationAttributes{}); + participant_read(data_buffer, buffer_length, participant_pdata); + + // WriterProxyData check + WriterProxyData writer_pdata(max_unicast_locators, max_multicast_locators); + writer_pdata.m_qos.data_sharing.off(); + writer_pdata.m_qos.data_sharing.set_max_domains(0); + writer_read(data_buffer, buffer_length, writer_pdata); + ASSERT_EQ(writer_pdata.m_qos.data_sharing.kind(), OFF); + + // ReaderProxyData check + ReaderProxyData reader_pdata(max_unicast_locators, max_multicast_locators); + reader_pdata.m_qos.data_sharing.off(); + reader_pdata.m_qos.data_sharing.set_max_domains(0); + reader_pdata.m_qos.m_disablePositiveACKs.enabled = false; + reader_read(data_buffer, buffer_length, reader_pdata); + ASSERT_EQ(reader_pdata.m_qos.data_sharing.kind(), OFF); + + // CacheChange_t check + CacheChange_t change; + update_cache_change(change, data_buffer, buffer_length, 0); + } + + // PID_NETWORK_CONFIGURATION_SET + { + octet data_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00, + // PID_NETWORK_CONFIGURATION_SET + 0x07, 0x80, 8, 0, + 1, 2, 3, 4, 5, 6, 7, 8, + // PID_SENTINEL + 0x01, 0, 0, 0 + }; + + uint32_t buffer_length = static_cast(sizeof(data_buffer)); + + // ParticipantProxyData check + ParticipantProxyData participant_pdata(RTPSParticipantAllocationAttributes{}); + participant_pdata.m_networkConfiguration = 0; + participant_read(data_buffer, buffer_length, participant_pdata); + ASSERT_EQ(participant_pdata.m_networkConfiguration, 0u); + + // WriterProxyData check + WriterProxyData writer_pdata(max_unicast_locators, max_multicast_locators); + writer_pdata.networkConfiguration(0); + writer_read(data_buffer, buffer_length, writer_pdata); + ASSERT_EQ(writer_pdata.networkConfiguration(), 0u); + + // ReaderProxyData check + ReaderProxyData reader_pdata(max_unicast_locators, max_multicast_locators); + reader_pdata.networkConfiguration(0); + reader_read(data_buffer, buffer_length, reader_pdata); + ASSERT_EQ(reader_pdata.networkConfiguration(), 0u); + + // CacheChange_t check + CacheChange_t change; + update_cache_change(change, data_buffer, buffer_length, 0); + } +} + +// Check interoperability of compatible custom PIDs when vendor ID is RTI Connext +TEST(BuiltinDataSerializationTests, rti_parameter_list_with_custom_pids) +{ + /* Convenient functions to group code */ + auto participant_read = [](octet* buffer, uint32_t buffer_length, ParticipantProxyData& out) -> void + { + CDRMessage_t msg(0); + msg.init(buffer, buffer_length); + msg.length = msg.max_size; + + EXPECT_NO_THROW(EXPECT_TRUE(out.readFromCDRMessage(&msg, true, network, false, false, + fastdds::rtps::c_VendorId_rti_connext))); + }; + + auto writer_read = [](octet* buffer, uint32_t buffer_length, WriterProxyData& out) -> void + { + CDRMessage_t msg(0); + msg.init(buffer, buffer_length); + msg.length = msg.max_size; + + EXPECT_NO_THROW(EXPECT_TRUE(out.readFromCDRMessage(&msg, network, false, false, + fastdds::rtps::c_VendorId_rti_connext))); + }; + + auto reader_read = [](octet* buffer, uint32_t buffer_length, ReaderProxyData& out) -> void + { + CDRMessage_t msg(0); + msg.init(buffer, buffer_length); + msg.length = msg.max_size; + + EXPECT_NO_THROW(EXPECT_TRUE(out.readFromCDRMessage(&msg, network, false, false, + fastdds::rtps::c_VendorId_rti_connext))); + }; + + auto update_cache_change = + [](CacheChange_t& change, octet* buffer, uint32_t buffer_length, uint32_t qos_size) -> void + { + CDRMessage_t msg(0); + msg.init(buffer, buffer_length); + msg.length = msg.max_size; + + EXPECT_TRUE(fastdds::dds::ParameterList::updateCacheChangeFromInlineQos(change, &msg, qos_size)); + }; + + /* Custom PID tests */ + + // PID_PERSISTENCE_GUID + { + octet data_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00, + // PID_PERSISTENCE_GUID + 0x02, 0x80, 16, 0, + 0x52, 0x54, 0x49, 0x5F, 0x47, 0x55, 0x49, 0x44, 0x5F, 0x54, 0x45, 0x53, 0x54, 0x50, 0x49, 0x44, + // PID_SENTINEL + 0x01, 0, 0, 0 + }; + + uint32_t buffer_length = static_cast(sizeof(data_buffer)); + + // Define guid for checking the read data + GuidPrefix_t prefix; + prefix.value[0] = 0x52; + prefix.value[1] = 0x54; + prefix.value[2] = 0x49; + prefix.value[3] = 0x5F; + prefix.value[4] = 0x47; + prefix.value[5] = 0x55; + prefix.value[6] = 0x49; + prefix.value[7] = 0x44; + prefix.value[8] = 0x5F; + prefix.value[9] = 0x54; + prefix.value[10] = 0x45; + prefix.value[11] = 0x53; + + EntityId_t entity_id; + entity_id.value[0] = 0x54; + entity_id.value[1] = 0x50; + entity_id.value[2] = 0x49; + entity_id.value[3] = 0x44; + + GUID_t guid(prefix, entity_id); + + // ParticipantProxyData check + ParticipantProxyData participant_pdata(RTPSParticipantAllocationAttributes{}); + participant_pdata.set_persistence_guid(c_Guid_Unknown); + participant_read(data_buffer, buffer_length, participant_pdata); + + ASSERT_EQ(participant_pdata.get_persistence_guid(), c_Guid_Unknown); + + // WriterProxyData check + WriterProxyData writer_pdata(max_unicast_locators, max_multicast_locators); + writer_pdata.persistence_guid(c_Guid_Unknown); + writer_read(data_buffer, buffer_length, writer_pdata); + ASSERT_EQ(writer_pdata.persistence_guid(), guid); + + // ReaderProxyData check + ReaderProxyData reader_pdata(max_unicast_locators, max_multicast_locators); + reader_read(data_buffer, buffer_length, reader_pdata); + + // CacheChange_t check + CacheChange_t change; + update_cache_change(change, data_buffer, buffer_length, 0); + } + + // PID_CUSTOM_RELATED_SAMPLE_IDENTITY + { + octet data_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00, + // PID_CUSTOM_RELATED_SAMPLE_IDENTITY + 0x0f, 0x80, 24, 0, + // Writer guid + 0x52, 0x54, 0x49, 0x5F, 0x47, 0x55, 0x49, 0x44, 0x5F, 0x54, 0x45, 0x53, 0x54, 0x50, 0x49, 0x44, + // Sequence number high + 0x00, 0x00, 0x00, 0x00, + // Sequence number low + 0x05, 0x00, 0x00, 0x00, + // PID_SENTINEL + 0x01, 0, 0, 0 + }; + + uint32_t buffer_length = static_cast(sizeof(data_buffer)); + + // Define sample identity for checking the read data + GuidPrefix_t prefix; + prefix.value[0] = 0x52; + prefix.value[1] = 0x54; + prefix.value[2] = 0x49; + prefix.value[3] = 0x5F; + prefix.value[4] = 0x47; + prefix.value[5] = 0x55; + prefix.value[6] = 0x49; + prefix.value[7] = 0x44; + prefix.value[8] = 0x5F; + prefix.value[9] = 0x54; + prefix.value[10] = 0x45; + prefix.value[11] = 0x53; + + EntityId_t entity_id; + entity_id.value[0] = 0x54; + entity_id.value[1] = 0x50; + entity_id.value[2] = 0x49; + entity_id.value[3] = 0x44; + + GUID_t guid(prefix, entity_id); + + SequenceNumber_t sn = {0, 5}; + + // ParticipantProxyData check + ParticipantProxyData participant_pdata(RTPSParticipantAllocationAttributes{}); + participant_read(data_buffer, buffer_length, participant_pdata); + + // WriterProxyData check + WriterProxyData writer_pdata(max_unicast_locators, max_multicast_locators); + writer_read(data_buffer, buffer_length, writer_pdata); + + // ReaderProxyData check + ReaderProxyData reader_pdata(max_unicast_locators, max_multicast_locators); + reader_read(data_buffer, buffer_length, reader_pdata); + + // CacheChange_t check + CacheChange_t change; + change.vendor_id = fastdds::rtps::c_VendorId_rti_connext; + GuidPrefix_t init_prefix; + prefix.value[0] = 1; + change.write_params.sample_identity().writer_guid(GUID_t(init_prefix, 1)); + change.write_params.sample_identity().sequence_number() = {2, 0}; + update_cache_change(change, data_buffer, buffer_length, 0); + ASSERT_EQ(change.write_params.sample_identity().writer_guid(), guid); + ASSERT_EQ(change.write_params.sample_identity().sequence_number(), sn); + } + + // PID_DISABLE_POSITIVE_ACKS + { + octet data_buffer[] = + { + // Encapsulation + 0x00, 0x03, 0x00, 0x00, + // PID_DISABLE_POSITIVE_ACKS + 0x05, 0x80, 4, 0, + 1, 0, 0, 0, + // PID_SENTINEL + 0x01, 0, 0, 0 + }; + + uint32_t buffer_length = static_cast(sizeof(data_buffer)); + + // ParticipantProxyData check + ParticipantProxyData participant_pdata(RTPSParticipantAllocationAttributes{}); + participant_read(data_buffer, buffer_length, participant_pdata); + + // WriterProxyData check + WriterProxyData writer_pdata(max_unicast_locators, max_multicast_locators); + writer_pdata.m_qos.m_disablePositiveACKs.enabled = false; + writer_read(data_buffer, buffer_length, writer_pdata); + ASSERT_EQ(writer_pdata.m_qos.m_disablePositiveACKs.enabled, true); + + // ReaderProxyData check + ReaderProxyData reader_pdata(max_unicast_locators, max_multicast_locators); + reader_pdata.m_qos.m_disablePositiveACKs.enabled = false; + reader_read(data_buffer, buffer_length, reader_pdata); + ASSERT_EQ(reader_pdata.m_qos.m_disablePositiveACKs.enabled, true); + + // CacheChange_t check + CacheChange_t change; + update_cache_change(change, data_buffer, buffer_length, 0); + } +>>>>>>> 904c52302 (Set DataSharing in Writer|ReaderProxyData (#4761)) } /*!