Skip to content

Commit dd65645

Browse files
committed
test for rclcpp::serializedmessage
Signed-off-by: Karsten Knese <karsten@openrobotics.org>
1 parent d89ef50 commit dd65645

4 files changed

Lines changed: 64 additions & 1 deletion

File tree

rclcpp/include/rclcpp/subscription_traits.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <memory>
1919

2020
#include "rclcpp/function_traits.hpp"
21+
#include "rclcpp/serialized_message.hpp"
2122
#include "rclcpp/subscription_options.hpp"
2223
#include "rcl/types.h"
2324

@@ -50,6 +51,15 @@ struct is_serialized_subscription_argument<std::shared_ptr<rcl_serialized_messag
5051
: std::true_type
5152
{};
5253

54+
template<>
55+
struct is_serialized_subscription_argument<rclcpp::SerializedMessage>: std::true_type
56+
{};
57+
58+
template<>
59+
struct is_serialized_subscription_argument<std::shared_ptr<rclcpp::SerializedMessage>>
60+
: std::true_type
61+
{};
62+
5363
template<typename T>
5464
struct is_serialized_subscription : is_serialized_subscription_argument<T>
5565
{};

rclcpp/test/test_publisher.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ TEST_F(TestPublisher, various_creation_signatures) {
149149
*/
150150
TEST_F(TestPublisher, test_is_serialized) {
151151
initialize();
152-
153152
using test_msgs::msg::Empty;
154153
{
155154
auto publisher = node->create_publisher<Empty>("topic", 42);

rclcpp/test/test_subscription.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,40 @@ TEST_F(TestSubscription, various_creation_signatures) {
231231
}
232232
}
233233

234+
/*
235+
Testing for serialized subscriptions
236+
*/
237+
TEST_F(TestSubscription, test_is_serialized) {
238+
initialize();
239+
using test_msgs::msg::Empty;
240+
auto cb = [](test_msgs::msg::Empty::SharedPtr) {};
241+
auto cb_rcl_serialized = [](std::shared_ptr<rcl_serialized_message_t>) {};
242+
auto cb_rclcpp_serialized = [](std::shared_ptr<rclcpp::SerializedMessage>) {};
243+
{
244+
auto sub = node->create_subscription<Empty>("topic", 1, cb);
245+
EXPECT_FALSE(sub->is_serialized());
246+
}
247+
{
248+
auto sub = rclcpp::create_subscription<Empty>(node, "topic", rclcpp::QoS(1), cb);
249+
EXPECT_FALSE(sub->is_serialized());
250+
}
251+
{
252+
auto sub = rclcpp::create_subscription<Empty>(node, "topic", rclcpp::QoS(1), cb_rcl_serialized);
253+
EXPECT_TRUE(sub->is_serialized());
254+
}
255+
{
256+
auto ts = *rosidl_typesupport_cpp::get_message_type_support_handle<Empty>();
257+
auto sub = rclcpp::create_subscription<rcl_serialized_message_t>(
258+
node, "topic", ts, rclcpp::QoS(1), cb_rcl_serialized);
259+
EXPECT_TRUE(sub->is_serialized());
260+
}
261+
{
262+
auto ts = *rosidl_typesupport_cpp::get_message_type_support_handle<Empty>();
263+
auto sub = rclcpp::create_subscription<rclcpp::SerializedMessage>(
264+
node, "topic", ts, rclcpp::QoS(1), cb_rclcpp_serialized);
265+
EXPECT_TRUE(sub->is_serialized());
266+
}
267+
}
234268
/*
235269
Testing subscriptions using std::bind.
236270
*/

rclcpp/test/test_subscription_traits.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,16 @@ void not_serialized_unique_ptr_callback(
5252
(void) unused;
5353
}
5454

55+
void rclcpp_serialized_callback_copy(rclcpp::SerializedMessage unused)
56+
{
57+
(void) unused;
58+
}
59+
60+
void rclcpp_serialized_callback_shared_ptr(std::shared_ptr<rclcpp::SerializedMessage> unused)
61+
{
62+
(void) unused;
63+
}
64+
5565
TEST(TestSubscriptionTraits, is_serialized_callback) {
5666
// Test regular functions
5767
auto cb1 = &serialized_callback_copy;
@@ -97,6 +107,16 @@ TEST(TestSubscriptionTraits, is_serialized_callback) {
97107
static_assert(
98108
rclcpp::subscription_traits::is_serialized_callback<decltype(cb7)>::value == false,
99109
"passing a fancy unique_ptr of test_msgs::msg::Empty is not a serialized callback");
110+
111+
auto cb8 = &rclcpp_serialized_callback_copy;
112+
static_assert(
113+
rclcpp::subscription_traits::is_serialized_callback<decltype(cb8)>::value == true,
114+
"rclcpp::SerializedMessage in a first argument callback makes it a serialized callback");
115+
116+
auto cb9 = &rclcpp_serialized_callback_shared_ptr;
117+
static_assert(
118+
rclcpp::subscription_traits::is_serialized_callback<decltype(cb9)>::value == true,
119+
"std::shared_ptr<rclcpp::SerializedMessage> in a callback makes it a serialized callback");
100120
}
101121

102122
TEST(TestSubscriptionTraits, callback_messages) {

0 commit comments

Comments
 (0)