From b45bf001b4e16a0c6e41aef2133116150e612300 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Thu, 28 Jul 2022 11:48:26 -0700 Subject: [PATCH 01/36] preliminary c ts impl for service introspection msg gen Signed-off-by: Brian Chen --- .../resource/msg__type_support.cpp.em | 1 + .../resource/srv__type_support.cpp.em | 67 +++++++++++++++++-- 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/rosidl_typesupport_c/resource/msg__type_support.cpp.em b/rosidl_typesupport_c/resource/msg__type_support.cpp.em index 6e1e7844..5a982313 100644 --- a/rosidl_typesupport_c/resource/msg__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/msg__type_support.cpp.em @@ -10,6 +10,7 @@ header_files = [ 'rosidl_runtime_c/message_type_support_struct.h', include_base + '__struct.h', include_base + '__type_support.h', + include_base + '__functions.h', ] if len(type_supports) != 1: header_files += [ diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index c0303ff4..24182be0 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -15,6 +15,14 @@ TEMPLATE( type_supports=type_supports) }@ +@{ +TEMPLATE( + 'msg__type_support.cpp.em', + package_name=package_name, interface_path=interface_path, + message=service.event_message, include_directives=include_directives, + type_supports=type_supports) +}@ + @{ from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ @@ -33,6 +41,9 @@ if len(type_supports) != 1: 'rosidl_typesupport_c/type_support_map.h', ] header_files.append('rosidl_typesupport_interface/macros.h') +header_files.append('service_msgs/msg/service_event_info.h') +header_files.append('builtin_interfaces/msg/time.h') +header_files.append('unique_identifier_msgs/msg/uuid.h') }@ @[for header_file in header_files]@ @[ if header_file in include_directives]@ @@ -53,7 +64,6 @@ namespace @(ns) namespace rosidl_typesupport_c { - typedef struct _@(service.namespaced_type.name)_type_support_ids_t { const char * typesupport_identifier[@(len(type_supports))]; @@ -105,12 +115,61 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup &_@(service.namespaced_type.name)_service_typesupport_data.data[0], }; + +@{event_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Event'}@ +@{request_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Request'}@ +@{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Response'}@ + +// This is generated by a macro in other cases in this file +void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__create ( + const rosidl_service_introspection_info_t * info, + void * request_message, + void * response_message +) { + + @event_type * event_message = @(event_type)__create(); + service_msgs__msg__ServiceEventInfo * service_info = service_msgs__msg__ServiceEventInfo__create(); + service_info->event_type = info->event_type; + service_info->sequence_number = info->sequence_number; + service_info->stamp.sec = info->stamp_sec; + service_info->stamp.nanosec = info->stamp_nanosec; + for (size_t i = 0; i < 16; ++i) { + service_info->client_id.uuid[i] = info->client_id[i]; + } + service_msgs__msg__ServiceEventInfo__copy(service_info, &event_message->info); + if (NULL == request_message) { + @(response_type)__Sequence__extendn(&event_message->response, 1); + @(response_type)__copy( (@response_type *) response_message, &event_message->response.data[0]); + } + else { + @(request_type)__Sequence__extendn(&event_message->request, 1); + @(request_type)__copy( (@request_type *) request_message, &event_message->request.data[0]); + } + + service_msgs__msg__ServiceEventInfo__fini(service_info); + + return event_message; + } + +void rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__fini ( + void * event_message +) +{ + @(event_type)__fini((@event_type *) event_message); +} + + static const rosidl_service_type_support_t @(service.namespaced_type.name)_service_type_support_handle = { - rosidl_typesupport_c__typesupport_identifier, - reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), - rosidl_typesupport_c__get_service_typesupport_handle_function, + .typesupport_identifier = rosidl_typesupport_c__typesupport_identifier, + .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), + .func = rosidl_typesupport_c__get_service_typesupport_handle_function, + .introspection_message_create_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__create, + .introspection_message_fini_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__fini, + .event_typesupport = &@(service.namespaced_type.name)_Event_message_type_support_handle }; + + } // namespace rosidl_typesupport_c @[ for ns in reversed(service.namespaced_type.namespaces)]@ From 0e9197e0a1ef2fa83df94cbea7b981c248a945d5 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Thu, 28 Jul 2022 11:48:36 -0700 Subject: [PATCH 02/36] preliminary cpp ts impl for service introspection msg gen Signed-off-by: Brian Chen --- .../resource/srv__type_support.cpp.em | 72 +++++++++++++++++-- 1 file changed, 68 insertions(+), 4 deletions(-) diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index 26242ccd..170abb93 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -1,4 +1,11 @@ @# Included from rosidl_typesupport_cpp/resource/idl__type_support.cpp.em +#include "rosidl_runtime_c/service_type_support_struct.h" +@[def dbg_print(p)] +@{ import sys} +@{ print('-------------TEMPLATE DBG---------------', file=sys.stderr);} +@{ print(str(p), file=sys.stderr);} +@{ print('-------------TEMPLATE DBG END--------------', file=sys.stderr);} +@[end def] @{ TEMPLATE( 'msg__type_support.cpp.em', @@ -76,7 +83,6 @@ typedef struct _@(service.namespaced_type.name)_type_support_symbol_names_t { const char * symbol_name[@(len(type_supports))]; } _@(service.namespaced_type.name)_type_support_symbol_names_t; - #define STRINGIFY_(s) #s #define STRINGIFY(s) STRINGIFY_(s) @@ -109,12 +115,66 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup &_@(service.namespaced_type.name)_service_typesupport_data.data[0], }; + + +#ifdef __cplusplus +extern "C" +{ +#endif + +// todo: this needs to be templated probably +#ifndef SRV_INTRO_INIT +#define SRV_INTRO_INIT + + +void * +rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_create +( + const rosidl_service_introspection_info_t * info, // include the rosidl_runtime file + void * request_message, + void * response_message) +{ + auto event_msg = std::make_shared<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Event>(); // shared_ptr in extern C? + auto info_msg = std::make_shared(); + auto time_msg = builtin_interfaces::msg::Time(); + + time_msg.sec = info->stamp_sec; + time_msg.nanosec = info->stamp_nanosec; + info_msg->set__stamp(time_msg); + + info_msg->set__event_type(info->event_type); + event_msg->info.set__sequence_number(info->sequence_number); + + std::array client_id; + std::move(std::begin(info->client_id), std::end(info->client_id), client_id.begin()); + info_msg->client_id.set__uuid(client_id); + + if (nullptr == request_message) { + event_msg->response.push_back(*reinterpret_cast<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Response *> (response_message)); + } else if (nullptr == response_message) { + event_msg->request.push_back(*reinterpret_cast<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Request *> (request_message)); } else { // raise an error here + } + + return event_msg.get(); +} + static const rosidl_service_type_support_t @(service.namespaced_type.name)_service_type_support_handle = { - ::rosidl_typesupport_cpp::typesupport_identifier, - reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), - ::rosidl_typesupport_cpp::get_service_typesupport_handle_function, + .typesupport_identifier = ::rosidl_typesupport_cpp::typesupport_identifier, + .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), + .func = ::rosidl_typesupport_cpp::get_service_typesupport_handle_function, + .introspection_message_create_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_create, + .introspection_message_fini_handle = +[](void* message){}, + .event_typesupport = ::rosidl_typesupport_cpp::get_message_type_support_handle<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Event>(), }; +#ifdef __cplusplus +} +#endif + +#endif + + + } // namespace rosidl_typesupport_cpp @[ for ns in reversed(service.namespaced_type.namespaces)]@ @@ -152,4 +212,8 @@ get_service_type_support_handle<@('::'.join([package_name] + list(interface_path @[end if]@ } + + + + } // namespace rosidl_typesupport_cpp From 5a47f94bc9affb2b945ce3adb6d63a0cb74bb7b1 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Mon, 8 Aug 2022 11:12:57 -0700 Subject: [PATCH 03/36] use event_msg->info directly Signed-off-by: Brian Chen --- .../resource/srv__type_support.cpp.em | 78 ++++++++++++------- 1 file changed, 52 insertions(+), 26 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index 24182be0..2160d3bf 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -116,46 +116,72 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup }; +@#TODO(ihasdapie): Import Postfixes @{event_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Event'}@ @{request_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Request'}@ @{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Response'}@ +#include + // This is generated by a macro in other cases in this file void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__create ( const rosidl_service_introspection_info_t * info, + rcutils_allocator_t * allocator, void * request_message, - void * response_message -) { - - @event_type * event_message = @(event_type)__create(); - service_msgs__msg__ServiceEventInfo * service_info = service_msgs__msg__ServiceEventInfo__create(); - service_info->event_type = info->event_type; - service_info->sequence_number = info->sequence_number; - service_info->stamp.sec = info->stamp_sec; - service_info->stamp.nanosec = info->stamp_nanosec; + void * response_message, + bool enable_message_payload) +{ + auto * event_msg = static_cast<@event_type *>(allocator->zero_allocate(1, sizeof(@event_type), allocator->state)); + if (!@(event_type)__init(event_msg)) { + allocator->deallocate(event_msg, allocator->state); + return NULL; + } + + event_msg->info.event_type = info->event_type; + event_msg->info.sequence_number = info->sequence_number; + event_msg->info.stamp.sec = info->stamp_sec; + event_msg->info.stamp.nanosec = info->stamp_nanosec; for (size_t i = 0; i < 16; ++i) { - service_info->client_id.uuid[i] = info->client_id[i]; + event_msg->info.client_id.uuid[i] = info->client_id[i]; } - service_msgs__msg__ServiceEventInfo__copy(service_info, &event_message->info); - if (NULL == request_message) { - @(response_type)__Sequence__extendn(&event_message->response, 1); - @(response_type)__copy( (@response_type *) response_message, &event_message->response.data[0]); + + if (enable_message_payload) { + if (NULL == request_message) { + event_msg->response.capacity = 1; + event_msg->response.size = 1; + event_msg->response.data = static_cast<@response_type *>(allocator->zero_allocate(1, sizeof(@response_type), allocator->state)); + if (! @(response_type)__copy((@response_type *) response_message, &event_msg->response.data[0])) { + return NULL; + } } - else { - @(request_type)__Sequence__extendn(&event_message->request, 1); - @(request_type)__copy( (@request_type *) request_message, &event_message->request.data[0]); + else if (NULL == response_message) { + event_msg->request.capacity = 1; + event_msg->request.size = 1; + event_msg->request.data = static_cast<@request_type *>(allocator->zero_allocate(1, sizeof(@request_type), allocator->state)); + if (! @(request_type)__copy((@request_type *) request_message, &event_msg->request.data[0])){ + return NULL; + } + } else { + // set error? + return NULL; } - - service_msgs__msg__ServiceEventInfo__fini(service_info); - - return event_message; } + return event_msg; +} -void rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__fini ( - void * event_message +bool rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__destroy ( + void * event_msg, + rcutils_allocator_t * allocator ) -{ - @(event_type)__fini((@event_type *) event_message); +{ + if (NULL == event_msg) { + return false; + } + + // check null + @(event_type)__fini((@event_type *) event_msg); + allocator->deallocate(event_msg, allocator->state); + return true; } @@ -164,7 +190,7 @@ static const rosidl_service_type_support_t @(service.namespaced_type.name)_servi .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), .func = rosidl_typesupport_c__get_service_typesupport_handle_function, .introspection_message_create_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__create, - .introspection_message_fini_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__fini, + .introspection_message_destroy_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__destroy, .event_typesupport = &@(service.namespaced_type.name)_Event_message_type_support_handle }; From 659fa718237bec9668afe817f4f18314213232c0 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Mon, 8 Aug 2022 11:14:04 -0700 Subject: [PATCH 04/36] enable/disable event msg payload Signed-off-by: Brian Chen --- .../resource/srv__type_support.cpp.em | 74 +++++++++++++------ 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index 170abb93..33529d68 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -22,6 +22,14 @@ TEMPLATE( type_supports=type_supports) }@ +@{ +TEMPLATE( + 'msg__type_support.cpp.em', + package_name=package_name, interface_path=interface_path, + message=service.event_message, include_directives=include_directives, + type_supports=type_supports) +}@ + @{ from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ @@ -122,48 +130,69 @@ extern "C" { #endif -// todo: this needs to be templated probably -#ifndef SRV_INTRO_INIT -#define SRV_INTRO_INIT - +// TODO: Import postfixes +@{event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Event'} void * rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_create ( - const rosidl_service_introspection_info_t * info, // include the rosidl_runtime file + const rosidl_service_introspection_info_t * info, + rcutils_allocator_t * allocator, void * request_message, - void * response_message) + void * response_message, + bool enable_message_payload) { - auto event_msg = std::make_shared<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Event>(); // shared_ptr in extern C? - auto info_msg = std::make_shared(); - auto time_msg = builtin_interfaces::msg::Time(); - - time_msg.sec = info->stamp_sec; - time_msg.nanosec = info->stamp_nanosec; - info_msg->set__stamp(time_msg); + auto * event_msg = static_cast<@event_type *>(allocator->zero_allocate(1, sizeof(@event_type), allocator->state)); + if (nullptr == event_msg) { + return NULL; + } + event_msg = new(event_msg) @(event_type)(); - info_msg->set__event_type(info->event_type); + event_msg->info.set__event_type(info->event_type); event_msg->info.set__sequence_number(info->sequence_number); + event_msg->info.stamp.set__sec(info->stamp_sec); + event_msg->info.stamp.set__nanosec(info->stamp_nanosec); std::array client_id; std::move(std::begin(info->client_id), std::end(info->client_id), client_id.begin()); - info_msg->client_id.set__uuid(client_id); - - if (nullptr == request_message) { - event_msg->response.push_back(*reinterpret_cast<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Response *> (response_message)); - } else if (nullptr == response_message) { - event_msg->request.push_back(*reinterpret_cast<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Request *> (request_message)); } else { // raise an error here + event_msg->info.client_id.set__uuid(client_id); + + if (enable_message_payload) { + if (nullptr == request_message) { + event_msg->response.push_back(*static_cast<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Response *> (response_message)); + } else if (nullptr == response_message) { + event_msg->request.push_back(*static_cast<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Request *> (request_message)); } + else { + // raise an error here? + } } - return event_msg.get(); + return event_msg; +} + +#include + +bool +rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_destroy( +void* event_msg, +rcutils_allocator_t * allocator +) +{ + auto * event_msg_ = static_cast<@event_type *>(event_msg); + // event_msg_->@('::'.join([package_name, *interface_path.parents[0].parts]) + '::~' + service.namespaced_type.name + '_Event')(); + // std::destroy_at(event_msg_); // Why can't I compile with c++17? + event_msg_->~@(service.namespaced_type.name)_Event(); + allocator->deallocate(event_msg, allocator->state); + return true; } + static const rosidl_service_type_support_t @(service.namespaced_type.name)_service_type_support_handle = { .typesupport_identifier = ::rosidl_typesupport_cpp::typesupport_identifier, .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), .func = ::rosidl_typesupport_cpp::get_service_typesupport_handle_function, .introspection_message_create_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_create, - .introspection_message_fini_handle = +[](void* message){}, + .introspection_message_destroy_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_destroy, .event_typesupport = ::rosidl_typesupport_cpp::get_message_type_support_handle<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Event>(), }; @@ -171,7 +200,6 @@ static const rosidl_service_type_support_t @(service.namespaced_type.name)_servi } #endif -#endif From acd7ae533d3c1a8076c6b765f1b3fe170894a043 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Tue, 9 Aug 2022 17:16:27 -0700 Subject: [PATCH 05/36] remove debug code Signed-off-by: Brian Chen --- rosidl_typesupport_cpp/resource/srv__type_support.cpp.em | 6 ------ 1 file changed, 6 deletions(-) diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index 33529d68..1906b923 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -1,11 +1,5 @@ @# Included from rosidl_typesupport_cpp/resource/idl__type_support.cpp.em #include "rosidl_runtime_c/service_type_support_struct.h" -@[def dbg_print(p)] -@{ import sys} -@{ print('-------------TEMPLATE DBG---------------', file=sys.stderr);} -@{ print(str(p), file=sys.stderr);} -@{ print('-------------TEMPLATE DBG END--------------', file=sys.stderr);} -@[end def] @{ TEMPLATE( 'msg__type_support.cpp.em', From 200fa790d4713ffddf442682f12381d540432255 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Wed, 10 Aug 2022 16:16:26 -0700 Subject: [PATCH 06/36] use suffix from rosidl_parser.definition Signed-off-by: Brian Chen --- rosidl_typesupport_c/resource/srv__type_support.cpp.em | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index 2160d3bf..20b194d1 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -25,6 +25,9 @@ TEMPLATE( @{ from rosidl_pycommon import convert_camel_case_to_lower_case_underscore +from rosidl_parser.definition import SERVICE_REQUEST_MESSAGE_SUFFIX +from rosidl_parser.definition import SERVICE_RESPONSE_MESSAGE_SUFFIX +from rosidl_parser.definition import SERVICE_EVENT_MESSAGE_SUFFIX include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_base = '/'.join(include_parts) @@ -117,9 +120,9 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup @#TODO(ihasdapie): Import Postfixes -@{event_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Event'}@ -@{request_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Request'}@ -@{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Response'}@ +@{event_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX}@ +@{request_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_REQUEST_MESSAGE_SUFFIX}@ +@{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_RESPONSE_MESSAGE_SUFFIX}@ #include From c481c6d42b0996fe71278dbf094c3fcf63e27bec Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Wed, 24 Aug 2022 01:33:55 -0700 Subject: [PATCH 07/36] const void* service introspection message create handle Signed-off-by: Brian Chen --- .../resource/srv__type_support.cpp.em | 9 +++------ .../resource/srv__type_support.cpp.em | 16 +++++++++------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index 20b194d1..089b96db 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -124,14 +124,12 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup @{request_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_REQUEST_MESSAGE_SUFFIX}@ @{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_RESPONSE_MESSAGE_SUFFIX}@ -#include -// This is generated by a macro in other cases in this file void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__create ( const rosidl_service_introspection_info_t * info, rcutils_allocator_t * allocator, - void * request_message, - void * response_message, + const void * request_message, + const void * response_message, bool enable_message_payload) { auto * event_msg = static_cast<@event_type *>(allocator->zero_allocate(1, sizeof(@event_type), allocator->state)); @@ -180,8 +178,7 @@ bool rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0]. if (NULL == event_msg) { return false; } - - // check null + @(event_type)__fini((@event_type *) event_msg); allocator->deallocate(event_msg, allocator->state); return true; diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index 1906b923..80185fd7 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -26,6 +26,9 @@ TEMPLATE( @{ from rosidl_pycommon import convert_camel_case_to_lower_case_underscore +from rosidl_parser.definition import SERVICE_REQUEST_MESSAGE_SUFFIX +from rosidl_parser.definition import SERVICE_RESPONSE_MESSAGE_SUFFIX +from rosidl_parser.definition import SERVICE_EVENT_MESSAGE_SUFFIX include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_base = '/'.join(include_parts) @@ -124,16 +127,15 @@ extern "C" { #endif -// TODO: Import postfixes -@{event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + '_Event'} +@{event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX} void * rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_create ( const rosidl_service_introspection_info_t * info, rcutils_allocator_t * allocator, - void * request_message, - void * response_message, + const void * request_message, + const void * response_message, bool enable_message_payload) { auto * event_msg = static_cast<@event_type *>(allocator->zero_allocate(1, sizeof(@event_type), allocator->state)); @@ -153,11 +155,11 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names if (enable_message_payload) { if (nullptr == request_message) { - event_msg->response.push_back(*static_cast<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Response *> (response_message)); + event_msg->response.push_back(*static_cast (response_message)); } else if (nullptr == response_message) { - event_msg->request.push_back(*static_cast<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Request *> (request_message)); } + event_msg->request.push_back(*static_cast (request_message)); } else { - // raise an error here? + throw std::invalid_argument("request_message and response_message cannot be both non-null"); } } From 3137d0f9d82fedc89557371d111d68e0951236e9 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Wed, 24 Aug 2022 01:34:09 -0700 Subject: [PATCH 08/36] update tests to reflect rosidl_service_type_support_t Signed-off-by: Brian Chen --- rosidl_typesupport_c/test/test_type_support.c | 2 +- rosidl_typesupport_cpp/src/type_support_dispatch.hpp | 1 + .../test/benchmark/benchmark_type_support_dispatch.cpp | 2 +- rosidl_typesupport_cpp/test/test_type_support.cpp | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/rosidl_typesupport_c/test/test_type_support.c b/rosidl_typesupport_c/test/test_type_support.c index 37047082..2364d006 100644 --- a/rosidl_typesupport_c/test/test_type_support.c +++ b/rosidl_typesupport_c/test/test_type_support.c @@ -34,7 +34,7 @@ static const rosidl_message_type_support_t message_type_support = { }; static const rosidl_service_type_support_t service_type_support = { - 0, 0, 0 + 0, 0, 0, 0, 0, 0 }; const rosidl_message_type_support_t * test_message_type_support() {return &message_type_support;} diff --git a/rosidl_typesupport_cpp/src/type_support_dispatch.hpp b/rosidl_typesupport_cpp/src/type_support_dispatch.hpp index c662ffc2..3503392f 100644 --- a/rosidl_typesupport_cpp/src/type_support_dispatch.hpp +++ b/rosidl_typesupport_cpp/src/type_support_dispatch.hpp @@ -108,6 +108,7 @@ get_typesupport_handle_function( return ts; } } + rcutils_reset_error(); RCUTILS_SET_ERROR_MSG_WITH_FORMAT_STRING( "Handle's typesupport identifier (%s) is not supported by this library", handle->typesupport_identifier); diff --git a/rosidl_typesupport_cpp/test/benchmark/benchmark_type_support_dispatch.cpp b/rosidl_typesupport_cpp/test/benchmark/benchmark_type_support_dispatch.cpp index 8de0e2f3..187763b4 100644 --- a/rosidl_typesupport_cpp/test/benchmark/benchmark_type_support_dispatch.cpp +++ b/rosidl_typesupport_cpp/test/benchmark/benchmark_type_support_dispatch.cpp @@ -42,7 +42,7 @@ rosidl_message_type_support_t get_rosidl_message_type_support(const char * ident rosidl_service_type_support_t get_rosidl_service_type_support(const char * identifier) { - return {identifier, nullptr, nullptr}; + return {identifier, nullptr, nullptr, nullptr, nullptr, nullptr}; } type_support_map_t get_typesupport_map(void ** library_array) diff --git a/rosidl_typesupport_cpp/test/test_type_support.cpp b/rosidl_typesupport_cpp/test/test_type_support.cpp index b0a27dce..d13d201c 100644 --- a/rosidl_typesupport_cpp/test/test_type_support.cpp +++ b/rosidl_typesupport_cpp/test/test_type_support.cpp @@ -39,7 +39,7 @@ static const rosidl_message_type_support_t message_type_support = { }; static const rosidl_service_type_support_t service_type_support = { - 0, 0, 0 + 0, 0, 0, 0, 0, 0 }; const rosidl_message_type_support_t * test_message_type_support() {return &message_type_support;} From a4d426a5b655e19fbcfdd565a905d3032d4fb419 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Sat, 27 Aug 2022 01:46:13 -0700 Subject: [PATCH 09/36] fix tests with new service typesupport definition Signed-off-by: Brian Chen --- rosidl_typesupport_cpp/resource/srv__type_support.cpp.em | 7 +------ .../test/test_service_type_support_dispatch.cpp | 2 +- rosidl_typesupport_cpp/test/test_type_support.cpp | 4 ++-- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index 80185fd7..9ac3fce9 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -166,17 +166,12 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names return event_msg; } -#include - bool rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_destroy( void* event_msg, -rcutils_allocator_t * allocator -) +rcutils_allocator_t * allocator) { auto * event_msg_ = static_cast<@event_type *>(event_msg); - // event_msg_->@('::'.join([package_name, *interface_path.parents[0].parts]) + '::~' + service.namespaced_type.name + '_Event')(); - // std::destroy_at(event_msg_); // Why can't I compile with c++17? event_msg_->~@(service.namespaced_type.name)_Event(); allocator->deallocate(event_msg, allocator->state); return true; diff --git a/rosidl_typesupport_cpp/test/test_service_type_support_dispatch.cpp b/rosidl_typesupport_cpp/test/test_service_type_support_dispatch.cpp index aae3fc4c..ca9783f5 100644 --- a/rosidl_typesupport_cpp/test/test_service_type_support_dispatch.cpp +++ b/rosidl_typesupport_cpp/test/test_service_type_support_dispatch.cpp @@ -35,7 +35,7 @@ constexpr const char * symbols[map_size] = { rosidl_service_type_support_t get_rosidl_service_type_support(const char * identifier) { - return {identifier, nullptr, nullptr}; + return {identifier, nullptr, nullptr, nullptr, nullptr, nullptr}; } type_support_map_t get_typesupport_map(void ** library_array) diff --git a/rosidl_typesupport_cpp/test/test_type_support.cpp b/rosidl_typesupport_cpp/test/test_type_support.cpp index d13d201c..243fae1e 100644 --- a/rosidl_typesupport_cpp/test/test_type_support.cpp +++ b/rosidl_typesupport_cpp/test/test_type_support.cpp @@ -35,11 +35,11 @@ const rosidl_service_type_support_t * test_service_type_support(); #endif static const rosidl_message_type_support_t message_type_support = { - 0, 0, 0 + nullptr, nullptr, nullptr }; static const rosidl_service_type_support_t service_type_support = { - 0, 0, 0, 0, 0, 0 + nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }; const rosidl_message_type_support_t * test_message_type_support() {return &message_type_support;} From 3e5f05398e6c2f08737dfafdd8cce4a307c26115 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Sat, 27 Aug 2022 01:46:24 -0700 Subject: [PATCH 10/36] create rosidl_typesupport_tests package Signed-off-by: Brian Chen --- rosidl_typesupport_tests/CMakeLists.txt | 69 ++++++++++++ rosidl_typesupport_tests/package.xml | 33 ++++++ .../test_service_typesupport.cpp | 102 ++++++++++++++++++ 3 files changed, 204 insertions(+) create mode 100644 rosidl_typesupport_tests/CMakeLists.txt create mode 100644 rosidl_typesupport_tests/package.xml create mode 100644 rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp diff --git a/rosidl_typesupport_tests/CMakeLists.txt b/rosidl_typesupport_tests/CMakeLists.txt new file mode 100644 index 00000000..730f7066 --- /dev/null +++ b/rosidl_typesupport_tests/CMakeLists.txt @@ -0,0 +1,69 @@ +cmake_minimum_required(VERSION 3.8) +project(rosidl_typesupport_tests) + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +find_package(ament_cmake REQUIRED) + +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() + find_package(rosidl_cmake REQUIRED) + find_package(ament_cmake_gtest REQUIRED) + find_package(rosidl_generator_c REQUIRED) + find_package(rosidl_generator_cpp REQUIRED) + find_package(rosidl_runtime_c REQUIRED) + find_package(rosidl_runtime_cpp REQUIRED) + find_package(rosidl_typesupport_c REQUIRED) + find_package(rosidl_typesupport_cpp REQUIRED) + find_package(rosidl_typesupport_interface REQUIRED) + find_package(test_interface_files REQUIRED) + find_package(rcutils REQUIRED) + find_package(rcpputils REQUIRED) + + rosidl_generate_interfaces(${PROJECT_NAME} + ${test_interface_files_MSG_FILES} + ${test_interface_files_SRV_FILES} + ${test_interface_files_ACTION_FILES} + SKIP_INSTALL + ) + + rosidl_get_typesupport_target(cpp_generator_target "${PROJECT_NAME}" "rosidl_generator_cpp") + rosidl_get_typesupport_target(c_generator_target "${PROJECT_NAME}" "rosidl_generator_c") + + rosidl_get_typesupport_target(cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp") + rosidl_get_typesupport_target(c_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_c") + + ament_add_gtest(test_service_typesupport_cpp + test/rosidl_typesupport_cpp/test_service_typesupport.cpp + APPEND_LIBRARY_DIRS "${CMAKE_CURRENT_BINARY_DIR}" + + ) + + target_include_directories(test_service_typesupport_cpp PRIVATE test + rosidl_typesupport_cpp) + target_link_libraries(test_service_typesupport_cpp + "${PROJECT_NAME}__rosidl_generator_c" + "${PROJECT_NAME}__rosidl_generator_cpp" + "${PROJECT_NAME}__rosidl_typesupport_c" + "${PROJECT_NAME}__rosidl_typesupport_cpp" + "${cpp_generator_target}" + "${cpp_typesupport_target}" + rosidl_runtime_cpp::rosidl_runtime_cpp + ) + # ament_target_dependencies(test_service_typesupport_cpp + # "rosidl_runtime_cpp" + # "rosidl_typesupport_cpp") + # add_dependencies(test_service_typesupport_cpp ${PROJECT_NAME} + # rosidl_typesupport_cpp) + # target_link_libraries(test_service_typesupport_cpp + # rosidl_runtime_cpp::rosidl_runtime_cpp + # rosidl_typesupport_cpp::rosidl_typesupport_cpp + # ) +endif() + + + +ament_package() diff --git a/rosidl_typesupport_tests/package.xml b/rosidl_typesupport_tests/package.xml new file mode 100644 index 00000000..afcef677 --- /dev/null +++ b/rosidl_typesupport_tests/package.xml @@ -0,0 +1,33 @@ + + + + rosidl_typesupport_tests + 0.0.0 + TODO: Package description + Jacob Perron + + Brian Chen + TODO: License declaration + + ament_cmake + + ament_lint_auto + ament_lint_common + ament_cmake_gtest + rcutils + rcpputils + rosidl_cmake + rosidl_generator_c + rosidl_generator_cpp + rosidl_typesupport_c + rosidl_typesupport_cpp + + rosidl_typesupport_interface + test_interface_files + service_msgs + action_msgs + + ament_cmake + + diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp new file mode 100644 index 00000000..3a0717b8 --- /dev/null +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -0,0 +1,102 @@ +// Copyright 2022 Open Source Robotics Foundation, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +// #include +#include "rosidl_runtime_cpp/service_type_support_decl.hpp" +#include "rosidl_runtime_cpp/message_type_support_decl.hpp" +#include "rcutils/allocator.h" + +#include "rosidl_typesupport_cpp/service_type_support.hpp" + +#include "rosidl_typesupport_tests/srv/basic_types.hpp" + +#include "builtin_interfaces/msg/time.h" +#include "unique_identifier_msgs/msg/uuid.h" +#include "service_msgs/msg/service_event_info.h" +#include "rosidl_runtime_c/service_type_support_struct.h" + +TEST(test_service_typesupport, basic_types_cpp_to_cpp) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + const rosidl_service_type_support_t * srv_ts = + rosidl_runtime_cpp::get_service_type_support_handle(); + + const rosidl_message_type_support_t * msg_ts = + rosidl_runtime_cpp::get_message_type_support_handle(); + + + EXPECT_EQ(srv_ts->typesupport_identifier, "rosidl_typesupport_cpp"); + EXPECT_EQ(msg_ts->typesupport_identifier, "rosidl_typesupport_cpp"); + + // typesupports are static so this comparison *should* be valid? + EXPECT_EQ(srv_ts->event_typesupport, msg_ts); + + rosidl_service_introspection_info_t info; + + info.sequence_number = 2; + info.event_type = 2; + info.stamp_nanosec = 123; + info.stamp_sec = 123; + auto uuid = std::array{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + std::copy(uuid.begin(), uuid.end(), info.client_id); + + auto req = rosidl_typesupport_tests::srv::BasicTypes_Request(); + req.int16_value = -1; + req.uint16_value = 123; + auto resp = rosidl_typesupport_tests::srv::BasicTypes_Response(); + resp.bool_value = true; + resp.string_value = "hello world"; + + auto * event = static_cast(srv_ts->introspection_message_create_handle( + &info, &allocator, nullptr, nullptr, true)); + EXPECT_EQ(event, nullptr); + ASSERT_TRUE(srv_ts->introspection_message_destroy_handle(event, &allocator)); + + event = static_cast(srv_ts->introspection_message_create_handle( + &info, &allocator, static_cast(&req), nullptr, true)); + + EXPECT_EQ(event->info.sequence_number, info.sequence_number); + EXPECT_EQ(event->info.event_type, info.event_type); + EXPECT_EQ(event->info.stamp.nanosec, info.stamp_nanosec); + EXPECT_EQ(event->info.stamp.sec, info.stamp_sec); + for (int i = 0; i < 16; ++i) { + EXPECT_EQ(event->info.client_id.uuid[i], info.client_id[i]); + } + EXPECT_EQ(event->request[0].int16_value, -1); + EXPECT_EQ(event->request[0].uint16_value, 123); + EXPECT_EQ(event->response.size(), 0U); + ASSERT_TRUE(srv_ts->introspection_message_destroy_handle(event, &allocator)); + + event = static_cast(srv_ts->introspection_message_create_handle( + &info, &allocator, nullptr, static_cast(&resp), true)); + + EXPECT_EQ(event->info.sequence_number, info.sequence_number); + EXPECT_EQ(event->info.event_type, info.event_type); + EXPECT_EQ(event->info.stamp.nanosec, info.stamp_nanosec); + EXPECT_EQ(event->info.stamp.sec, info.stamp_sec); + for (int i = 0; i < 16; ++i) { + EXPECT_EQ(event->info.client_id.uuid[i], info.client_id[i]); + } + EXPECT_EQ(event->request[0].bool_value, true); + EXPECT_STREQ(event->request[0].string_value.data(), "hello world"); + ASSERT_TRUE(srv_ts->introspection_message_destroy_handle(event, &allocator)); +} + +/* TODO(ihasdapie): As above but use c typesupports instead of cpp ones + */ +/* TEST(test_service_typesupport, basic_types_c_to_cpp) +{ +} */ From 4a8c54c559f656254e8b0228193dabfe195d4a83 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Sat, 3 Sep 2022 15:57:29 -0400 Subject: [PATCH 11/36] rename service_introspection_create/destroy handles to event_message create/destroy Signed-off-by: Brian Chen --- rosidl_typesupport_c/resource/srv__type_support.cpp.em | 8 ++++---- rosidl_typesupport_cpp/resource/srv__type_support.cpp.em | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index 089b96db..a1138298 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -125,7 +125,7 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup @{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_RESPONSE_MESSAGE_SUFFIX}@ -void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__create ( +void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__create ( const rosidl_service_introspection_info_t * info, rcutils_allocator_t * allocator, const void * request_message, @@ -170,7 +170,7 @@ void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0 return event_msg; } -bool rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__destroy ( +bool rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__destroy ( void * event_msg, rcutils_allocator_t * allocator ) @@ -189,8 +189,8 @@ static const rosidl_service_type_support_t @(service.namespaced_type.name)_servi .typesupport_identifier = rosidl_typesupport_c__typesupport_identifier, .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), .func = rosidl_typesupport_c__get_service_typesupport_handle_function, - .introspection_message_create_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__create, - .introspection_message_destroy_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__service_introspection_message__destroy, + .event_message_create_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__create, + .event_message_destroy_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__destroy, .event_typesupport = &@(service.namespaced_type.name)_Event_message_type_support_handle }; diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index 9ac3fce9..f0b62839 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -130,7 +130,7 @@ extern "C" @{event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX} void * -rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_create +rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_create ( const rosidl_service_introspection_info_t * info, rcutils_allocator_t * allocator, @@ -167,7 +167,7 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names } bool -rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_destroy( +rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_destroy( void* event_msg, rcutils_allocator_t * allocator) { @@ -182,8 +182,8 @@ static const rosidl_service_type_support_t @(service.namespaced_type.name)_servi .typesupport_identifier = ::rosidl_typesupport_cpp::typesupport_identifier, .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), .func = ::rosidl_typesupport_cpp::get_service_typesupport_handle_function, - .introspection_message_create_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_create, - .introspection_message_destroy_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_introspection_message_destroy, + .event_message_create_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_create, + .event_message_destroy_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_destroy, .event_typesupport = ::rosidl_typesupport_cpp::get_message_type_support_handle<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Event>(), }; From fee9c5d3c738f586111911e185ea32336c8f5a1d Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Sat, 3 Sep 2022 16:00:23 -0400 Subject: [PATCH 12/36] remove zero_allocate calls Signed-off-by: Brian Chen --- .../resource/srv__type_support.cpp.em | 48 +++++++++++-------- .../resource/srv__type_support.cpp.em | 20 ++++---- 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index a1138298..e06c02e1 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -132,7 +132,7 @@ void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0 const void * response_message, bool enable_message_payload) { - auto * event_msg = static_cast<@event_type *>(allocator->zero_allocate(1, sizeof(@event_type), allocator->state)); + auto * event_msg = static_cast<@event_type *>(allocator->allocate(sizeof(@event_type), allocator->state)); if (!@(event_type)__init(event_msg)) { allocator->deallocate(event_msg, allocator->state); return NULL; @@ -146,24 +146,25 @@ void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0 event_msg->info.client_id.uuid[i] = info->client_id[i]; } - if (enable_message_payload) { - if (NULL == request_message) { - event_msg->response.capacity = 1; - event_msg->response.size = 1; - event_msg->response.data = static_cast<@response_type *>(allocator->zero_allocate(1, sizeof(@response_type), allocator->state)); - if (! @(response_type)__copy((@response_type *) response_message, &event_msg->response.data[0])) { - return NULL; - } + if (!enable_message_payload) { + return event_msg; + } + + if (request_message) { + event_msg->response.capacity = 1; + event_msg->response.size = 1; + event_msg->response.data = static_cast<@response_type *>(allocator->allocate(sizeof(@response_type), allocator->state)); + if (! @(response_type)__copy((@response_type *) response_message, &event_msg->response.data[0])) { + allocator->deallocate(event_msg, allocator->state); + return NULL; } - else if (NULL == response_message) { - event_msg->request.capacity = 1; - event_msg->request.size = 1; - event_msg->request.data = static_cast<@request_type *>(allocator->zero_allocate(1, sizeof(@request_type), allocator->state)); - if (! @(request_type)__copy((@request_type *) request_message, &event_msg->request.data[0])){ - return NULL; - } - } else { - // set error? + } + if (response_message) { + event_msg->request.capacity = 1; + event_msg->request.size = 1; + event_msg->request.data = static_cast<@request_type *>(allocator->allocate(sizeof(@request_type), allocator->state)); + if (! @(request_type)__copy((@request_type *) request_message, &event_msg->request.data[0])){ + allocator->deallocate(event_msg, allocator->state); return NULL; } } @@ -178,9 +179,16 @@ bool rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0]. if (NULL == event_msg) { return false; } + auto * _event_msg = static_cast<@event_type *>(event_msg); - @(event_type)__fini((@event_type *) event_msg); - allocator->deallocate(event_msg, allocator->state); + @(event_type)__fini((@event_type *) _event_msg); + if (_event_msg->request.data){ + allocator->deallocate(_event_msg->request.data, allocator->state); + } + if (_event_msg->response.data){ + allocator->deallocate(_event_msg->response.data, allocator->state); + } + allocator->deallocate(_event_msg, allocator->state); return true; } diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index f0b62839..00cdd77e 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -138,7 +138,7 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names const void * response_message, bool enable_message_payload) { - auto * event_msg = static_cast<@event_type *>(allocator->zero_allocate(1, sizeof(@event_type), allocator->state)); + auto * event_msg = static_cast<@event_type *>(allocator->allocate(sizeof(@event_type), allocator->state)); if (nullptr == event_msg) { return NULL; } @@ -153,14 +153,16 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names std::move(std::begin(info->client_id), std::end(info->client_id), client_id.begin()); event_msg->info.client_id.set__uuid(client_id); - if (enable_message_payload) { - if (nullptr == request_message) { - event_msg->response.push_back(*static_cast (response_message)); - } else if (nullptr == response_message) { - event_msg->request.push_back(*static_cast (request_message)); } - else { - throw std::invalid_argument("request_message and response_message cannot be both non-null"); - } + if (!enable_message_payload) { + return event_msg; + } + if (nullptr == request_message) { + event_msg->response.push_back(*static_cast (response_message)); + } + if (nullptr == response_message) { + event_msg->request.push_back(*static_cast (request_message)); } + else { + throw std::invalid_argument("request_message and response_message cannot be both non-null"); } return event_msg; From 709b8316e5da2892b3f2cb64afc6ec1d557c01d2 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Sat, 3 Sep 2022 16:03:58 -0400 Subject: [PATCH 13/36] remove ifdef cpp Signed-off-by: Brian Chen --- .../resource/srv__type_support.cpp.em | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index 00cdd77e..efef1e4c 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -120,13 +120,6 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup &_@(service.namespaced_type.name)_service_typesupport_data.data[0], }; - - -#ifdef __cplusplus -extern "C" -{ -#endif - @{event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX} void * @@ -189,13 +182,6 @@ static const rosidl_service_type_support_t @(service.namespaced_type.name)_servi .event_typesupport = ::rosidl_typesupport_cpp::get_message_type_support_handle<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Event>(), }; -#ifdef __cplusplus -} -#endif - - - - } // namespace rosidl_typesupport_cpp @[ for ns in reversed(service.namespaced_type.namespaces)]@ From dc3410bee838f7b71806e67f7e64e08745e90b81 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Sat, 3 Sep 2022 16:04:26 -0400 Subject: [PATCH 14/36] remove unnecessary rcutils_reset_error Signed-off-by: Brian Chen --- rosidl_typesupport_cpp/src/type_support_dispatch.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/rosidl_typesupport_cpp/src/type_support_dispatch.hpp b/rosidl_typesupport_cpp/src/type_support_dispatch.hpp index 3503392f..c662ffc2 100644 --- a/rosidl_typesupport_cpp/src/type_support_dispatch.hpp +++ b/rosidl_typesupport_cpp/src/type_support_dispatch.hpp @@ -108,7 +108,6 @@ get_typesupport_handle_function( return ts; } } - rcutils_reset_error(); RCUTILS_SET_ERROR_MSG_WITH_FORMAT_STRING( "Handle's typesupport identifier (%s) is not supported by this library", handle->typesupport_identifier); From b67d2411983454a99226d7711fe1cc38d6ef55a6 Mon Sep 17 00:00:00 2001 From: Brian Chen Date: Sat, 3 Sep 2022 16:04:35 -0400 Subject: [PATCH 15/36] fix tests Signed-off-by: Brian Chen --- .../test_service_typesupport.cpp | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp index 3a0717b8..e6d1532c 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -60,12 +60,12 @@ TEST(test_service_typesupport, basic_types_cpp_to_cpp) resp.bool_value = true; resp.string_value = "hello world"; - auto * event = static_cast(srv_ts->introspection_message_create_handle( + auto * event = static_cast(srv_ts->event_message_create_handle( &info, &allocator, nullptr, nullptr, true)); EXPECT_EQ(event, nullptr); - ASSERT_TRUE(srv_ts->introspection_message_destroy_handle(event, &allocator)); + ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); - event = static_cast(srv_ts->introspection_message_create_handle( + event = static_cast(srv_ts->event_message_create_handle( &info, &allocator, static_cast(&req), nullptr, true)); EXPECT_EQ(event->info.sequence_number, info.sequence_number); @@ -75,12 +75,13 @@ TEST(test_service_typesupport, basic_types_cpp_to_cpp) for (int i = 0; i < 16; ++i) { EXPECT_EQ(event->info.client_id.uuid[i], info.client_id[i]); } + ASSERT_EQ(event->request.size(), 1U); + EXPECT_EQ(event->response.size(), 0U); EXPECT_EQ(event->request[0].int16_value, -1); EXPECT_EQ(event->request[0].uint16_value, 123); - EXPECT_EQ(event->response.size(), 0U); - ASSERT_TRUE(srv_ts->introspection_message_destroy_handle(event, &allocator)); + ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); - event = static_cast(srv_ts->introspection_message_create_handle( + event = static_cast(srv_ts->event_message_create_handle( &info, &allocator, nullptr, static_cast(&resp), true)); EXPECT_EQ(event->info.sequence_number, info.sequence_number); @@ -90,9 +91,11 @@ TEST(test_service_typesupport, basic_types_cpp_to_cpp) for (int i = 0; i < 16; ++i) { EXPECT_EQ(event->info.client_id.uuid[i], info.client_id[i]); } - EXPECT_EQ(event->request[0].bool_value, true); - EXPECT_STREQ(event->request[0].string_value.data(), "hello world"); - ASSERT_TRUE(srv_ts->introspection_message_destroy_handle(event, &allocator)); + ASSERT_EQ(event->response.size(), 1U); + ASSERT_EQ(event->request.size(), 0U); + EXPECT_EQ(event->response[0].bool_value, true); + EXPECT_STREQ(event->response[0].string_value.data(), "hello world"); + ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); } /* TODO(ihasdapie): As above but use c typesupports instead of cpp ones From ac0a4f371396e25526604511c0ae2666540bd9cb Mon Sep 17 00:00:00 2001 From: Jacob Perron Date: Thu, 29 Sep 2022 17:26:45 -0700 Subject: [PATCH 16/36] Fix test + more comprehensive error checking Signed-off-by: Jacob Perron --- .../resource/srv__type_support.cpp.em | 22 +- .../test_service_typesupport.cpp | 196 ++++++++++++------ 2 files changed, 151 insertions(+), 67 deletions(-) diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index efef1e4c..b7ca6575 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -131,11 +131,18 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names const void * response_message, bool enable_message_payload) { + if (nullptr == info) { + throw std::invalid_argument("service introspection info struct cannot be null"); + return NULL; + } + if (nullptr == allocator) { + throw std::invalid_argument("allocator cannot be null"); + } auto * event_msg = static_cast<@event_type *>(allocator->allocate(sizeof(@event_type), allocator->state)); if (nullptr == event_msg) { - return NULL; + throw std::invalid_argument("allocation failed for service event message"); } - event_msg = new(event_msg) @(event_type)(); + event_msg = new(event_msg) @(event_type)(); event_msg->info.set__event_type(info->event_type); event_msg->info.set__sequence_number(info->sequence_number); @@ -146,16 +153,15 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names std::move(std::begin(info->client_id), std::end(info->client_id), client_id.begin()); event_msg->info.client_id.set__uuid(client_id); + // TODO(jacobperron): consider removing this argument and let users pass nullptr for both request and response messages if (!enable_message_payload) { return event_msg; } - if (nullptr == request_message) { - event_msg->response.push_back(*static_cast (response_message)); + if (nullptr != request_message) { + event_msg->request.push_back(*static_cast (request_message)); } - if (nullptr == response_message) { - event_msg->request.push_back(*static_cast (request_message)); } - else { - throw std::invalid_argument("request_message and response_message cannot be both non-null"); + if (nullptr != response_message) { + event_msg->response.push_back(*static_cast (response_message)); } return event_msg; diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp index e6d1532c..b1fbb387 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -14,9 +14,8 @@ #include -// #include -#include "rosidl_runtime_cpp/service_type_support_decl.hpp" -#include "rosidl_runtime_cpp/message_type_support_decl.hpp" +#include "rosidl_typesupport_cpp/service_type_support.hpp" +#include "rosidl_typesupport_cpp/message_type_support.hpp" #include "rcutils/allocator.h" #include "rosidl_typesupport_cpp/service_type_support.hpp" @@ -28,74 +27,153 @@ #include "service_msgs/msg/service_event_info.h" #include "rosidl_runtime_c/service_type_support_struct.h" -TEST(test_service_typesupport, basic_types_cpp_to_cpp) +TEST(test_service_typesupport, event_message_create_and_destroy_invalid_arguments) { rcutils_allocator_t allocator = rcutils_get_default_allocator(); - const rosidl_service_type_support_t * srv_ts = - rosidl_runtime_cpp::get_service_type_support_handle(); + const rosidl_service_type_support_t * srv_ts = + rosidl_typesupport_cpp::get_service_type_support_handle(); + + rosidl_service_introspection_info_t valid_info; + + // null info + { + EXPECT_THROW( + srv_ts->event_message_create_handle(nullptr, &allocator, nullptr, nullptr, true), + std::invalid_argument); + } + // null allocator + { + EXPECT_THROW( + srv_ts->event_message_create_handle(&valid_info, nullptr, nullptr, nullptr, true), + std::invalid_argument); + } +} - const rosidl_message_type_support_t * msg_ts = - rosidl_runtime_cpp::get_message_type_support_handle(); +TEST(test_service_typesupport, basic_types_event_message_create) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + const rosidl_service_type_support_t * srv_ts = + rosidl_typesupport_cpp::get_service_type_support_handle(); + const rosidl_message_type_support_t * msg_ts = + rosidl_typesupport_cpp::get_message_type_support_handle(); - EXPECT_EQ(srv_ts->typesupport_identifier, "rosidl_typesupport_cpp"); - EXPECT_EQ(msg_ts->typesupport_identifier, "rosidl_typesupport_cpp"); + EXPECT_STREQ(srv_ts->typesupport_identifier, "rosidl_typesupport_cpp"); + EXPECT_STREQ(msg_ts->typesupport_identifier, "rosidl_typesupport_cpp"); // typesupports are static so this comparison *should* be valid? EXPECT_EQ(srv_ts->event_typesupport, msg_ts); - rosidl_service_introspection_info_t info; - - info.sequence_number = 2; - info.event_type = 2; - info.stamp_nanosec = 123; - info.stamp_sec = 123; + rosidl_service_introspection_info_t expected_info; + expected_info.sequence_number = 2; + expected_info.event_type = 2; + expected_info.stamp_nanosec = 123; + expected_info.stamp_sec = 123; auto uuid = std::array{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; - std::copy(uuid.begin(), uuid.end(), info.client_id); - - auto req = rosidl_typesupport_tests::srv::BasicTypes_Request(); - req.int16_value = -1; - req.uint16_value = 123; - auto resp = rosidl_typesupport_tests::srv::BasicTypes_Response(); - resp.bool_value = true; - resp.string_value = "hello world"; - - auto * event = static_cast(srv_ts->event_message_create_handle( - &info, &allocator, nullptr, nullptr, true)); - EXPECT_EQ(event, nullptr); - ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); - - event = static_cast(srv_ts->event_message_create_handle( - &info, &allocator, static_cast(&req), nullptr, true)); - - EXPECT_EQ(event->info.sequence_number, info.sequence_number); - EXPECT_EQ(event->info.event_type, info.event_type); - EXPECT_EQ(event->info.stamp.nanosec, info.stamp_nanosec); - EXPECT_EQ(event->info.stamp.sec, info.stamp_sec); - for (int i = 0; i < 16; ++i) { - EXPECT_EQ(event->info.client_id.uuid[i], info.client_id[i]); + std::copy(uuid.begin(), uuid.end(), expected_info.client_id); + + auto expected_request = rosidl_typesupport_tests::srv::BasicTypes_Request(); + expected_request.int16_value = -1; + expected_request.uint16_value = 123; + auto expected_response = rosidl_typesupport_tests::srv::BasicTypes_Response(); + expected_response.bool_value = true; + expected_response.string_value = "hello world"; + + // null request and response arguments + { + auto * event = static_cast( + srv_ts->event_message_create_handle(&expected_info, &allocator, nullptr, nullptr, true)); + ASSERT_NE(event, nullptr); + EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); + EXPECT_EQ(event->info.event_type, expected_info.event_type); + EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); + EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); + for (int i = 0; i < 16; ++i) { + EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + } + EXPECT_EQ(event->request.size(), 0U); + EXPECT_EQ(event->response.size(), 0U); + + ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); + + } + + // request argument set, null response argument + { + auto * event = static_cast( + srv_ts->event_message_create_handle( + &expected_info, + &allocator, + static_cast(&expected_request), + nullptr, + true)); + + ASSERT_NE(event, nullptr); + EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); + EXPECT_EQ(event->info.event_type, expected_info.event_type); + EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); + EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); + for (int i = 0; i < 16; ++i) { + EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + } + ASSERT_EQ(event->request.size(), 1U); + EXPECT_EQ(event->response.size(), 0U); + EXPECT_EQ(event->request[0].int16_value, expected_request.int16_value); + EXPECT_EQ(event->request[0].uint16_value, expected_request.uint16_value); + ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); } - ASSERT_EQ(event->request.size(), 1U); - EXPECT_EQ(event->response.size(), 0U); - EXPECT_EQ(event->request[0].int16_value, -1); - EXPECT_EQ(event->request[0].uint16_value, 123); - ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); - - event = static_cast(srv_ts->event_message_create_handle( - &info, &allocator, nullptr, static_cast(&resp), true)); - - EXPECT_EQ(event->info.sequence_number, info.sequence_number); - EXPECT_EQ(event->info.event_type, info.event_type); - EXPECT_EQ(event->info.stamp.nanosec, info.stamp_nanosec); - EXPECT_EQ(event->info.stamp.sec, info.stamp_sec); - for (int i = 0; i < 16; ++i) { - EXPECT_EQ(event->info.client_id.uuid[i], info.client_id[i]); + + // response argument set, null request argument + { + auto * event = static_cast( + srv_ts->event_message_create_handle( + &expected_info, + &allocator, + nullptr, + static_cast(&expected_response), + true)); + + ASSERT_NE(event, nullptr); + EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); + EXPECT_EQ(event->info.event_type, expected_info.event_type); + EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); + EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); + for (int i = 0; i < 16; ++i) { + EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + } + EXPECT_EQ(event->request.size(), 0U); + ASSERT_EQ(event->response.size(), 1U); + EXPECT_EQ(event->response[0].bool_value, expected_response.bool_value); + EXPECT_EQ(event->response[0].string_value, expected_response.string_value); + ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); + } + + // both request and response arguments set + { + auto * event = static_cast( + srv_ts->event_message_create_handle( + &expected_info, + &allocator, + static_cast(&expected_request), + static_cast(&expected_response), + true)); + + ASSERT_NE(event, nullptr); + EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); + EXPECT_EQ(event->info.event_type, expected_info.event_type); + EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); + EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); + for (int i = 0; i < 16; ++i) { + EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + } + ASSERT_EQ(event->request.size(), 1U); + EXPECT_EQ(event->request[0].int16_value, expected_request.int16_value); + EXPECT_EQ(event->request[0].uint16_value, expected_request.uint16_value); + ASSERT_EQ(event->response.size(), 1U); + EXPECT_EQ(event->response[0].bool_value, expected_response.bool_value); + EXPECT_EQ(event->response[0].string_value, expected_response.string_value); + ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); } - ASSERT_EQ(event->response.size(), 1U); - ASSERT_EQ(event->request.size(), 0U); - EXPECT_EQ(event->response[0].bool_value, true); - EXPECT_STREQ(event->response[0].string_value.data(), "hello world"); - ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); } /* TODO(ihasdapie): As above but use c typesupports instead of cpp ones From 6f79f4f1da5d187ceaebc92f2b5d9ea3aa5d81d1 Mon Sep 17 00:00:00 2001 From: Jacob Perron Date: Thu, 29 Sep 2022 17:48:59 -0700 Subject: [PATCH 17/36] Lint Signed-off-by: Jacob Perron --- .../resource/srv__type_support.cpp.em | 22 +++++++++---------- .../resource/srv__type_support.cpp.em | 22 +++++++------------ rosidl_typesupport_tests/CMakeLists.txt | 5 ++--- rosidl_typesupport_tests/package.xml | 9 +++----- .../test_service_typesupport.cpp | 15 ++++--------- 5 files changed, 27 insertions(+), 46 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index e06c02e1..b1cd2616 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -125,12 +125,13 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup @{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_RESPONSE_MESSAGE_SUFFIX}@ -void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__create ( - const rosidl_service_introspection_info_t * info, - rcutils_allocator_t * allocator, - const void * request_message, - const void * response_message, - bool enable_message_payload) +void * +rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__create( + const rosidl_service_introspection_info_t * info, + rcutils_allocator_t * allocator, + const void * request_message, + const void * response_message, + bool enable_message_payload) { auto * event_msg = static_cast<@event_type *>(allocator->allocate(sizeof(@event_type), allocator->state)); if (!@(event_type)__init(event_msg)) { @@ -171,10 +172,10 @@ void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0 return event_msg; } -bool rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__destroy ( +bool +rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__destroy( void * event_msg, - rcutils_allocator_t * allocator -) + rcutils_allocator_t * allocator) { if (NULL == event_msg) { return false; @@ -192,7 +193,6 @@ bool rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0]. return true; } - static const rosidl_service_type_support_t @(service.namespaced_type.name)_service_type_support_handle = { .typesupport_identifier = rosidl_typesupport_c__typesupport_identifier, .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), @@ -202,8 +202,6 @@ static const rosidl_service_type_support_t @(service.namespaced_type.name)_servi .event_typesupport = &@(service.namespaced_type.name)_Event_message_type_support_handle }; - - } // namespace rosidl_typesupport_c @[ for ns in reversed(service.namespaced_type.namespaces)]@ diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index b7ca6575..196f52fc 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -123,17 +123,15 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup @{event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX} void * -rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_create -( - const rosidl_service_introspection_info_t * info, - rcutils_allocator_t * allocator, - const void * request_message, - const void * response_message, - bool enable_message_payload) +rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_create( + const rosidl_service_introspection_info_t * info, + rcutils_allocator_t * allocator, + const void * request_message, + const void * response_message, + bool enable_message_payload) { if (nullptr == info) { throw std::invalid_argument("service introspection info struct cannot be null"); - return NULL; } if (nullptr == allocator) { throw std::invalid_argument("allocator cannot be null"); @@ -169,8 +167,8 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names bool rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_destroy( -void* event_msg, -rcutils_allocator_t * allocator) + void* event_msg, + rcutils_allocator_t * allocator) { auto * event_msg_ = static_cast<@event_type *>(event_msg); event_msg_->~@(service.namespaced_type.name)_Event(); @@ -225,8 +223,4 @@ get_service_type_support_handle<@('::'.join([package_name] + list(interface_path @[end if]@ } - - - - } // namespace rosidl_typesupport_cpp diff --git a/rosidl_typesupport_tests/CMakeLists.txt b/rosidl_typesupport_tests/CMakeLists.txt index 730f7066..686c9b82 100644 --- a/rosidl_typesupport_tests/CMakeLists.txt +++ b/rosidl_typesupport_tests/CMakeLists.txt @@ -39,8 +39,7 @@ if(BUILD_TESTING) ament_add_gtest(test_service_typesupport_cpp test/rosidl_typesupport_cpp/test_service_typesupport.cpp APPEND_LIBRARY_DIRS "${CMAKE_CURRENT_BINARY_DIR}" - - ) + ) target_include_directories(test_service_typesupport_cpp PRIVATE test rosidl_typesupport_cpp) @@ -52,7 +51,7 @@ if(BUILD_TESTING) "${cpp_generator_target}" "${cpp_typesupport_target}" rosidl_runtime_cpp::rosidl_runtime_cpp - ) + ) # ament_target_dependencies(test_service_typesupport_cpp # "rosidl_runtime_cpp" # "rosidl_typesupport_cpp") diff --git a/rosidl_typesupport_tests/package.xml b/rosidl_typesupport_tests/package.xml index afcef677..e83d3565 100644 --- a/rosidl_typesupport_tests/package.xml +++ b/rosidl_typesupport_tests/package.xml @@ -2,12 +2,11 @@ rosidl_typesupport_tests - 0.0.0 - TODO: Package description + 2.2.0 + Test rosidl_typesupport_c and rosidl_typesupport_cpp packages Jacob Perron - + Apache License 2.0 Brian Chen - TODO: License declaration ament_cmake @@ -21,8 +20,6 @@ rosidl_generator_cpp rosidl_typesupport_c rosidl_typesupport_cpp - rosidl_typesupport_interface test_interface_files service_msgs diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp index b1fbb387..edc15548 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -14,24 +14,18 @@ #include -#include "rosidl_typesupport_cpp/service_type_support.hpp" -#include "rosidl_typesupport_cpp/message_type_support.hpp" #include "rcutils/allocator.h" +#include "rosidl_typesupport_cpp/message_type_support.hpp" #include "rosidl_typesupport_cpp/service_type_support.hpp" #include "rosidl_typesupport_tests/srv/basic_types.hpp" -#include "builtin_interfaces/msg/time.h" -#include "unique_identifier_msgs/msg/uuid.h" -#include "service_msgs/msg/service_event_info.h" -#include "rosidl_runtime_c/service_type_support_struct.h" - TEST(test_service_typesupport, event_message_create_and_destroy_invalid_arguments) { rcutils_allocator_t allocator = rcutils_get_default_allocator(); const rosidl_service_type_support_t * srv_ts = - rosidl_typesupport_cpp::get_service_type_support_handle(); + rosidl_typesupport_cpp::get_service_type_support_handle(); // NOLINT rosidl_service_introspection_info_t valid_info; @@ -53,10 +47,10 @@ TEST(test_service_typesupport, basic_types_event_message_create) { rcutils_allocator_t allocator = rcutils_get_default_allocator(); const rosidl_service_type_support_t * srv_ts = - rosidl_typesupport_cpp::get_service_type_support_handle(); + rosidl_typesupport_cpp::get_service_type_support_handle(); // NOLINT const rosidl_message_type_support_t * msg_ts = - rosidl_typesupport_cpp::get_message_type_support_handle(); + rosidl_typesupport_cpp::get_message_type_support_handle(); // NOLINT EXPECT_STREQ(srv_ts->typesupport_identifier, "rosidl_typesupport_cpp"); EXPECT_STREQ(msg_ts->typesupport_identifier, "rosidl_typesupport_cpp"); @@ -95,7 +89,6 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->response.size(), 0U); ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); - } // request argument set, null response argument From 718085768fb3df0dce540797803665ee13446865 Mon Sep 17 00:00:00 2001 From: Jacob Perron Date: Thu, 29 Sep 2022 17:53:05 -0700 Subject: [PATCH 18/36] Cleanup package.xml and CMakeLists.txt Remove unnecessary dependencies Signed-off-by: Jacob Perron --- rosidl_typesupport_tests/CMakeLists.txt | 35 ++----------------------- rosidl_typesupport_tests/package.xml | 5 +--- 2 files changed, 3 insertions(+), 37 deletions(-) diff --git a/rosidl_typesupport_tests/CMakeLists.txt b/rosidl_typesupport_tests/CMakeLists.txt index 686c9b82..ef13b45e 100644 --- a/rosidl_typesupport_tests/CMakeLists.txt +++ b/rosidl_typesupport_tests/CMakeLists.txt @@ -12,16 +12,8 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() find_package(rosidl_cmake REQUIRED) find_package(ament_cmake_gtest REQUIRED) - find_package(rosidl_generator_c REQUIRED) - find_package(rosidl_generator_cpp REQUIRED) - find_package(rosidl_runtime_c REQUIRED) - find_package(rosidl_runtime_cpp REQUIRED) - find_package(rosidl_typesupport_c REQUIRED) - find_package(rosidl_typesupport_cpp REQUIRED) - find_package(rosidl_typesupport_interface REQUIRED) find_package(test_interface_files REQUIRED) find_package(rcutils REQUIRED) - find_package(rcpputils REQUIRED) rosidl_generate_interfaces(${PROJECT_NAME} ${test_interface_files_MSG_FILES} @@ -30,39 +22,16 @@ if(BUILD_TESTING) SKIP_INSTALL ) - rosidl_get_typesupport_target(cpp_generator_target "${PROJECT_NAME}" "rosidl_generator_cpp") - rosidl_get_typesupport_target(c_generator_target "${PROJECT_NAME}" "rosidl_generator_c") - rosidl_get_typesupport_target(cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp") - rosidl_get_typesupport_target(c_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_c") ament_add_gtest(test_service_typesupport_cpp test/rosidl_typesupport_cpp/test_service_typesupport.cpp - APPEND_LIBRARY_DIRS "${CMAKE_CURRENT_BINARY_DIR}" ) - - target_include_directories(test_service_typesupport_cpp PRIVATE test - rosidl_typesupport_cpp) target_link_libraries(test_service_typesupport_cpp - "${PROJECT_NAME}__rosidl_generator_c" - "${PROJECT_NAME}__rosidl_generator_cpp" - "${PROJECT_NAME}__rosidl_typesupport_c" - "${PROJECT_NAME}__rosidl_typesupport_cpp" - "${cpp_generator_target}" "${cpp_typesupport_target}" - rosidl_runtime_cpp::rosidl_runtime_cpp ) - # ament_target_dependencies(test_service_typesupport_cpp - # "rosidl_runtime_cpp" - # "rosidl_typesupport_cpp") - # add_dependencies(test_service_typesupport_cpp ${PROJECT_NAME} - # rosidl_typesupport_cpp) - # target_link_libraries(test_service_typesupport_cpp - # rosidl_runtime_cpp::rosidl_runtime_cpp - # rosidl_typesupport_cpp::rosidl_typesupport_cpp - # ) -endif() - + # TODO(jacobperron): Add tests for rosidl_typesupport_c +endif() ament_package() diff --git a/rosidl_typesupport_tests/package.xml b/rosidl_typesupport_tests/package.xml index e83d3565..414eeab4 100644 --- a/rosidl_typesupport_tests/package.xml +++ b/rosidl_typesupport_tests/package.xml @@ -14,16 +14,13 @@ ament_lint_common ament_cmake_gtest rcutils - rcpputils rosidl_cmake - rosidl_generator_c - rosidl_generator_cpp rosidl_typesupport_c rosidl_typesupport_cpp - rosidl_typesupport_interface test_interface_files service_msgs action_msgs + ament_cmake From 7cdf46699d40942fd5f0e3123f9a18bba2c79a90 Mon Sep 17 00:00:00 2001 From: Jacob Perron Date: Thu, 29 Sep 2022 17:55:36 -0700 Subject: [PATCH 19/36] Update TODO Signed-off-by: Jacob Perron --- .../rosidl_typesupport_cpp/test_service_typesupport.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp index edc15548..5885eab6 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -169,8 +169,4 @@ TEST(test_service_typesupport, basic_types_event_message_create) } } -/* TODO(ihasdapie): As above but use c typesupports instead of cpp ones - */ -/* TEST(test_service_typesupport, basic_types_c_to_cpp) -{ -} */ +// TODO(jacobperron): Add test for action service From e301055f3d16501c691dbb83896655c119bb712a Mon Sep 17 00:00:00 2001 From: Jacob Perron Date: Wed, 12 Oct 2022 16:20:49 -0700 Subject: [PATCH 20/36] Lint and fix warning Signed-off-by: Jacob Perron --- .../resource/srv__type_support.cpp.em | 16 +++++++--------- .../benchmark_type_support_dispatch.cpp | 2 +- .../resource/srv__type_support.cpp.em | 15 +++++++-------- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index b1cd2616..7a7c9935 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -118,13 +118,11 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup &_@(service.namespaced_type.name)_service_typesupport_data.data[0], }; - @#TODO(ihasdapie): Import Postfixes @{event_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX}@ @{request_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_REQUEST_MESSAGE_SUFFIX}@ @{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_RESPONSE_MESSAGE_SUFFIX}@ - void * rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__create( const rosidl_service_introspection_info_t * info, @@ -148,14 +146,14 @@ rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts } if (!enable_message_payload) { - return event_msg; + return event_msg; } if (request_message) { event_msg->response.capacity = 1; event_msg->response.size = 1; event_msg->response.data = static_cast<@response_type *>(allocator->allocate(sizeof(@response_type), allocator->state)); - if (! @(response_type)__copy((@response_type *) response_message, &event_msg->response.data[0])) { + if (!@(response_type)__copy(reinterpret_cast(response_message), &event_msg->response.data[0])) { allocator->deallocate(event_msg, allocator->state); return NULL; } @@ -164,7 +162,7 @@ rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts event_msg->request.capacity = 1; event_msg->request.size = 1; event_msg->request.data = static_cast<@request_type *>(allocator->allocate(sizeof(@request_type), allocator->state)); - if (! @(request_type)__copy((@request_type *) request_message, &event_msg->request.data[0])){ + if (!@(request_type)__copy(reinterpret_cast(request_message), &event_msg->request.data[0])) { allocator->deallocate(event_msg, allocator->state); return NULL; } @@ -176,17 +174,17 @@ bool rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__destroy( void * event_msg, rcutils_allocator_t * allocator) -{ +{ if (NULL == event_msg) { return false; } auto * _event_msg = static_cast<@event_type *>(event_msg); - @(event_type)__fini((@event_type *) _event_msg); - if (_event_msg->request.data){ + @(event_type)__fini(reinterpret_cast<@event_type *>(_event_msg)); + if (_event_msg->request.data) { allocator->deallocate(_event_msg->request.data, allocator->state); } - if (_event_msg->response.data){ + if (_event_msg->response.data) { allocator->deallocate(_event_msg->response.data, allocator->state); } allocator->deallocate(_event_msg, allocator->state); diff --git a/rosidl_typesupport_c/test/benchmark/benchmark_type_support_dispatch.cpp b/rosidl_typesupport_c/test/benchmark/benchmark_type_support_dispatch.cpp index bc77f83f..a582d1b6 100644 --- a/rosidl_typesupport_c/test/benchmark/benchmark_type_support_dispatch.cpp +++ b/rosidl_typesupport_c/test/benchmark/benchmark_type_support_dispatch.cpp @@ -42,7 +42,7 @@ rosidl_message_type_support_t get_rosidl_message_type_support(const char * ident rosidl_service_type_support_t get_rosidl_service_type_support(const char * identifier) { - return {identifier, nullptr, nullptr}; + return {identifier, nullptr, nullptr, nullptr, nullptr, nullptr}; } type_support_map_t get_typesupport_map(void ** library_array) diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index 196f52fc..afd63556 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -1,5 +1,4 @@ @# Included from rosidl_typesupport_cpp/resource/idl__type_support.cpp.em -#include "rosidl_runtime_c/service_type_support_struct.h" @{ TEMPLATE( 'msg__type_support.cpp.em', @@ -120,8 +119,9 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup &_@(service.namespaced_type.name)_service_typesupport_data.data[0], }; -@{event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX} - +@{ +event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX +}@ void * rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_create( const rosidl_service_introspection_info_t * info, @@ -156,10 +156,10 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names return event_msg; } if (nullptr != request_message) { - event_msg->request.push_back(*static_cast (request_message)); + event_msg->request.push_back(*static_cast(request_message)); } if (nullptr != response_message) { - event_msg->response.push_back(*static_cast (response_message)); + event_msg->response.push_back(*static_cast(response_message)); } return event_msg; @@ -167,7 +167,7 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names bool rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_destroy( - void* event_msg, + void * event_msg, rcutils_allocator_t * allocator) { auto * event_msg_ = static_cast<@event_type *>(event_msg); @@ -176,12 +176,11 @@ rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.names return true; } - static const rosidl_service_type_support_t @(service.namespaced_type.name)_service_type_support_handle = { .typesupport_identifier = ::rosidl_typesupport_cpp::typesupport_identifier, .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), .func = ::rosidl_typesupport_cpp::get_service_typesupport_handle_function, - .event_message_create_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_create, + .event_message_create_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_create, .event_message_destroy_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_destroy, .event_typesupport = ::rosidl_typesupport_cpp::get_message_type_support_handle<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Event>(), }; From 5a6e355452d0a740c2c2e9e4820a4c3657746a41 Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Fri, 11 Nov 2022 17:25:43 -0300 Subject: [PATCH 21/36] Remove completed TODO Signed-off-by: Ivan Santiago Paunovic --- rosidl_typesupport_c/resource/srv__type_support.cpp.em | 1 - 1 file changed, 1 deletion(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index 7a7c9935..4579772c 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -118,7 +118,6 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup &_@(service.namespaced_type.name)_service_typesupport_data.data[0], }; -@#TODO(ihasdapie): Import Postfixes @{event_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX}@ @{request_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_REQUEST_MESSAGE_SUFFIX}@ @{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_RESPONSE_MESSAGE_SUFFIX}@ From 54e65f33f4c232c3c76bc66095177191c3aced93 Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Tue, 15 Nov 2022 11:05:09 -0300 Subject: [PATCH 22/36] Use create/destroy event function generated in rosidl_generator_c Signed-off-by: Ivan Santiago Paunovic --- .../resource/srv__type_support.cpp.em | 78 ++----------------- 1 file changed, 8 insertions(+), 70 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index 4579772c..c1fa1c46 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -122,80 +122,18 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup @{request_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_REQUEST_MESSAGE_SUFFIX}@ @{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_RESPONSE_MESSAGE_SUFFIX}@ -void * -rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__create( - const rosidl_service_introspection_info_t * info, - rcutils_allocator_t * allocator, - const void * request_message, - const void * response_message, - bool enable_message_payload) -{ - auto * event_msg = static_cast<@event_type *>(allocator->allocate(sizeof(@event_type), allocator->state)); - if (!@(event_type)__init(event_msg)) { - allocator->deallocate(event_msg, allocator->state); - return NULL; - } - - event_msg->info.event_type = info->event_type; - event_msg->info.sequence_number = info->sequence_number; - event_msg->info.stamp.sec = info->stamp_sec; - event_msg->info.stamp.nanosec = info->stamp_nanosec; - for (size_t i = 0; i < 16; ++i) { - event_msg->info.client_id.uuid[i] = info->client_id[i]; - } - - if (!enable_message_payload) { - return event_msg; - } - - if (request_message) { - event_msg->response.capacity = 1; - event_msg->response.size = 1; - event_msg->response.data = static_cast<@response_type *>(allocator->allocate(sizeof(@response_type), allocator->state)); - if (!@(response_type)__copy(reinterpret_cast(response_message), &event_msg->response.data[0])) { - allocator->deallocate(event_msg, allocator->state); - return NULL; - } - } - if (response_message) { - event_msg->request.capacity = 1; - event_msg->request.size = 1; - event_msg->request.data = static_cast<@request_type *>(allocator->allocate(sizeof(@request_type), allocator->state)); - if (!@(request_type)__copy(reinterpret_cast(request_message), &event_msg->request.data[0])) { - allocator->deallocate(event_msg, allocator->state); - return NULL; - } - } - return event_msg; -} - -bool -rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__destroy( - void * event_msg, - rcutils_allocator_t * allocator) -{ - if (NULL == event_msg) { - return false; - } - auto * _event_msg = static_cast<@event_type *>(event_msg); - - @(event_type)__fini(reinterpret_cast<@event_type *>(_event_msg)); - if (_event_msg->request.data) { - allocator->deallocate(_event_msg->request.data, allocator->state); - } - if (_event_msg->response.data) { - allocator->deallocate(_event_msg->response.data, allocator->state); - } - allocator->deallocate(_event_msg, allocator->state); - return true; -} - static const rosidl_service_type_support_t @(service.namespaced_type.name)_service_type_support_handle = { .typesupport_identifier = rosidl_typesupport_c__typesupport_identifier, .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), .func = rosidl_typesupport_c__get_service_typesupport_handle_function, - .event_message_create_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__create, - .event_message_destroy_handle = rosidl_typesupport_c_@('__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))__event_message__destroy, + .event_message_create_handle = ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_CREATE_EVENT_MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + @(',\n '.join(service.namespaced_type.namespaced_name())) + ), + .event_message_destroy_handle = ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_DESTROY_EVENT_MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c, + @(',\n '.join(service.namespaced_type.namespaced_name())) + ), .event_typesupport = &@(service.namespaced_type.name)_Event_message_type_support_handle }; From b6863bbb8bf70a31303b8eb0af5eb2b482644a30 Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Tue, 15 Nov 2022 11:13:14 -0300 Subject: [PATCH 23/36] Remove unneeded changes Signed-off-by: Ivan Santiago Paunovic --- rosidl_typesupport_c/resource/srv__type_support.cpp.em | 7 ------- 1 file changed, 7 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index c1fa1c46..b7de61a7 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -25,9 +25,6 @@ TEMPLATE( @{ from rosidl_pycommon import convert_camel_case_to_lower_case_underscore -from rosidl_parser.definition import SERVICE_REQUEST_MESSAGE_SUFFIX -from rosidl_parser.definition import SERVICE_RESPONSE_MESSAGE_SUFFIX -from rosidl_parser.definition import SERVICE_EVENT_MESSAGE_SUFFIX include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_base = '/'.join(include_parts) @@ -118,10 +115,6 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup &_@(service.namespaced_type.name)_service_typesupport_data.data[0], }; -@{event_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX}@ -@{request_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_REQUEST_MESSAGE_SUFFIX}@ -@{response_type = '__'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_RESPONSE_MESSAGE_SUFFIX}@ - static const rosidl_service_type_support_t @(service.namespaced_type.name)_service_type_support_handle = { .typesupport_identifier = rosidl_typesupport_c__typesupport_identifier, .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), From c85bbba29baf94b63c4cae72769440ea7e34b28d Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Tue, 15 Nov 2022 17:37:29 -0300 Subject: [PATCH 24/36] Use common service event create/destroy function in cpp Signed-off-by: Ivan Santiago Paunovic --- .../resource/srv__type_support.cpp.em | 64 +------------------ 1 file changed, 2 insertions(+), 62 deletions(-) diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index afd63556..2d3f52f0 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -25,9 +25,6 @@ TEMPLATE( @{ from rosidl_pycommon import convert_camel_case_to_lower_case_underscore -from rosidl_parser.definition import SERVICE_REQUEST_MESSAGE_SUFFIX -from rosidl_parser.definition import SERVICE_RESPONSE_MESSAGE_SUFFIX -from rosidl_parser.definition import SERVICE_EVENT_MESSAGE_SUFFIX include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_base = '/'.join(include_parts) @@ -119,69 +116,12 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup &_@(service.namespaced_type.name)_service_typesupport_data.data[0], }; -@{ -event_type = '::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]) + SERVICE_EVENT_MESSAGE_SUFFIX -}@ -void * -rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_create( - const rosidl_service_introspection_info_t * info, - rcutils_allocator_t * allocator, - const void * request_message, - const void * response_message, - bool enable_message_payload) -{ - if (nullptr == info) { - throw std::invalid_argument("service introspection info struct cannot be null"); - } - if (nullptr == allocator) { - throw std::invalid_argument("allocator cannot be null"); - } - auto * event_msg = static_cast<@event_type *>(allocator->allocate(sizeof(@event_type), allocator->state)); - if (nullptr == event_msg) { - throw std::invalid_argument("allocation failed for service event message"); - } - event_msg = new(event_msg) @(event_type)(); - - event_msg->info.set__event_type(info->event_type); - event_msg->info.set__sequence_number(info->sequence_number); - event_msg->info.stamp.set__sec(info->stamp_sec); - event_msg->info.stamp.set__nanosec(info->stamp_nanosec); - - std::array client_id; - std::move(std::begin(info->client_id), std::end(info->client_id), client_id.begin()); - event_msg->info.client_id.set__uuid(client_id); - - // TODO(jacobperron): consider removing this argument and let users pass nullptr for both request and response messages - if (!enable_message_payload) { - return event_msg; - } - if (nullptr != request_message) { - event_msg->request.push_back(*static_cast(request_message)); - } - if (nullptr != response_message) { - event_msg->response.push_back(*static_cast(response_message)); - } - - return event_msg; -} - -bool -rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_destroy( - void * event_msg, - rcutils_allocator_t * allocator) -{ - auto * event_msg_ = static_cast<@event_type *>(event_msg); - event_msg_->~@(service.namespaced_type.name)_Event(); - allocator->deallocate(event_msg, allocator->state); - return true; -} - static const rosidl_service_type_support_t @(service.namespaced_type.name)_service_type_support_handle = { .typesupport_identifier = ::rosidl_typesupport_cpp::typesupport_identifier, .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), .func = ::rosidl_typesupport_cpp::get_service_typesupport_handle_function, - .event_message_create_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_create, - .event_message_destroy_handle = rosidl_@('_'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_event_message_destroy, + .event_message_create_handle = &::rosidl_typesupport_cpp::service_create_event_message<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))>, + .event_message_destroy_handle = &::rosidl_typesupport_cpp::service_destroy_event_message<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))>, .event_typesupport = ::rosidl_typesupport_cpp::get_message_type_support_handle<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Event>(), }; From 109f9b3c9c8f459cc88f294cad4b42789cd07c8c Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Thu, 17 Nov 2022 10:59:56 -0300 Subject: [PATCH 25/36] fix Signed-off-by: Ivan Santiago Paunovic --- rosidl_typesupport_cpp/resource/srv__type_support.cpp.em | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index 2d3f52f0..66b865e2 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -32,11 +32,11 @@ include_base = '/'.join(include_parts) header_files = [ 'cstddef', 'rosidl_runtime_c/service_type_support_struct.h', + 'rosidl_typesupport_cpp/service_type_support.hpp', include_base + '__struct.hpp', ] if len(type_supports) != 1: header_files.append('rosidl_typesupport_cpp/identifier.hpp') -header_files.append('rosidl_typesupport_cpp/service_type_support.hpp') if len(type_supports) != 1: header_files += [ 'rosidl_typesupport_c/type_support_map.h', From 1e90346197852d28d367c921aa6840a2c8cdcdf3 Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Tue, 6 Dec 2022 16:58:35 -0300 Subject: [PATCH 26/36] fixup test Signed-off-by: Ivan Santiago Paunovic --- .../test_service_typesupport.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp index 5885eab6..bca05df7 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -32,13 +32,13 @@ TEST(test_service_typesupport, event_message_create_and_destroy_invalid_argument // null info { EXPECT_THROW( - srv_ts->event_message_create_handle(nullptr, &allocator, nullptr, nullptr, true), + srv_ts->event_message_create_handle(nullptr, &allocator, nullptr, nullptr), std::invalid_argument); } // null allocator { EXPECT_THROW( - srv_ts->event_message_create_handle(&valid_info, nullptr, nullptr, nullptr, true), + srv_ts->event_message_create_handle(&valid_info, nullptr, nullptr, nullptr), std::invalid_argument); } } @@ -76,7 +76,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) // null request and response arguments { auto * event = static_cast( - srv_ts->event_message_create_handle(&expected_info, &allocator, nullptr, nullptr, true)); + srv_ts->event_message_create_handle(&expected_info, &allocator, nullptr, nullptr)); ASSERT_NE(event, nullptr); EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); EXPECT_EQ(event->info.event_type, expected_info.event_type); @@ -98,8 +98,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) &expected_info, &allocator, static_cast(&expected_request), - nullptr, - true)); + nullptr)); ASSERT_NE(event, nullptr); EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); @@ -123,8 +122,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) &expected_info, &allocator, nullptr, - static_cast(&expected_response), - true)); + static_cast(&expected_response))); ASSERT_NE(event, nullptr); EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); @@ -148,8 +146,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) &expected_info, &allocator, static_cast(&expected_request), - static_cast(&expected_response), - true)); + static_cast(&expected_response))); ASSERT_NE(event, nullptr); EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); From d9e1678aa7293d8108ee4ff5654ea636fbbd404e Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Tue, 6 Dec 2022 18:08:49 -0300 Subject: [PATCH 27/36] please linters Signed-off-by: Ivan Santiago Paunovic --- rosidl_typesupport_c/resource/srv__type_support.cpp.em | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index b7de61a7..a90cc4a9 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -121,12 +121,12 @@ static const rosidl_service_type_support_t @(service.namespaced_type.name)_servi .func = rosidl_typesupport_c__get_service_typesupport_handle_function, .event_message_create_handle = ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_CREATE_EVENT_MESSAGE_SYMBOL_NAME( rosidl_typesupport_c, - @(',\n '.join(service.namespaced_type.namespaced_name())) - ), + @(',\n '.join(service.namespaced_type.namespaced_name())) + ), .event_message_destroy_handle = ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_DESTROY_EVENT_MESSAGE_SYMBOL_NAME( rosidl_typesupport_c, - @(',\n '.join(service.namespaced_type.namespaced_name())) - ), + @(',\n '.join(service.namespaced_type.namespaced_name())) + ), .event_typesupport = &@(service.namespaced_type.name)_Event_message_type_support_handle }; From 863030cedbccd86d18eb8d7825bc634bc468f96c Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Tue, 13 Dec 2022 11:57:25 -0300 Subject: [PATCH 28/36] Add missing initializers Signed-off-by: Ivan Santiago Paunovic --- .../test/test_service_type_support_dispatch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosidl_typesupport_c/test/test_service_type_support_dispatch.cpp b/rosidl_typesupport_c/test/test_service_type_support_dispatch.cpp index d8e82537..e54a33c0 100644 --- a/rosidl_typesupport_c/test/test_service_type_support_dispatch.cpp +++ b/rosidl_typesupport_c/test/test_service_type_support_dispatch.cpp @@ -38,7 +38,7 @@ constexpr const char * symbols[map_size] = { rosidl_service_type_support_t get_rosidl_service_type_support(const char * identifier) { - return {identifier, nullptr, nullptr}; + return {identifier, nullptr, nullptr, nullptr, nullptr, nullptr}; } type_support_map_t get_typesupport_map(void ** library_array) From 2a44577302b7ae70b7c3c9543f96939431eac47e Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Tue, 13 Dec 2022 12:12:12 -0300 Subject: [PATCH 29/36] Don't use designated initializers in c++ Signed-off-by: Ivan Santiago Paunovic --- .../resource/srv__type_support.cpp.em | 10 +++++----- .../resource/srv__type_support.cpp.em | 12 ++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index a90cc4a9..f15e6d46 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -116,14 +116,14 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup }; static const rosidl_service_type_support_t @(service.namespaced_type.name)_service_type_support_handle = { - .typesupport_identifier = rosidl_typesupport_c__typesupport_identifier, - .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), - .func = rosidl_typesupport_c__get_service_typesupport_handle_function, - .event_message_create_handle = ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_CREATE_EVENT_MESSAGE_SYMBOL_NAME( + rosidl_typesupport_c__typesupport_identifier, + reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), + rosidl_typesupport_c__get_service_typesupport_handle_function, + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_CREATE_EVENT_MESSAGE_SYMBOL_NAME( rosidl_typesupport_c, @(',\n '.join(service.namespaced_type.namespaced_name())) ), - .event_message_destroy_handle = ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_DESTROY_EVENT_MESSAGE_SYMBOL_NAME( + ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_DESTROY_EVENT_MESSAGE_SYMBOL_NAME( rosidl_typesupport_c, @(',\n '.join(service.namespaced_type.namespaced_name())) ), diff --git a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em index 66b865e2..8004b186 100644 --- a/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_cpp/resource/srv__type_support.cpp.em @@ -117,12 +117,12 @@ static const type_support_map_t _@(service.namespaced_type.name)_service_typesup }; static const rosidl_service_type_support_t @(service.namespaced_type.name)_service_type_support_handle = { - .typesupport_identifier = ::rosidl_typesupport_cpp::typesupport_identifier, - .data = reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), - .func = ::rosidl_typesupport_cpp::get_service_typesupport_handle_function, - .event_message_create_handle = &::rosidl_typesupport_cpp::service_create_event_message<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))>, - .event_message_destroy_handle = &::rosidl_typesupport_cpp::service_destroy_event_message<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))>, - .event_typesupport = ::rosidl_typesupport_cpp::get_message_type_support_handle<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Event>(), + ::rosidl_typesupport_cpp::typesupport_identifier, + reinterpret_cast(&_@(service.namespaced_type.name)_service_typesupport_map), + ::rosidl_typesupport_cpp::get_service_typesupport_handle_function, + &::rosidl_typesupport_cpp::service_create_event_message<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))>, + &::rosidl_typesupport_cpp::service_destroy_event_message<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))>, + ::rosidl_typesupport_cpp::get_message_type_support_handle<@('::'.join([package_name, *interface_path.parents[0].parts, service.namespaced_type.name]))_Event>(), }; } // namespace rosidl_typesupport_cpp From 7fe5d18390c218717fce631606c3c49d916b00b8 Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Wed, 14 Dec 2022 11:39:14 -0300 Subject: [PATCH 30/36] fix Signed-off-by: Ivan Santiago Paunovic --- rosidl_typesupport_c/resource/srv__type_support.cpp.em | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index f15e6d46..1be068d5 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -127,7 +127,7 @@ static const rosidl_service_type_support_t @(service.namespaced_type.name)_servi rosidl_typesupport_c, @(',\n '.join(service.namespaced_type.namespaced_name())) ), - .event_typesupport = &@(service.namespaced_type.name)_Event_message_type_support_handle + &@(service.namespaced_type.name)_Event_message_type_support_handle }; } // namespace rosidl_typesupport_c From 7389d838793105009e704a98f6fd966e0a8643bd Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Wed, 14 Dec 2022 13:48:02 -0300 Subject: [PATCH 31/36] please uncrustify Signed-off-by: Ivan Santiago Paunovic --- rosidl_typesupport_c/resource/srv__type_support.cpp.em | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index 1be068d5..b23a7156 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -122,11 +122,11 @@ static const rosidl_service_type_support_t @(service.namespaced_type.name)_servi ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_CREATE_EVENT_MESSAGE_SYMBOL_NAME( rosidl_typesupport_c, @(',\n '.join(service.namespaced_type.namespaced_name())) - ), + ), ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_DESTROY_EVENT_MESSAGE_SYMBOL_NAME( rosidl_typesupport_c, @(',\n '.join(service.namespaced_type.namespaced_name())) - ), + ), &@(service.namespaced_type.name)_Event_message_type_support_handle }; From 27bbb09dfe9cd33cef4b15363b9441535071e6db Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Fri, 23 Dec 2022 15:09:08 -0300 Subject: [PATCH 32/36] service typesupport struct field renaming Signed-off-by: Ivan Santiago Paunovic --- .../test_service_typesupport.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp index bca05df7..2f8b1008 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -32,13 +32,13 @@ TEST(test_service_typesupport, event_message_create_and_destroy_invalid_argument // null info { EXPECT_THROW( - srv_ts->event_message_create_handle(nullptr, &allocator, nullptr, nullptr), + srv_ts->event_message_create_handle_function(nullptr, &allocator, nullptr, nullptr), std::invalid_argument); } // null allocator { EXPECT_THROW( - srv_ts->event_message_create_handle(&valid_info, nullptr, nullptr, nullptr), + srv_ts->event_message_create_handle_function(&valid_info, nullptr, nullptr, nullptr), std::invalid_argument); } } @@ -76,7 +76,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) // null request and response arguments { auto * event = static_cast( - srv_ts->event_message_create_handle(&expected_info, &allocator, nullptr, nullptr)); + srv_ts->event_message_create_handle_function(&expected_info, &allocator, nullptr, nullptr)); ASSERT_NE(event, nullptr); EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); EXPECT_EQ(event->info.event_type, expected_info.event_type); @@ -88,13 +88,13 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->request.size(), 0U); EXPECT_EQ(event->response.size(), 0U); - ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); + ASSERT_TRUE(srv_ts->event_message_destroy_handle_function(event, &allocator)); } // request argument set, null response argument { auto * event = static_cast( - srv_ts->event_message_create_handle( + srv_ts->event_message_create_handle_function( &expected_info, &allocator, static_cast(&expected_request), @@ -112,13 +112,13 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->response.size(), 0U); EXPECT_EQ(event->request[0].int16_value, expected_request.int16_value); EXPECT_EQ(event->request[0].uint16_value, expected_request.uint16_value); - ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); + ASSERT_TRUE(srv_ts->event_message_destroy_handle_function(event, &allocator)); } // response argument set, null request argument { auto * event = static_cast( - srv_ts->event_message_create_handle( + srv_ts->event_message_create_handle_function( &expected_info, &allocator, nullptr, @@ -136,13 +136,13 @@ TEST(test_service_typesupport, basic_types_event_message_create) ASSERT_EQ(event->response.size(), 1U); EXPECT_EQ(event->response[0].bool_value, expected_response.bool_value); EXPECT_EQ(event->response[0].string_value, expected_response.string_value); - ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); + ASSERT_TRUE(srv_ts->event_message_destroy_handle_function(event, &allocator)); } // both request and response arguments set { auto * event = static_cast( - srv_ts->event_message_create_handle( + srv_ts->event_message_create_handle_function( &expected_info, &allocator, static_cast(&expected_request), @@ -162,7 +162,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) ASSERT_EQ(event->response.size(), 1U); EXPECT_EQ(event->response[0].bool_value, expected_response.bool_value); EXPECT_EQ(event->response[0].string_value, expected_response.string_value); - ASSERT_TRUE(srv_ts->event_message_destroy_handle(event, &allocator)); + ASSERT_TRUE(srv_ts->event_message_destroy_handle_function(event, &allocator)); } } From 51907144013b3c087ce0063e1946cf48ee8e3238 Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Fri, 23 Dec 2022 18:33:53 -0300 Subject: [PATCH 33/36] Complete testing Signed-off-by: Ivan Santiago Paunovic --- rosidl_typesupport_tests/CMakeLists.txt | 8 +- .../test_service_typesupport.cpp | 180 ++++++++++++++++++ .../test_service_typesupport.cpp | 16 +- 3 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp diff --git a/rosidl_typesupport_tests/CMakeLists.txt b/rosidl_typesupport_tests/CMakeLists.txt index ef13b45e..a90ce66b 100644 --- a/rosidl_typesupport_tests/CMakeLists.txt +++ b/rosidl_typesupport_tests/CMakeLists.txt @@ -23,6 +23,7 @@ if(BUILD_TESTING) ) rosidl_get_typesupport_target(cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp") + rosidl_get_typesupport_target(c_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_c") ament_add_gtest(test_service_typesupport_cpp test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -31,7 +32,12 @@ if(BUILD_TESTING) "${cpp_typesupport_target}" ) - # TODO(jacobperron): Add tests for rosidl_typesupport_c + ament_add_gtest(test_service_typesupport_c + test/rosidl_typesupport_c/test_service_typesupport.cpp + ) + target_link_libraries(test_service_typesupport_c + "${c_typesupport_target}" + ) endif() ament_package() diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp new file mode 100644 index 00000000..45272c41 --- /dev/null +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp @@ -0,0 +1,180 @@ +// Copyright 2022 Open Source Robotics Foundation, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include "rcutils/allocator.h" + +#include "rosidl_runtime_c/string_functions.h" + +#include "rosidl_typesupport_tests/action/fibonacci.h" +#include "rosidl_typesupport_tests/srv/basic_types.h" + +TEST(test_service_typesupport, event_message_create_and_destroy_invalid_arguments) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + const rosidl_service_type_support_t * srv_ts = + rosidl_typesupport_c__get_service_type_support_handle__rosidl_typesupport_tests__srv__BasicTypes(); // NOLINT + + rosidl_service_introspection_info_t valid_info; + + // null info + EXPECT_EQ( + nullptr, + srv_ts->event_message_create_handle_function(nullptr, &allocator, nullptr, nullptr)); + // null allocator + EXPECT_EQ( + nullptr, + srv_ts->event_message_create_handle_function(&valid_info, nullptr, nullptr, nullptr)); +} + +TEST(test_service_typesupport, basic_types_event_message_create) +{ + rcutils_allocator_t allocator = rcutils_get_default_allocator(); + const rosidl_service_type_support_t * srv_ts = + rosidl_typesupport_c__get_service_type_support_handle__rosidl_typesupport_tests__srv__BasicTypes(); // NOLINT + + const rosidl_message_type_support_t * msg_ts = + rosidl_typesupport_c__get_message_type_support_handle__rosidl_typesupport_tests__srv__BasicTypes_Event(); // NOLINT + + EXPECT_STREQ(srv_ts->typesupport_identifier, "rosidl_typesupport_c"); + EXPECT_STREQ(msg_ts->typesupport_identifier, "rosidl_typesupport_c"); + + EXPECT_EQ(srv_ts->event_typesupport, msg_ts); + + rosidl_service_introspection_info_t expected_info; + expected_info.sequence_number = 2; + expected_info.event_type = 2; + expected_info.stamp_nanosec = 123; + expected_info.stamp_sec = 123; + auto uuid = std::array{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + std::copy(uuid.begin(), uuid.end(), expected_info.client_id); + + rosidl_typesupport_tests__srv__BasicTypes_Request expected_request; + rosidl_typesupport_tests__srv__BasicTypes_Request__init(&expected_request); + expected_request.int16_value = -1; + expected_request.uint16_value = 123; + rosidl_typesupport_tests__srv__BasicTypes_Response expected_response; + rosidl_typesupport_tests__srv__BasicTypes_Response__init(&expected_response); + expected_response.bool_value = true; + rosidl_runtime_c__String__assign(&expected_response.string_value, "hello world"); + + // null request and response arguments + { + auto * event = static_cast( + srv_ts->event_message_create_handle_function(&expected_info, &allocator, nullptr, nullptr)); // NOLINT + ASSERT_NE(event, nullptr); + EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); + EXPECT_EQ(event->info.event_type, expected_info.event_type); + EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); + EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); + for (int i = 0; i < 16; ++i) { + EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + } + EXPECT_EQ(event->request.size, 0U); + EXPECT_EQ(event->response.size, 0U); + + ASSERT_TRUE(srv_ts->event_message_destroy_handle_function(event, &allocator)); + } + + // request argument set, null response argument + { + auto * event = static_cast( + srv_ts->event_message_create_handle_function( + &expected_info, + &allocator, + static_cast(&expected_request), + nullptr)); + ASSERT_NE(event, nullptr); + EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); + EXPECT_EQ(event->info.event_type, expected_info.event_type); + EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); + EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); + for (int i = 0; i < 16; ++i) { + EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + } + ASSERT_EQ(event->request.size, 1U); + EXPECT_EQ(event->response.size, 0U); + EXPECT_EQ(event->request.data[0].int16_value, expected_request.int16_value); + EXPECT_EQ(event->request.data[0].uint16_value, expected_request.uint16_value); + ASSERT_TRUE(srv_ts->event_message_destroy_handle_function(event, &allocator)); + } + + // response argument set, null request argument + { + auto * event = static_cast( + srv_ts->event_message_create_handle_function( + &expected_info, + &allocator, + nullptr, + static_cast(&expected_response))); + + ASSERT_NE(event, nullptr); + EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); + EXPECT_EQ(event->info.event_type, expected_info.event_type); + EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); + EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); + for (int i = 0; i < 16; ++i) { + EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + } + EXPECT_EQ(event->request.size, 0U); + ASSERT_EQ(event->response.size, 1U); + EXPECT_EQ(event->response.data[0].bool_value, expected_response.bool_value); + EXPECT_TRUE( + rosidl_runtime_c__String__are_equal( + &event->response.data[0].string_value, &expected_response.string_value)); + ASSERT_TRUE(srv_ts->event_message_destroy_handle_function(event, &allocator)); + } + + // both request and response arguments set + { + auto * event = static_cast( + srv_ts->event_message_create_handle_function( + &expected_info, + &allocator, + static_cast(&expected_request), + static_cast(&expected_response))); + + ASSERT_NE(event, nullptr); + EXPECT_EQ(event->info.sequence_number, expected_info.sequence_number); + EXPECT_EQ(event->info.event_type, expected_info.event_type); + EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); + EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); + for (int i = 0; i < 16; ++i) { + EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + } + ASSERT_EQ(event->request.size, 1U); + EXPECT_EQ(event->request.data[0].int16_value, expected_request.int16_value); + EXPECT_EQ(event->request.data[0].uint16_value, expected_request.uint16_value); + ASSERT_EQ(event->response.size, 1U); + EXPECT_EQ(event->response.data[0].bool_value, expected_response.bool_value); + EXPECT_TRUE( + rosidl_runtime_c__String__are_equal( + &event->response.data[0].string_value, &expected_response.string_value)); + ASSERT_TRUE(srv_ts->event_message_destroy_handle_function(event, &allocator)); + } +} + +TEST(test_service_typesupport, fibonacci_action_services_event) +{ + // rcutils_allocator_t allocator = rcutils_get_default_allocator(); + const rosidl_message_type_support_t * send_goal_event_msg_ts = + rosidl_typesupport_c__get_message_type_support_handle__rosidl_typesupport_tests__action__Fibonacci_SendGoal_Event(); // NOLINT + const rosidl_message_type_support_t * get_result_event_msg_ts = + rosidl_typesupport_c__get_message_type_support_handle__rosidl_typesupport_tests__action__Fibonacci_GetResult_Event(); // NOLINT + ASSERT_NE(nullptr, send_goal_event_msg_ts); + ASSERT_NE(nullptr, get_result_event_msg_ts); + EXPECT_STREQ(send_goal_event_msg_ts->typesupport_identifier, "rosidl_typesupport_c"); + EXPECT_STREQ(get_result_event_msg_ts->typesupport_identifier, "rosidl_typesupport_c"); +} diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp index 2f8b1008..c53c15cf 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -19,6 +19,7 @@ #include "rosidl_typesupport_cpp/message_type_support.hpp" #include "rosidl_typesupport_cpp/service_type_support.hpp" +#include "rosidl_typesupport_tests/action/fibonacci.hpp" #include "rosidl_typesupport_tests/srv/basic_types.hpp" TEST(test_service_typesupport, event_message_create_and_destroy_invalid_arguments) @@ -166,4 +167,17 @@ TEST(test_service_typesupport, basic_types_event_message_create) } } -// TODO(jacobperron): Add test for action service +TEST(test_service_typesupport, fibonacci_action_services_event) +{ + // rcutils_allocator_t allocator = rcutils_get_default_allocator(); + const rosidl_message_type_support_t * send_goal_event_msg_ts = + rosidl_typesupport_cpp::get_message_type_support_handle< + rosidl_typesupport_tests::action::Fibonacci_SendGoal::Event>(); + const rosidl_message_type_support_t * get_result_event_msg_ts = + rosidl_typesupport_cpp::get_message_type_support_handle< + rosidl_typesupport_tests::action::Fibonacci_GetResult::Event>(); + ASSERT_NE(nullptr, send_goal_event_msg_ts); + ASSERT_NE(nullptr, get_result_event_msg_ts); + EXPECT_STREQ(send_goal_event_msg_ts->typesupport_identifier, "rosidl_typesupport_cpp"); + EXPECT_STREQ(get_result_event_msg_ts->typesupport_identifier, "rosidl_typesupport_cpp"); +} From c71797ffc80772868055e4518e6c6d53f4a26757 Mon Sep 17 00:00:00 2001 From: Ivan Santiago Paunovic Date: Mon, 2 Jan 2023 11:15:44 -0300 Subject: [PATCH 34/36] Fix windows CI Signed-off-by: Ivan Santiago Paunovic --- .../test/rosidl_typesupport_c/test_service_typesupport.cpp | 3 +++ .../test/rosidl_typesupport_cpp/test_service_typesupport.cpp | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp index 45272c41..07c57fec 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp @@ -12,6 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include +#include + #include #include "rcutils/allocator.h" diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp index c53c15cf..ba7c92be 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -12,6 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. + +#include +#include + #include #include "rcutils/allocator.h" From 55745b0ff5d1405db47e7441ee127240b82d4fbf Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Wed, 25 Jan 2023 17:58:27 +0000 Subject: [PATCH 35/36] Switch to using the client_gid. It should not be a UUID. Signed-off-by: Chris Lalancette --- .../resource/srv__type_support.cpp.em | 1 - .../test_service_typesupport.cpp | 12 ++++++------ .../test_service_typesupport.cpp | 12 ++++++------ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/rosidl_typesupport_c/resource/srv__type_support.cpp.em b/rosidl_typesupport_c/resource/srv__type_support.cpp.em index b23a7156..e0de2141 100644 --- a/rosidl_typesupport_c/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_c/resource/srv__type_support.cpp.em @@ -43,7 +43,6 @@ if len(type_supports) != 1: header_files.append('rosidl_typesupport_interface/macros.h') header_files.append('service_msgs/msg/service_event_info.h') header_files.append('builtin_interfaces/msg/time.h') -header_files.append('unique_identifier_msgs/msg/uuid.h') }@ @[for header_file in header_files]@ @[ if header_file in include_directives]@ diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp index 07c57fec..e41f880f 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp @@ -61,8 +61,8 @@ TEST(test_service_typesupport, basic_types_event_message_create) expected_info.event_type = 2; expected_info.stamp_nanosec = 123; expected_info.stamp_sec = 123; - auto uuid = std::array{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; - std::copy(uuid.begin(), uuid.end(), expected_info.client_id); + auto gid = std::array{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + std::copy(gid.begin(), gid.end(), expected_info.client_gid); rosidl_typesupport_tests__srv__BasicTypes_Request expected_request; rosidl_typesupport_tests__srv__BasicTypes_Request__init(&expected_request); @@ -83,7 +83,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); for (int i = 0; i < 16; ++i) { - EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + EXPECT_EQ(event->info.client_gid[i], expected_info.client_gid[i]); } EXPECT_EQ(event->request.size, 0U); EXPECT_EQ(event->response.size, 0U); @@ -105,7 +105,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); for (int i = 0; i < 16; ++i) { - EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + EXPECT_EQ(event->info.client_gid[i], expected_info.client_gid[i]); } ASSERT_EQ(event->request.size, 1U); EXPECT_EQ(event->response.size, 0U); @@ -129,7 +129,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); for (int i = 0; i < 16; ++i) { - EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + EXPECT_EQ(event->info.client_gid[i], expected_info.client_gid[i]); } EXPECT_EQ(event->request.size, 0U); ASSERT_EQ(event->response.size, 1U); @@ -155,7 +155,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); for (int i = 0; i < 16; ++i) { - EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + EXPECT_EQ(event->info.client_gid[i], expected_info.client_gid[i]); } ASSERT_EQ(event->request.size, 1U); EXPECT_EQ(event->request.data[0].int16_value, expected_request.int16_value); diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp index ba7c92be..ba028aee 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -68,8 +68,8 @@ TEST(test_service_typesupport, basic_types_event_message_create) expected_info.event_type = 2; expected_info.stamp_nanosec = 123; expected_info.stamp_sec = 123; - auto uuid = std::array{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; - std::copy(uuid.begin(), uuid.end(), expected_info.client_id); + auto gid = std::array{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + std::copy(gid.begin(), gid.end(), expected_info.client_gid); auto expected_request = rosidl_typesupport_tests::srv::BasicTypes_Request(); expected_request.int16_value = -1; @@ -88,7 +88,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); for (int i = 0; i < 16; ++i) { - EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + EXPECT_EQ(event->info.client_gid[i], expected_info.client_gid[i]); } EXPECT_EQ(event->request.size(), 0U); EXPECT_EQ(event->response.size(), 0U); @@ -111,7 +111,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); for (int i = 0; i < 16; ++i) { - EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + EXPECT_EQ(event->info.client_gid[i], expected_info.client_gid[i]); } ASSERT_EQ(event->request.size(), 1U); EXPECT_EQ(event->response.size(), 0U); @@ -135,7 +135,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); for (int i = 0; i < 16; ++i) { - EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + EXPECT_EQ(event->info.client_gid[i], expected_info.client_gid[i]); } EXPECT_EQ(event->request.size(), 0U); ASSERT_EQ(event->response.size(), 1U); @@ -159,7 +159,7 @@ TEST(test_service_typesupport, basic_types_event_message_create) EXPECT_EQ(event->info.stamp.nanosec, expected_info.stamp_nanosec); EXPECT_EQ(event->info.stamp.sec, expected_info.stamp_sec); for (int i = 0; i < 16; ++i) { - EXPECT_EQ(event->info.client_id.uuid[i], expected_info.client_id[i]); + EXPECT_EQ(event->info.client_gid[i], expected_info.client_gid[i]); } ASSERT_EQ(event->request.size(), 1U); EXPECT_EQ(event->request[0].int16_value, expected_request.int16_value); From c3c80ad576c37d543e1ce78ed5f6812c3f11360c Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Wed, 25 Jan 2023 18:26:00 +0000 Subject: [PATCH 36/36] Small fixes to fix tests. Signed-off-by: Chris Lalancette --- .../test/rosidl_typesupport_c/test_service_typesupport.cpp | 3 +-- .../test/rosidl_typesupport_cpp/test_service_typesupport.cpp | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp index e41f880f..ecc1df0a 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_c/test_service_typesupport.cpp @@ -15,7 +15,7 @@ #include #include -#include +#include "gtest/gtest.h" #include "rcutils/allocator.h" @@ -171,7 +171,6 @@ TEST(test_service_typesupport, basic_types_event_message_create) TEST(test_service_typesupport, fibonacci_action_services_event) { - // rcutils_allocator_t allocator = rcutils_get_default_allocator(); const rosidl_message_type_support_t * send_goal_event_msg_ts = rosidl_typesupport_c__get_message_type_support_handle__rosidl_typesupport_tests__action__Fibonacci_SendGoal_Event(); // NOLINT const rosidl_message_type_support_t * get_result_event_msg_ts = diff --git a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp index ba028aee..d711422e 100644 --- a/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp +++ b/rosidl_typesupport_tests/test/rosidl_typesupport_cpp/test_service_typesupport.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. - #include #include +#include -#include +#include "gtest/gtest.h" #include "rcutils/allocator.h" @@ -173,7 +173,6 @@ TEST(test_service_typesupport, basic_types_event_message_create) TEST(test_service_typesupport, fibonacci_action_services_event) { - // rcutils_allocator_t allocator = rcutils_get_default_allocator(); const rosidl_message_type_support_t * send_goal_event_msg_ts = rosidl_typesupport_cpp::get_message_type_support_handle< rosidl_typesupport_tests::action::Fibonacci_SendGoal::Event>();