Tests for LoanedMessage with mocked loaned message publisher (#1366)
Signed-off-by: Stephen Brawner <brawner@gmail.com>
This commit is contained in:
parent
1b9cf547a4
commit
17c53a16f0
2 changed files with 51 additions and 1 deletions
|
@ -164,7 +164,7 @@ ament_add_gtest(test_loaned_message rclcpp/test_loaned_message.cpp)
|
||||||
ament_target_dependencies(test_loaned_message
|
ament_target_dependencies(test_loaned_message
|
||||||
"test_msgs"
|
"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_add_gtest(test_memory_strategy rclcpp/test_memory_strategy.cpp)
|
||||||
ament_target_dependencies(test_memory_strategy
|
ament_target_dependencies(test_memory_strategy
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
|
|
||||||
#include "test_msgs/msg/basic_types.hpp"
|
#include "test_msgs/msg/basic_types.hpp"
|
||||||
|
|
||||||
|
#include "../mocking_utils/patch.hpp"
|
||||||
|
|
||||||
using MessageT = test_msgs::msg::BasicTypes;
|
using MessageT = test_msgs::msg::BasicTypes;
|
||||||
using LoanedMessageT = rclcpp::LoanedMessage<MessageT>;
|
using LoanedMessageT = rclcpp::LoanedMessage<MessageT>;
|
||||||
|
|
||||||
|
@ -81,3 +83,51 @@ TEST_F(TestLoanedMessage, release) {
|
||||||
|
|
||||||
SUCCEED();
|
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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue