Skip to content

Commit

Permalink
Set DataSharing in Writer|ReaderProxyData (#4761)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
elianalf authored May 17, 2024
1 parent 39e8957 commit 904c523
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/cpp/fastdds/core/policy/QosPoliciesSerializer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -855,7 +855,7 @@ inline bool QosPoliciesSerializer<DataSharingQosPolicy>::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);
Expand Down
2 changes: 2 additions & 0 deletions src/cpp/rtps/builtin/data/ReaderProxyData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1078,6 +1078,7 @@ bool ReaderProxyData::readFromCDRMessage(
"Received with error.");
return false;
}

break;
}

Expand All @@ -1092,6 +1093,7 @@ bool ReaderProxyData::readFromCDRMessage(

uint32_t qos_size;
clear();
m_qos.data_sharing.off();
try
{
if (ParameterList::readParameterListfromCDRMsg(*msg, param_process, true, qos_size))
Expand Down
1 change: 1 addition & 0 deletions src/cpp/rtps/builtin/data/WriterProxyData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1075,6 +1075,7 @@ bool WriterProxyData::readFromCDRMessage(

uint32_t qos_size;
clear();
m_qos.data_sharing.off();
try
{
if (ParameterList::readParameterListfromCDRMsg(*msg, param_process, true, qos_size))
Expand Down
84 changes: 82 additions & 2 deletions test/unittest/rtps/builtin/BuiltinDataSerializationTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,86 @@ TEST(BuiltinDataSerializationTests, ok_with_defaults)
}
}

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<uint32_t>(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<uint32_t>(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<uint32_t>(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<uint32_t>(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)
Expand Down Expand Up @@ -641,15 +721,15 @@ TEST(BuiltinDataSerializationTests, other_vendor_parameter_list_with_custom_pids
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, DataSharingQosPolicy());
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, DataSharingQosPolicy());
ASSERT_EQ(reader_pdata.m_qos.data_sharing.kind(), OFF);

// CacheChange_t check
CacheChange_t change;
Expand Down

0 comments on commit 904c523

Please sign in to comment.