Add tests type_support module (#1308)
* Add tests getters msg type support * Add missing fini * Add tests type_support services * Reformat to re use test structure * Remove not needed headers * Improve teardown test cases * Add nullptr checks to type_support tests * Reformat type_support testing * Replace expect tests with asserts * "Improve error msg for rcl_service_ini/fini fail" * Improve test readability Signed-off-by: Jorge Perez <jjperez@ekumenlabs.com>
This commit is contained in:
parent
9f11b1d6a2
commit
420eb01a65
3 changed files with 214 additions and 0 deletions
|
@ -400,6 +400,16 @@ if(TARGET test_subscription_traits)
|
||||||
)
|
)
|
||||||
target_link_libraries(test_subscription_traits ${PROJECT_NAME})
|
target_link_libraries(test_subscription_traits ${PROJECT_NAME})
|
||||||
endif()
|
endif()
|
||||||
|
ament_add_gtest(test_type_support rclcpp/test_type_support.cpp)
|
||||||
|
if(TARGET test_type_support)
|
||||||
|
ament_target_dependencies(test_type_support
|
||||||
|
"rmw"
|
||||||
|
"rosidl_runtime_cpp"
|
||||||
|
"rosidl_typesupport_cpp"
|
||||||
|
"test_msgs"
|
||||||
|
)
|
||||||
|
target_link_libraries(test_type_support ${PROJECT_NAME})
|
||||||
|
endif()
|
||||||
ament_add_gtest(test_find_weak_nodes rclcpp/test_find_weak_nodes.cpp)
|
ament_add_gtest(test_find_weak_nodes rclcpp/test_find_weak_nodes.cpp)
|
||||||
if(TARGET test_find_weak_nodes)
|
if(TARGET test_find_weak_nodes)
|
||||||
ament_target_dependencies(test_find_weak_nodes
|
ament_target_dependencies(test_find_weak_nodes
|
||||||
|
|
|
@ -141,5 +141,10 @@ TEST_F(TestService, basic_public_getters) {
|
||||||
// Use get_service_handle specific to const service
|
// Use get_service_handle specific to const service
|
||||||
std::shared_ptr<const rcl_service_t> const_service_handle = base.get_service_handle();
|
std::shared_ptr<const rcl_service_t> const_service_handle = base.get_service_handle();
|
||||||
EXPECT_NE(nullptr, const_service_handle);
|
EXPECT_NE(nullptr, const_service_handle);
|
||||||
|
|
||||||
|
EXPECT_EQ(
|
||||||
|
RCL_RET_OK, rcl_service_fini(
|
||||||
|
&service_handle,
|
||||||
|
node_handle_int->get_node_base_interface()->get_rcl_node_handle()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
199
rclcpp/test/rclcpp/test_type_support.cpp
Normal file
199
rclcpp/test/rclcpp/test_type_support.cpp
Normal file
|
@ -0,0 +1,199 @@
|
||||||
|
// Copyright 2020 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 <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include "rclcpp/rclcpp.hpp"
|
||||||
|
#include "rclcpp/type_support_decl.hpp"
|
||||||
|
#include "test_msgs/msg/empty.hpp"
|
||||||
|
|
||||||
|
class TestTypeSupport : public ::testing::Test
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void SetUpTestCase()
|
||||||
|
{
|
||||||
|
if (!rclcpp::ok()) {
|
||||||
|
rclcpp::init(0, nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void TearDownTestCase()
|
||||||
|
{
|
||||||
|
rclcpp::shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
::testing::AssertionResult test_type_support_init_fini(const rosidl_service_type_support_t * ts)
|
||||||
|
{
|
||||||
|
rcl_service_t service_handle = rcl_get_zero_initialized_service();
|
||||||
|
rcl_service_options_t service_options = rcl_service_get_default_options();
|
||||||
|
auto node_handle = node->get_node_base_interface()->get_rcl_node_handle();
|
||||||
|
rcl_ret_t ret = rcl_service_init(
|
||||||
|
&service_handle, node_handle, ts, "base_node_service", &service_options);
|
||||||
|
if (ret != RCL_RET_OK) {
|
||||||
|
return ::testing::AssertionFailure() <<
|
||||||
|
"Failed rcl_service_init with error string: " << rcl_get_error_string().str;
|
||||||
|
}
|
||||||
|
ret = rcl_service_fini(&service_handle, node_handle);
|
||||||
|
if (ret != RCL_RET_OK) {
|
||||||
|
return ::testing::AssertionFailure() <<
|
||||||
|
"Failed rcl_service_fini with error string: " << rcl_get_error_string().str;
|
||||||
|
}
|
||||||
|
return ::testing::AssertionSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
rclcpp::Node::SharedPtr node = std::make_shared<rclcpp::Node>("my_node", "/ns");
|
||||||
|
};
|
||||||
|
|
||||||
|
const rcl_publisher_options_t PublisherOptions()
|
||||||
|
{
|
||||||
|
return rclcpp::PublisherOptionsWithAllocator<std::allocator<void>>().template
|
||||||
|
to_rcl_publisher_options<test_msgs::msg::Empty>(rclcpp::QoS(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auxiliary classes used to test rosidl_message_type_support_t getters
|
||||||
|
// defined in type_support.hpp
|
||||||
|
const rosidl_message_type_support_t * ts_parameter_event =
|
||||||
|
rclcpp::type_support::get_parameter_event_msg_type_support();
|
||||||
|
|
||||||
|
class TestTSParameterEvent : public rclcpp::PublisherBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit TestTSParameterEvent(rclcpp::Node * node)
|
||||||
|
: rclcpp::PublisherBase(
|
||||||
|
node->get_node_base_interface().get(),
|
||||||
|
"topicTSParameterEvent",
|
||||||
|
*ts_parameter_event,
|
||||||
|
PublisherOptions()) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
const rosidl_message_type_support_t * ts_set_parameter_result =
|
||||||
|
rclcpp::type_support::get_set_parameters_result_msg_type_support();
|
||||||
|
|
||||||
|
class TestTSSetParameterResult : public rclcpp::PublisherBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit TestTSSetParameterResult(rclcpp::Node * node)
|
||||||
|
: rclcpp::PublisherBase(
|
||||||
|
node->get_node_base_interface().get(),
|
||||||
|
"topicTSSetParameterResult",
|
||||||
|
*ts_set_parameter_result,
|
||||||
|
PublisherOptions()) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
const rosidl_message_type_support_t * ts_parameter_descriptor =
|
||||||
|
rclcpp::type_support::get_parameter_descriptor_msg_type_support();
|
||||||
|
|
||||||
|
class TestTSParameterDescriptor : public rclcpp::PublisherBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit TestTSParameterDescriptor(rclcpp::Node * node)
|
||||||
|
: rclcpp::PublisherBase(
|
||||||
|
node->get_node_base_interface().get(),
|
||||||
|
"topicTSParameterDescriptor",
|
||||||
|
*ts_parameter_descriptor,
|
||||||
|
PublisherOptions()) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
const rosidl_message_type_support_t * ts_list_parameter_result =
|
||||||
|
rclcpp::type_support::get_list_parameters_result_msg_type_support();
|
||||||
|
|
||||||
|
class TestTSListParametersResult : public rclcpp::PublisherBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit TestTSListParametersResult(rclcpp::Node * node)
|
||||||
|
: rclcpp::PublisherBase(
|
||||||
|
node->get_node_base_interface().get(),
|
||||||
|
"topicTSListParametersResult",
|
||||||
|
*ts_list_parameter_result,
|
||||||
|
PublisherOptions()) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
Test that the publisher is created properly for different msg typesupport
|
||||||
|
*/
|
||||||
|
TEST_F(TestTypeSupport, basic_getters) {
|
||||||
|
{
|
||||||
|
auto publisher = TestTSParameterEvent(node.get());
|
||||||
|
std::shared_ptr<const rcl_publisher_t> publisher_handle = publisher.get_publisher_handle();
|
||||||
|
EXPECT_NE(nullptr, publisher_handle);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
auto publisher = TestTSSetParameterResult(node.get());
|
||||||
|
std::shared_ptr<const rcl_publisher_t> publisher_handle = publisher.get_publisher_handle();
|
||||||
|
EXPECT_NE(nullptr, publisher_handle);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
auto publisher = TestTSParameterDescriptor(node.get());
|
||||||
|
std::shared_ptr<const rcl_publisher_t> publisher_handle = publisher.get_publisher_handle();
|
||||||
|
EXPECT_NE(nullptr, publisher_handle);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
auto publisher = TestTSListParametersResult(node.get());
|
||||||
|
std::shared_ptr<const rcl_publisher_t> publisher_handle = publisher.get_publisher_handle();
|
||||||
|
EXPECT_NE(nullptr, publisher_handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Testing type support getters */
|
||||||
|
TEST_F(TestTypeSupport, test_service_ts_get_params_srv) {
|
||||||
|
const rosidl_service_type_support_t * ts =
|
||||||
|
rclcpp::type_support::get_get_parameters_srv_type_support();
|
||||||
|
ASSERT_NE(nullptr, ts);
|
||||||
|
EXPECT_TRUE(test_type_support_init_fini(ts));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestTypeSupport, test_service_ts_get_params_srv_type) {
|
||||||
|
const rosidl_service_type_support_t * ts =
|
||||||
|
rclcpp::type_support::get_get_parameters_srv_type_support();
|
||||||
|
ASSERT_NE(nullptr, ts);
|
||||||
|
EXPECT_TRUE(test_type_support_init_fini(ts));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestTypeSupport, test_service_ts_get_parameters_types_srv) {
|
||||||
|
const rosidl_service_type_support_t * ts =
|
||||||
|
rclcpp::type_support::get_get_parameter_types_srv_type_support();
|
||||||
|
ASSERT_NE(nullptr, ts);
|
||||||
|
EXPECT_TRUE(test_type_support_init_fini(ts));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestTypeSupport, test_service_ts_set_params_srv) {
|
||||||
|
const rosidl_service_type_support_t * ts =
|
||||||
|
rclcpp::type_support::get_set_parameters_srv_type_support();
|
||||||
|
ASSERT_NE(nullptr, ts);
|
||||||
|
EXPECT_TRUE(test_type_support_init_fini(ts));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestTypeSupport, test_service_ts_list_params_srv) {
|
||||||
|
const rosidl_service_type_support_t * ts =
|
||||||
|
rclcpp::type_support::get_list_parameters_srv_type_support();
|
||||||
|
ASSERT_NE(nullptr, ts);
|
||||||
|
EXPECT_TRUE(test_type_support_init_fini(ts));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestTypeSupport, test_service_ts_describe_params_srv) {
|
||||||
|
const rosidl_service_type_support_t * ts =
|
||||||
|
rclcpp::type_support::get_describe_parameters_srv_type_support();
|
||||||
|
ASSERT_NE(nullptr, ts);
|
||||||
|
EXPECT_TRUE(test_type_support_init_fini(ts));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(TestTypeSupport, test_service_ts_set_params_atomically_srv) {
|
||||||
|
const rosidl_service_type_support_t * ts =
|
||||||
|
rclcpp::type_support::get_set_parameters_atomically_srv_type_support();
|
||||||
|
ASSERT_NE(nullptr, ts);
|
||||||
|
EXPECT_TRUE(test_type_support_init_fini(ts));
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue