Fix memory leak because of mock test (#800)
* Fix memory leak because of mock test Signed-off-by: Chen Lihui <Lihui.Chen@sony.com> Co-authored-by: Chris Lalancette <clalancette@openrobotics.org>
This commit is contained in:
parent
22d4eee1a7
commit
0d353dde87
1 changed files with 70 additions and 0 deletions
|
@ -458,3 +458,73 @@ TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_rcl_init_options_acce
|
|||
EXPECT_EQ(RCL_RET_ALREADY_INIT, rcl_init_options_copy(&init_options, &init_options_dst));
|
||||
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options_dst));
|
||||
}
|
||||
|
||||
// Define dummy comparison operators for rcutils_allocator_t type for use with the Mimick Library
|
||||
MOCKING_UTILS_BOOL_OPERATOR_RETURNS_FALSE(rcutils_allocator_t, ==)
|
||||
MOCKING_UTILS_BOOL_OPERATOR_RETURNS_FALSE(rcutils_allocator_t, <)
|
||||
MOCKING_UTILS_BOOL_OPERATOR_RETURNS_FALSE(rcutils_allocator_t, >)
|
||||
MOCKING_UTILS_BOOL_OPERATOR_RETURNS_FALSE(rcutils_allocator_t, !=)
|
||||
|
||||
// Tests rcl_init_options_init() mocked to fail
|
||||
TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_mocked_rcl_init_options_ini) {
|
||||
rcl_init_options_t init_options = rcl_get_zero_initialized_init_options();
|
||||
auto mock = mocking_utils::patch_and_return("lib:rcl", rmw_init_options_init, RMW_RET_ERROR);
|
||||
EXPECT_EQ(RCL_RET_ERROR, rcl_init_options_init(&init_options, rcl_get_default_allocator()));
|
||||
rcl_reset_error();
|
||||
}
|
||||
|
||||
// Tests rcl_init_options_fini() mocked to fail
|
||||
TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_mocked_rcl_init_options_fini) {
|
||||
rcl_init_options_t init_options = rcl_get_zero_initialized_init_options();
|
||||
rcl_ret_t ret = rcl_init_options_init(&init_options, rcl_get_default_allocator());
|
||||
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
|
||||
auto mock = mocking_utils::inject_on_return("lib:rcl", rmw_init_options_fini, RMW_RET_ERROR);
|
||||
EXPECT_EQ(RCL_RET_ERROR, rcl_init_options_fini(&init_options));
|
||||
rcl_reset_error();
|
||||
auto mock_ok = mocking_utils::inject_on_return("lib:rcl", rmw_init_options_fini, RMW_RET_OK);
|
||||
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options));
|
||||
}
|
||||
|
||||
// Mock rcl_init_options_copy to fail
|
||||
TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_rcl_init_copy_mocked_fail_fini) {
|
||||
rcl_init_options_t init_options = rcl_get_zero_initialized_init_options();
|
||||
rcl_ret_t ret = rcl_init_options_init(&init_options, rcl_get_default_allocator());
|
||||
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
|
||||
OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
|
||||
{
|
||||
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options)) << rcl_get_error_string().str;
|
||||
});
|
||||
rcl_init_options_t init_options_dst = rcl_get_zero_initialized_init_options();
|
||||
auto mock = mocking_utils::inject_on_return("lib:rcl", rmw_init_options_fini, RMW_RET_ERROR);
|
||||
EXPECT_EQ(RCL_RET_ERROR, rcl_init_options_copy(&init_options, &init_options_dst));
|
||||
rcl_reset_error();
|
||||
auto mock_ok = mocking_utils::inject_on_return("lib:rcl", rmw_init_options_fini, RMW_RET_OK);
|
||||
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options_dst));
|
||||
}
|
||||
|
||||
// Mock rcl_init_options_copy to fail
|
||||
TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_rcl_init_options_copy_fail_rmw_copy) {
|
||||
rcl_init_options_t init_options = rcl_get_zero_initialized_init_options();
|
||||
rcl_ret_t ret = rcl_init_options_init(&init_options, rcl_get_default_allocator());
|
||||
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
|
||||
OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
|
||||
{
|
||||
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options)) << rcl_get_error_string().str;
|
||||
});
|
||||
rcl_init_options_t init_options_dst = rcl_get_zero_initialized_init_options();
|
||||
OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
|
||||
{
|
||||
// dst is in a invalid state after failed copy
|
||||
EXPECT_EQ(
|
||||
RCL_RET_INVALID_ARGUMENT,
|
||||
rcl_init_options_fini(&init_options_dst)) << rcl_get_error_string().str;
|
||||
rcl_reset_error();
|
||||
auto mock_ok = mocking_utils::patch_and_return("lib:rcl", rmw_init_options_fini, RMW_RET_OK);
|
||||
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options_dst)) << rcl_get_error_string().str;
|
||||
});
|
||||
|
||||
// rmw_init_options_copy error is logged
|
||||
auto mock = mocking_utils::patch_and_return("lib:rcl", rmw_init_options_copy, RMW_RET_ERROR);
|
||||
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, rcl_init_options_copy(&init_options, &init_options_dst));
|
||||
rcl_reset_error();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue