Skip to content

Commit

Permalink
Tests for LoanedMessage with mocked loaned message publisher (#1366)
Browse files Browse the repository at this point in the history
Signed-off-by: Stephen Brawner <brawner@gmail.com>
  • Loading branch information
brawner committed Oct 1, 2020
1 parent d9377dc commit bf660c5
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 1 deletion.
2 changes: 1 addition & 1 deletion rclcpp/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ ament_add_gtest(test_loaned_message rclcpp/test_loaned_message.cpp)
ament_target_dependencies(test_loaned_message
"test_msgs"
)
target_link_libraries(test_loaned_message ${PROJECT_NAME})
target_link_libraries(test_loaned_message ${PROJECT_NAME} mimick)

ament_add_gtest(test_memory_strategy rclcpp/test_memory_strategy.cpp)
ament_target_dependencies(test_memory_strategy
Expand Down
50 changes: 50 additions & 0 deletions rclcpp/test/rclcpp/test_loaned_message.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

#include "test_msgs/msg/basic_types.hpp"

#include "../mocking_utils/patch.hpp"

using MessageT = test_msgs::msg::BasicTypes;
using LoanedMessageT = rclcpp::LoanedMessage<MessageT>;

Expand Down Expand Up @@ -81,3 +83,51 @@ TEST_F(TestLoanedMessage, release) {

SUCCEED();
}

TEST_F(TestLoanedMessage, construct_with_loaned_message_publisher) {
auto node = std::make_shared<rclcpp::Node>("loaned_message_test_node");
auto publisher = node->create_publisher<MessageT>("topic", 10);
std::allocator<MessageT> allocator;

auto mock_can_loan = mocking_utils::patch_and_return(
"lib:rclcpp", rcl_publisher_can_loan_messages, true);

{
auto mock_borrow_loaned = mocking_utils::patch_and_return(
"self", rcl_borrow_loaned_message, RCL_RET_ERROR);

EXPECT_THROW(
std::make_shared<LoanedMessageT>(*publisher.get(), allocator).reset(),
rclcpp::exceptions::RCLError);
}

MessageT message;
auto borrow_loaned_message_callback =
[&message](
const rcl_publisher_t *, const rosidl_message_type_support_t *, void ** ros_message) {
*ros_message = &message;
return RCL_RET_OK;
};
auto mock_borrow_loaned = mocking_utils::patch(
"self", rcl_borrow_loaned_message, borrow_loaned_message_callback);

{
auto mock_return_loaned = mocking_utils::patch_and_return(
"self", rcl_return_loaned_message_from_publisher, RCL_RET_OK);

auto loaned_message = std::make_shared<LoanedMessageT>(*publisher.get(), allocator);
EXPECT_TRUE(loaned_message->is_valid());
EXPECT_NO_THROW(loaned_message.reset());
}

{
auto loaned_message = std::make_shared<LoanedMessageT>(*publisher.get(), allocator);
EXPECT_TRUE(loaned_message->is_valid());

auto mock_return_loaned = mocking_utils::patch_and_return(
"self", rcl_return_loaned_message_from_publisher, RCL_RET_ERROR);

// No exception, it just logs an error
EXPECT_NO_THROW(loaned_message.reset());
}
}

0 comments on commit bf660c5

Please sign in to comment.