From 1b7b73dda184a7c66a26a3fa0643056572bb4ec0 Mon Sep 17 00:00:00 2001 From: Emerson Knapp Date: Mon, 26 Jun 2023 18:18:58 -0700 Subject: [PATCH] Add a basic test for the new interface Signed-off-by: Emerson Knapp --- .../src/rclcpp/node_interfaces/node_base.cpp | 7 --- rclcpp/test/rclcpp/CMakeLists.txt | 5 ++ .../test_node_type_descriptions.cpp | 63 +++++++++++++++++++ 3 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 rclcpp/test/rclcpp/node_interfaces/test_node_type_descriptions.cpp diff --git a/rclcpp/src/rclcpp/node_interfaces/node_base.cpp b/rclcpp/src/rclcpp/node_interfaces/node_base.cpp index 93af10f38d..36e1afb932 100644 --- a/rclcpp/src/rclcpp/node_interfaces/node_base.cpp +++ b/rclcpp/src/rclcpp/node_interfaces/node_base.cpp @@ -115,13 +115,6 @@ NodeBase::NodeBase( throw_from_rcl_error(ret, "failed to initialize rcl node"); } - // To capture all types from builtin topics and services, the type cache needs to be initialized - // before any other components are initialized. - ret = rcl_node_type_cache_init(rcl_node.get()); - if (ret != RCL_RET_OK) { - throw_from_rcl_error(ret, "failed to initialize type cache"); - } - node_handle_.reset( rcl_node.release(), [logging_mutex](rcl_node_t * node) -> void { diff --git a/rclcpp/test/rclcpp/CMakeLists.txt b/rclcpp/test/rclcpp/CMakeLists.txt index dcb1d36d8e..8c31a95415 100644 --- a/rclcpp/test/rclcpp/CMakeLists.txt +++ b/rclcpp/test/rclcpp/CMakeLists.txt @@ -262,6 +262,11 @@ if(TARGET test_node_interfaces__node_topics) "test_msgs") target_link_libraries(test_node_interfaces__node_topics ${PROJECT_NAME} mimick) endif() +ament_add_gtest(test_node_interfaces__node_type_descriptions + node_interfaces/test_node_type_descriptions.cpp) +if(TARGET test_node_interfaces__node_type_descriptions) + target_link_libraries(test_node_interfaces__node_type_descriptions ${PROJECT_NAME} mimick) +endif() ament_add_gtest(test_node_interfaces__node_waitables node_interfaces/test_node_waitables.cpp) if(TARGET test_node_interfaces__node_waitables) diff --git a/rclcpp/test/rclcpp/node_interfaces/test_node_type_descriptions.cpp b/rclcpp/test/rclcpp/node_interfaces/test_node_type_descriptions.cpp new file mode 100644 index 0000000000..79ef6c3bcf --- /dev/null +++ b/rclcpp/test/rclcpp/node_interfaces/test_node_type_descriptions.cpp @@ -0,0 +1,63 @@ +// Copyright 2023 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 "rclcpp/node.hpp" +#include "rclcpp/node_interfaces/node_type_descriptions.hpp" + +class TestNodeTypeDescriptions : public ::testing::Test +{ +public: + void SetUp() + { + rclcpp::init(0, nullptr); + } + + void TearDown() + { + rclcpp::shutdown(); + } +}; + +TEST_F(TestNodeTypeDescriptions, interface_created) +{ + rclcpp::Node node{"node", "ns"}; + ASSERT_NE(nullptr, node.get_node_type_descriptions_interface()); +} + +TEST_F(TestNodeTypeDescriptions, disabled_no_service) +{ + rclcpp::NodeOptions node_options; + node_options.append_parameter_override("start_type_description_service", false); + rclcpp::Node node{"node", "ns", node_options}; + + rcl_node_t * rcl_node = node.get_node_base_interface()->get_rcl_node_handle(); + rcl_service_t * srv = nullptr; + rcl_ret_t ret = rcl_node_get_type_description_service(rcl_node, &srv); + ASSERT_EQ(RCL_RET_NOT_INIT, ret); +} + +TEST_F(TestNodeTypeDescriptions, enabled_creates_service) +{ + rclcpp::NodeOptions node_options; + node_options.append_parameter_override("start_type_description_service", true); + rclcpp::Node node{"node", "ns", node_options}; + + rcl_node_t * rcl_node = node.get_node_base_interface()->get_rcl_node_handle(); + rcl_service_t * srv = nullptr; + rcl_ret_t ret = rcl_node_get_type_description_service(rcl_node, &srv); + ASSERT_EQ(RCL_RET_OK, ret); + ASSERT_NE(nullptr, srv); +}