Skip to content

Commit adfb2e9

Browse files
hidmicahcorde
authored andcommitted
Bump test coverage. (#764)
* init/shutdown API * context fini API * node init/fini API * guard condition init/fini API * security APIs Signed-off-by: Michel Hidalgo <[email protected]>
1 parent bfff4c1 commit adfb2e9

14 files changed

+440
-42
lines changed

rcl/src/rcl/arguments.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -783,6 +783,9 @@ rcl_arguments_copy(
783783
const rcl_arguments_t * args,
784784
rcl_arguments_t * args_out)
785785
{
786+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
787+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_BAD_ALLOC);
788+
786789
RCL_CHECK_ARGUMENT_FOR_NULL(args, RCL_RET_INVALID_ARGUMENT);
787790
RCL_CHECK_ARGUMENT_FOR_NULL(args->impl, RCL_RET_INVALID_ARGUMENT);
788791
RCL_CHECK_ARGUMENT_FOR_NULL(args_out, RCL_RET_INVALID_ARGUMENT);

rcl/src/rcl/domain_id.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,13 @@ const char * const RCL_DOMAIN_ID_ENV_VAR = "ROS_DOMAIN_ID";
2727
rcl_ret_t
2828
rcl_get_default_domain_id(size_t * domain_id)
2929
{
30+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
31+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_ERROR);
32+
3033
const char * ros_domain_id = NULL;
3134
const char * get_env_error_str = NULL;
3235

33-
if (!domain_id) {
34-
return RCL_RET_INVALID_ARGUMENT;
35-
}
36+
RCL_CHECK_ARGUMENT_FOR_NULL(domain_id, RCL_RET_INVALID_ARGUMENT);
3637

3738
get_env_error_str = rcutils_get_env(RCL_DOMAIN_ID_ENV_VAR, &ros_domain_id);
3839
if (NULL != get_env_error_str) {

rcl/src/rcl/expand_topic_name.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ rcl_expand_topic_name(
4949
rcl_allocator_t allocator,
5050
char ** output_topic_name)
5151
{
52+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
53+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_TOPIC_NAME_INVALID);
54+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_NODE_INVALID_NAME);
55+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_NODE_INVALID_NAMESPACE);
56+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_UNKNOWN_SUBSTITUTION);
57+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_BAD_ALLOC);
58+
5259
// check arguments that could be null
5360
RCL_CHECK_ARGUMENT_FOR_NULL(input_topic_name, RCL_RET_INVALID_ARGUMENT);
5461
RCL_CHECK_ARGUMENT_FOR_NULL(node_name, RCL_RET_INVALID_ARGUMENT);

rcl/src/rcl/init_options.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ extern "C"
2121

2222
#include "./common.h"
2323
#include "./init_options_impl.h"
24+
#include "rcutils/macros.h"
2425
#include "rcl/error_handling.h"
2526
#include "rmw/error_handling.h"
2627
#include "rcutils/logging_macros.h"
@@ -36,6 +37,11 @@ rcl_get_zero_initialized_init_options(void)
3637
rcl_ret_t
3738
rcl_init_options_init(rcl_init_options_t * init_options, rcl_allocator_t allocator)
3839
{
40+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
41+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_ALREADY_INIT);
42+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_BAD_ALLOC);
43+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_ERROR);
44+
3945
RCL_CHECK_ARGUMENT_FOR_NULL(init_options, RCL_RET_INVALID_ARGUMENT);
4046
if (NULL != init_options->impl) {
4147
RCL_SET_ERROR_MSG("given init_options (rcl_init_options_t) is already initialized");
@@ -61,6 +67,11 @@ rcl_init_options_init(rcl_init_options_t * init_options, rcl_allocator_t allocat
6167
rcl_ret_t
6268
rcl_init_options_copy(const rcl_init_options_t * src, rcl_init_options_t * dst)
6369
{
70+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
71+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_ALREADY_INIT);
72+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_BAD_ALLOC);
73+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_ERROR);
74+
6475
RCL_CHECK_ARGUMENT_FOR_NULL(src, RCL_RET_INVALID_ARGUMENT);
6576
RCL_CHECK_ARGUMENT_FOR_NULL(src->impl, RCL_RET_INVALID_ARGUMENT);
6677
RCL_CHECK_ARGUMENT_FOR_NULL(dst, RCL_RET_INVALID_ARGUMENT);

rcl/src/rcl/localhost.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ rcl_get_localhost_only(rmw_localhost_only_t * localhost_only)
3030
const char * ros_local_host_env_val = NULL;
3131
const char * get_env_error_str = NULL;
3232

33-
if (!localhost_only) {
34-
return RCL_RET_INVALID_ARGUMENT;
35-
}
33+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
34+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_ERROR);
35+
RCL_CHECK_ARGUMENT_FOR_NULL(localhost_only, RCL_RET_INVALID_ARGUMENT);
3636

