diff --git a/rclcpp/test/CMakeLists.txt b/rclcpp/test/CMakeLists.txt index 69a04dcf78..5b42d31b40 100644 --- a/rclcpp/test/CMakeLists.txt +++ b/rclcpp/test/CMakeLists.txt @@ -567,7 +567,7 @@ endif() ament_add_gtest(test_guard_condition rclcpp/test_guard_condition.cpp APPEND_LIBRARY_DIRS "${append_library_dirs}") if(TARGET test_guard_condition) - target_link_libraries(test_guard_condition ${PROJECT_NAME}) + target_link_libraries(test_guard_condition ${PROJECT_NAME} mimick) endif() ament_add_gtest(test_wait_set rclcpp/test_wait_set.cpp diff --git a/rclcpp/test/rclcpp/test_guard_condition.cpp b/rclcpp/test/rclcpp/test_guard_condition.cpp index 474d1d4bcc..8100cf1c9b 100644 --- a/rclcpp/test/rclcpp/test_guard_condition.cpp +++ b/rclcpp/test/rclcpp/test_guard_condition.cpp @@ -18,6 +18,8 @@ #include "rclcpp/rclcpp.hpp" +#include "../mocking_utils/patch.hpp" + class TestGuardCondition : public ::testing::Test { protected: @@ -54,6 +56,14 @@ TEST_F(TestGuardCondition, construction_and_destruction) { (void)gc; }, rclcpp::exceptions::RCLInvalidArgument); } + + { + auto mock = mocking_utils::inject_on_return( + "lib:rclcpp", rcl_guard_condition_fini, RCL_RET_ERROR); + auto gc = std::make_shared(); + // This just logs an error on destruction + EXPECT_NO_THROW(gc.reset()); + } } /* @@ -82,6 +92,13 @@ TEST_F(TestGuardCondition, get_rcl_guard_condition) { TEST_F(TestGuardCondition, trigger) { { auto gc = std::make_shared(); - gc->trigger(); + EXPECT_NO_THROW(gc->trigger()); + + { + auto mock = mocking_utils::patch_and_return( + "lib:rclcpp", rcl_trigger_guard_condition, RCL_RET_ERROR); + auto gc = std::make_shared(); + EXPECT_THROW(gc->trigger(), rclcpp::exceptions::RCLError); + } } }