Skip to content

Commit ca395ab

Browse files
authored
C port updated, RocketSoftware CLI + Cyclone (#81)
* Copied files from C_port onto the updated dds-rtps, modified log_message, updated C Port to match updates to dds-rtps * Test reliability fixes by adding the apropriate python string literal prefix to regex, fixed code not finding the name for cyclonedds topics * __FUNCTION__ was working fine, forgot to put it back * Added -z 0 to Reliability_4 to make sure all samples are unique Adde timeout to the samples_sent queue since a sufficiently fast dds's subscriber would return a sample to pexpect before the queue receives a sample from dds's publisher leading to an empty queue issue where it isn't supposed to happen * Setting durability_service for cycloneDDS allows for TRANSIENT_LOCAL QoS to function properly fixing Test_Durability_17 * Added Rocket Software CLA * Implemented missing features from master * Catch up with master * Use take_next_instance instead of take_next Implemented the array of previous_instances Swapped the take_next function to the take_next_instance function Moved Return Loan to a more reasonable location dds_take(_next_instance) returns 0(DDS_RETCODE_OK) instead of DDS_RETCODE_NO_DATA which made the loop never exit, it should be fixed now * typo * Removed unnecesary dispose Also added j > 0 check * Added consideration for additional QoS setting required by CycloneDDS * Typo fix * Add cyclonedds to run_interoperability_tests.yml
1 parent f872030 commit ca395ab

13 files changed

Lines changed: 2007 additions & 24 deletions

.github/workflows/1_run_interoperability_tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ on:
66
publishers:
77
description: Publishers to use
88
type: string
9-
default: '["connext_dds","dust_dds","eprosima_fastdds","intercom_dds","opendds","toc_coredx_dds"]'
9+
default: '["connext_dds","dust_dds","eprosima_fastdds","intercom_dds","opendds","toc_coredx_dds","eclipse_cyclone"]'
1010
subscribers:
1111
description: Subscribers to use
1212
type: string
13-
default: '["connext_dds","dust_dds","eprosima_fastdds","intercom_dds","opendds","toc_coredx_dds"]'
13+
default: '["connext_dds","dust_dds","eprosima_fastdds","intercom_dds","opendds","toc_coredx_dds","eclipse_cyclone"]'
1414
jobs:
1515
generate_timestamp:
1616
runs-on: ubuntu-latest

CLA/CLA_Rocket_Software.md

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# OMG DDS INTEROPERABILITY REPOSITORY - CONTRIBUTOR LICENSE AGREEMENT
2+
3+
**This Contributor License Agreement ("Agreement") specifies the terms under which the individual or corporate entity specified in the signature block below (“You”) agree to make intellectual property contributions to the OMG DDS Interoperability Repository. BY SIGNING BELOW YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS AGREEMENT. If You are signing this Agreement in Your capacity as an employee, THEN YOUR EMPLOYER AND YOU ARE BOTH BOUND BY THIS AGREEMENT.**
4+
5+
1. Definitions
6+
7+
1. "OMG DDS Interoperability Repository" (or “Repository”) means the Git repository [https://github.com/omg-dds/dds-rtps](https://github.com/omg-dds/dds-rtps).
8+
9+
2. "Moderator" means an entity or individual responsible for authorizing changes to the Repository.
10+
11+
3. "Submit" (or “Submitted”) means any submission, including source code, binaries, code, pull requests, issue reports, comments, etc., made to the Moderators for inclusion in the Repository either through the Git repository interface or through electronic file transfer.
12+
13+
4. A "Contribution" is any original work of authorship, including any modifications or additions to an existing work, that You Submit to the DDS Interoperability Repository.
14+
15+
5. A "User" is anyone who accesses the Repository.
16+
17+
2. Allowable Contribution Representations
18+
19+
1. You represent that You have the necessary rights to the Contribution(s) to meet the obligations of this Agreement. If You are employed, Your employer has authorized Contribution(s) under this Agreement.
20+
21+
2. You represent that you have no knowledge of third-party intellectual property rights that are likely to be infringed by the Contribution(s). You represent that you have no knowledge that such infringement or any allegation of misappropriation of intellectual property rights is likely to be claimed or has already been claimed.
22+
23+
3. License
24+
25+
You grant Moderators a perpetual, worldwide, non-exclusive, assignable, paid-up license to publish, display, and redistribute the Contribution as part of the Repository. You also license to Moderators under the same terms any other intellectual property rights required to publish, display, and redistribute the Contributions as part of the Repository. You further grant all Users of the Repository a license to the Contribution under the terms of the [OMG DDS Interoperability Testing License](../LICENSE.md) included in the Repository. Moderators are under no obligation to publish Contributions.
26+
27+
4. No Warranty, Consequential Damages. Limited Liability
28+
29+
Other than explicitly stated herein, You provide the Contribution(s) "as is" with no warranty nor claims of fitness to any purpose. Neither party shall be liable for consequential or special damages of any kind. Other than for breach of warranty or representations herein, the liability of either party to the other shall be limited to $1000.
30+
31+
5. General
32+
33+
1. If You are an agency of the United States Government, then this Agreement will be governed by the United States federal common law. Otherwise, this Agreement will be governed by the laws of the State of California except with regard to its choice of law rules.
34+
35+
2. A party may assign this Agreement to an entity acquiring essentially all of the party’s relevant business.
36+
37+
6. Electronic Signatures
38+
39+
"Electronic Signature" means any electronic sound, symbol, or process attached to or logically associated with a record and executed and adopted by a party with the intent to sign such record.
40+
41+
Each party agrees that the Electronic Signatures, whether digital or encrypted, of the parties included in this Agreement are intended to authenticate this writing and to have the same force and effect as manual signatures.
42+
43+
44+
IN WITNESS WHEREOF, You, intending to be legally bound, have executed this Agreement or caused Your employer’s proper and duly authorized officer to execute and deliver this Agreement, for good and valuable consideration, the sufficiency of which is hereby acknowledged, as of the day and year first written below.
45+
46+
**For:**
47+
48+
Entity Name: Rocket Software
49+
50+
Address: 77 4th Avenue, Waltham, MA 02451, USA
51+
52+
("**You**")
53+
54+
**By:**
55+
56+
Name: Puneet Kohli
57+
58+
Title: President, Application Modernization
59+
60+
Date: March 20, 2026
61+

doc/test_description.template.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,8 @@ product versions.
102102

103103
* Content Filtered Topic disabled
104104

105+
* **CycloneDDS**:
106+
107+
* Durability Service QoS requires explicit setting when History Depth is set
108+
105109
|TEST_DESCRIPTION|

generate_xlsx_report.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ def get_company_name(product:str) -> str:
7979
return 'eProsima'
8080
elif 'dust' in product.lower():
8181
return 'S2E Software Systems'
82+
elif 'cyclone' in product.lower():
83+
return 'Eclipse Foundation'
8284
else:
8385
raise RuntimeError('Impossible to get company name: ' + product)
8486

@@ -100,6 +102,8 @@ def get_product_name(product:str) -> str:
100102
return 'FastDDS ' + re.search(r'([\d.]+)', product).group(1)
101103
elif 'dust_dds' in product.lower():
102104
return 'Dust DDS ' + re.search(r'([\d.]+)', product).group(1)
105+
elif 'cyclone' in product.lower():
106+
return 'Cyclone DDS'
103107
else:
104108
raise RuntimeError('Impossible to get product name: ' + product)
105109

interoperability_report.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,9 @@ def run_publisher_shape_main(
374374
# Therefore, that sample is added to samples_sent.
375375
pub_string = re.search(r'[0-9]+ [0-9]+ \[[0-9]+\]',
376376
child_pub.before + child_pub.after)
377+
if not pub_string:
378+
produced_code[produced_code_index] = ReturnCode.DATA_NOT_CORRECT
379+
break
377380
last_sample = pub_string.group(0)
378381
samples_sent.put(last_sample)
379382
index = child_pub.expect([

rtps_test_utilities.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def no_check(child_sub, samples_sent, last_sample_saved, timeout):
6363

6464
def basic_check(child_sub, samples_sent, last_sample_saved, timeout):
6565
""" Only checks that the data is well formed and size is not zero."""
66-
sub_string = re.search('\w\s+\w+\s+[0-9]+ [0-9]+ \[([0-9]+)\]',
66+
sub_string = re.search(r'\w\s+\w+\s+[0-9]+ [0-9]+ \[([0-9]+)\]',
6767
child_sub.before + child_sub.after)
6868

6969
if sub_string is None:
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
cmake_minimum_required(VERSION 3.16)
2+
project(shape LANGUAGES C)
3+
4+
# Find the CycloneDDS package.
5+
find_package(CycloneDDS REQUIRED)
6+
set(EXECUTABLE_NAME "eclipse_cyclone-${CycloneDDS_VERSION}_shape_main_linux")
7+
idlc_generate(TARGET shape_lib FILES "../shape.idl" WARNINGS no-implicit-extensibility)
8+
9+
add_executable(${EXECUTABLE_NAME} ../shape_main.c)
10+
11+
target_compile_definitions(${EXECUTABLE_NAME} PUBLIC -DCYCLONE_DDS)
12+
13+
target_link_libraries(${EXECUTABLE_NAME} shape_lib CycloneDDS::ddsc m)

srcC/shape.idl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
@appendable
2+
struct ShapeType {
3+
@key
4+
string<128> color;
5+
int32 x;
6+
int32 y;
7+
int32 shapesize;
8+
sequence<uint8> additional_payload_size;
9+
};

srcC/shape_bounded.idl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
@appendable
2+
struct ShapeType {
3+
@key
4+
string<128> color;
5+
long x;
6+
long y;
7+
long shapesize;
8+
sequence<uint8, 100000> additional_payload_size;
9+
};
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#ifndef _SHAPE_CONFIG_CYCLONE_
2+
#define _SHAPE_CONFIG_CYCLONE_
3+
4+
#include "shape.h"
5+
#include "dds/dds.h"
6+
#include <string.h>
7+
#include <dds/ddsc/dds_public_qosdefs.h>
8+
#include <dds/ddsc/dds_public_status.h>
9+
#include <dds/ddsc/dds_public_qosdefs.h>
10+
#include <dds/ddsrt/time.h>
11+
#include <stddef.h>
12+
#include <stdint.h>
13+
14+
const char* get_qos_policy_name(uint32_t last_policy_id) {
15+
16+
switch (last_policy_id) {
17+
case DDS_INVALID_QOS_POLICY_ID: return "INVALID";
18+
case DDS_USERDATA_QOS_POLICY_ID: return "USERDATA";
19+
case DDS_DURABILITY_QOS_POLICY_ID: return "DURABILITY";
20+
case DDS_PRESENTATION_QOS_POLICY_ID: return "PRESENTATION";
21+
case DDS_DEADLINE_QOS_POLICY_ID: return "DEADLINE";
22+
case DDS_LATENCYBUDGET_QOS_POLICY_ID: return "LATENCYBUDGET";
23+
case DDS_OWNERSHIP_QOS_POLICY_ID: return "OWNERSHIP";
24+
case DDS_OWNERSHIPSTRENGTH_QOS_POLICY_ID: return "OWNERSHIPSTRENGTH";
25+
case DDS_LIVELINESS_QOS_POLICY_ID: return "LIVELINESS";
26+
case DDS_TIMEBASEDFILTER_QOS_POLICY_ID: return "TIMEBASEDFILTER";
27+
case DDS_PARTITION_QOS_POLICY_ID: return "PARTITION";
28+
case DDS_RELIABILITY_QOS_POLICY_ID: return "RELIABILITY";
29+
case DDS_DESTINATIONORDER_QOS_POLICY_ID: return "DESTINATIONORDER";
30+
case DDS_HISTORY_QOS_POLICY_ID: return "HISTORY";
31+
case DDS_RESOURCELIMITS_QOS_POLICY_ID: return "RESOURCELIMITS";
32+
case DDS_ENTITYFACTORY_QOS_POLICY_ID: return "ENTITYFACTORY";
33+
case DDS_WRITERDATALIFECYCLE_QOS_POLICY_ID: return "WRITERDATALIFECYCLE";
34+
case DDS_READERDATALIFECYCLE_QOS_POLICY_ID: return "READERDATALIFECYCLE";
35+
case DDS_TOPICDATA_QOS_POLICY_ID: return "TOPICDATA";
36+
case DDS_GROUPDATA_QOS_POLICY_ID: return "GROUPDATA";
37+
case DDS_TRANSPORTPRIORITY_QOS_POLICY_ID: return "TRANSPORTPRIORITY";
38+
case DDS_LIFESPAN_QOS_POLICY_ID: return "LIFESPAN";
39+
case DDS_DURABILITYSERVICE_QOS_POLICY_ID: return "DURABILITYSERVICE";
40+
case DDS_PROPERTY_QOS_POLICY_ID: return "PROPERTY";
41+
case DDS_TYPE_CONSISTENCY_ENFORCEMENT_QOS_POLICY_ID: return "TYPE_CONSISTENCY_ENFORCEMENT";
42+
case DDS_DATA_REPRESENTATION_QOS_POLICY_ID: return "DATAREPRESENTATION";
43+
default:
44+
return 0;
45+
}
46+
}
47+
48+
#endif
49+
50+

0 commit comments

Comments
 (0)