3737
get_env_error_str = rcutils_get_env(RCL_LOCALHOST_ENV_VAR, &ros_local_host_env_val);
3838
if (NULL != get_env_error_str) {

rcl/src/rcl/node_options.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ extern "C"
1717
{
1818
#endif
1919

20+
#include "rcutils/macros.h"
21+
2022
#include "rcl/node_options.h"
2123

2224
#include "rcl/arguments.h"
@@ -44,6 +46,8 @@ rcl_node_options_copy(
4446
const rcl_node_options_t * options,
4547
rcl_node_options_t * options_out)
4648
{
49+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
50+
4751
RCL_CHECK_ARGUMENT_FOR_NULL(options, RCL_RET_INVALID_ARGUMENT);
4852
RCL_CHECK_ARGUMENT_FOR_NULL(options_out, RCL_RET_INVALID_ARGUMENT);
4953
if (options_out == options) {
@@ -59,8 +63,7 @@ rcl_node_options_copy(
5963
options_out->use_global_arguments = options->use_global_arguments;
6064
options_out->enable_rosout = options->enable_rosout;
6165
if (NULL != options->arguments.impl) {
62-
rcl_ret_t ret = rcl_arguments_copy(&(options->arguments), &(options_out->arguments));
63-
return ret;
66+
return rcl_arguments_copy(&(options->arguments), &(options_out->arguments));
6467
}
6568
return RCL_RET_OK;
6669
}

rcl/src/rcl/remap.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "rcl/error_handling.h"
2020
#include "rcl/expand_topic_name.h"
2121
#include "rcutils/allocator.h"
22+
#include "rcutils/macros.h"
2223
#include "rcutils/strdup.h"
2324
#include "rcutils/types/string_map.h"
2425

@@ -41,6 +42,9 @@ rcl_remap_copy(
4142
const rcl_remap_t * rule,
4243
rcl_remap_t * rule_out)
4344
{
45+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
46+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_BAD_ALLOC);
47+
4448
RCL_CHECK_ARGUMENT_FOR_NULL(rule, RCL_RET_INVALID_ARGUMENT);
4549
RCL_CHECK_ARGUMENT_FOR_NULL(rule_out, RCL_RET_INVALID_ARGUMENT);
4650
RCL_CHECK_ARGUMENT_FOR_NULL(rule->impl, RCL_RET_INVALID_ARGUMENT);
@@ -289,6 +293,11 @@ rcl_remap_node_name(
289293
rcl_allocator_t allocator,
290294
char ** output_name)
291295
{
296+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
297+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_NODE_INVALID_NAME);
298+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_BAD_ALLOC);
299+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_ERROR);
300+
292301
RCL_CHECK_ALLOCATOR_WITH_MSG(&allocator, "allocator is invalid", return RCL_RET_INVALID_ARGUMENT);
293302
return _rcl_remap_name(
294303
local_arguments, global_arguments, RCL_NODENAME_REMAP, NULL, node_name, NULL, NULL,
@@ -303,6 +312,11 @@ rcl_remap_node_namespace(
303312
rcl_allocator_t allocator,
304313
char ** output_namespace)
305314
{
315+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
316+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_NODE_INVALID_NAMESPACE);
317+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_BAD_ALLOC);
318+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_ERROR);
319+
306320
RCL_CHECK_ALLOCATOR_WITH_MSG(&allocator, "allocator is invalid", return RCL_RET_INVALID_ARGUMENT);
307321
return _rcl_remap_name(
308322
local_arguments, global_arguments, RCL_NAMESPACE_REMAP, NULL, node_name, NULL, NULL,

rcl/src/rcl/validate_enclave_name.c

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <stdio.h>
1919
#include <string.h>
2020

21+
#include <rcutils/macros.h>
2122
#include <rcutils/snprintf.h>
2223

2324
#include "rmw/validate_namespace.h"
@@ -32,9 +33,7 @@ rcl_validate_enclave_name(
3233
int * validation_result,
3334
size_t * invalid_index)
3435
{
35-
if (!enclave) {
36-
return RCL_RET_INVALID_ARGUMENT;
37-
}
36+
RCL_CHECK_ARGUMENT_FOR_NULL(enclave, RCL_RET_INVALID_ARGUMENT);
3837
return rcl_validate_enclave_name_with_size(
3938
enclave, strlen(enclave), validation_result, invalid_index);
4039
}
@@ -46,12 +45,11 @@ rcl_validate_enclave_name_with_size(
4645
int * validation_result,
4746
size_t * invalid_index)
4847
{
49-
if (!enclave) {
50-
return RCL_RET_INVALID_ARGUMENT;
51-
}
52-
if (!validation_result) {
53-
return RCL_RET_INVALID_ARGUMENT;
54-
}
48+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_INVALID_ARGUMENT);
49+
RCUTILS_CAN_SET_MSG_AND_RETURN_WITH_ERROR_OF(RCL_RET_ERROR);
50+
51+
RCL_CHECK_ARGUMENT_FOR_NULL(enclave, RCL_RET_INVALID_ARGUMENT);
52+
RCL_CHECK_ARGUMENT_FOR_NULL(validation_result, RCL_RET_INVALID_ARGUMENT);
5553

5654
int tmp_validation_result;
5755
size_t tmp_invalid_index;

rcl/test/CMakeLists.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ function(test_target_function)
7474
SRCS rcl/test_context.cpp
7575
ENV ${rmw_implementation_env_var} ${memory_tools_ld_preload_env_var}
7676
APPEND_LIBRARY_DIRS ${extra_lib_dirs}
77-
LIBRARIES ${PROJECT_NAME} osrf_testing_tools_cpp::memory_tools
77+
LIBRARIES ${PROJECT_NAME} mimick osrf_testing_tools_cpp::memory_tools
7878
AMENT_DEPENDENCIES ${rmw_implementation}
7979
)
8080

@@ -157,16 +157,17 @@ function(test_target_function)
157157
SRCS rcl/test_init.cpp
158158
ENV ${rmw_implementation_env_var} ${memory_tools_ld_preload_env_var}
159159
APPEND_LIBRARY_DIRS ${extra_lib_dirs}
160-
LIBRARIES ${PROJECT_NAME} osrf_testing_tools_cpp::memory_tools
160+
LIBRARIES ${PROJECT_NAME} osrf_testing_tools_cpp::memory_tools mimick
161161
AMENT_DEPENDENCIES ${rmw_implementation}
162162
)
163163

164164
rcl_add_custom_gtest(test_node${target_suffix}
165165
SRCS rcl/test_node.cpp
166166
ENV ${rmw_implementation_env_var} ${memory_tools_ld_preload_env_var}
167167
APPEND_LIBRARY_DIRS ${extra_lib_dirs}
168-
LIBRARIES ${PROJECT_NAME} osrf_testing_tools_cpp::memory_tools
168+
LIBRARIES ${PROJECT_NAME} mimick osrf_testing_tools_cpp::memory_tools
169169
AMENT_DEPENDENCIES ${rmw_implementation} "osrf_testing_tools_cpp"
170+
TIMEOUT 240 # Large timeout to wait for fault injection tests
170171
)
171172

172173
rcl_add_custom_gtest(test_arguments${target_suffix}
@@ -200,7 +201,7 @@ function(test_target_function)
200201
SRCS rcl/test_guard_condition.cpp
201202
ENV ${rmw_implementation_env_var} ${memory_tools_ld_preload_env_var}
202203
APPEND_LIBRARY_DIRS ${extra_lib_dirs}
203-
LIBRARIES ${PROJECT_NAME} osrf_testing_tools_cpp::memory_tools
204+
LIBRARIES ${PROJECT_NAME} mimick osrf_testing_tools_cpp::memory_tools
204205
AMENT_DEPENDENCIES ${rmw_implementation} "osrf_testing_tools_cpp"
205206
)
206207

@@ -383,7 +384,7 @@ rcl_add_custom_gtest(test_expand_topic_name
383384
rcl_add_custom_gtest(test_security
384385
SRCS rcl/test_security.cpp
385386
APPEND_LIBRARY_DIRS ${extra_lib_dirs}
386-
LIBRARIES ${PROJECT_NAME}
387+
LIBRARIES ${PROJECT_NAME} mimick
387388
AMENT_DEPENDENCIES "osrf_testing_tools_cpp"
388389
)
389390

rcl/test/rcl/test_context.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
#include "rcl/error_handling.h"
2121
#include "rcl/init.h"
2222

23+
#include "rmw/rmw.h"
24+
25+
#include "../mocking_utils/patch.hpp"
26+
2327
#ifdef RMW_IMPLEMENTATION
2428
# define CLASSNAME_(NAME, SUFFIX) NAME ## __ ## SUFFIX
2529
# define CLASSNAME(NAME, SUFFIX) CLASSNAME_(NAME, SUFFIX)
@@ -148,6 +152,10 @@ TEST_F(CLASSNAME(TestContextFixture, RMW_IMPLEMENTATION), bad_fini) {
148152
ret = rcl_shutdown(&context);
149153
EXPECT_EQ(ret, RCL_RET_OK);
150154

151-
ret = rcl_context_fini(&context);
152-
EXPECT_EQ(ret, RCL_RET_OK);
155+
{
156+
auto mock = mocking_utils::inject_on_return(
157+
"lib:rcl", rmw_context_fini, RMW_RET_ERROR);
158+
EXPECT_EQ(RCL_RET_ERROR, rcl_context_fini(&context));
159+
rcl_reset_error();
160+
}
153161
}

0 commit comments

Comments
 (0)