From e1b3b792a61998f3864d6730883c5103421212a3 Mon Sep 17 00:00:00 2001 From: Jorge Perez Date: Thu, 13 Aug 2020 17:35:02 -0300 Subject: [PATCH 01/10] Add nullptr tests get_param_files Signed-off-by: Jorge Perez --- rcl/test/rcl/test_arguments.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/rcl/test/rcl/test_arguments.cpp b/rcl/test/rcl/test_arguments.cpp index fba50a4c4..3cf4a0c97 100644 --- a/rcl/test/rcl/test_arguments.cpp +++ b/rcl/test/rcl/test_arguments.cpp @@ -1086,7 +1086,7 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_allocs_copy { EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); }); - + rcl_arguments_t copied_args = rcl_get_zero_initialized_arguments(); rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); rcl_allocator_t saved_alloc = parsed_args.impl->allocator; @@ -1099,3 +1099,33 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_allocs_copy } parsed_args.impl->allocator = saved_alloc; } + +TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_null_get_param_files) { + const std::string parameters_filepath1 = (test_path / "test_parameters.1.yaml").string(); + const char * const argv[] = { + "process_name", "--ros-args", "--params-file", parameters_filepath1.c_str() + }; + const int argc = sizeof(argv) / sizeof(const char *); + + rcl_arguments_t parsed_args = rcl_get_zero_initialized_arguments(); + rcl_allocator_t allocator = rcl_get_default_allocator(); + rcl_ret_t ret = rcl_parse_arguments(argc, argv, &allocator, &parsed_args); + ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; + OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT( + { + EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); + }); + + ret = rcl_arguments_get_param_files(nullptr, &allocator, ¶meter_files); + EXPECT_EQ(RCL_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + + ret = rcl_arguments_get_param_files(&parsed_args, nullptr, ¶meter_files); + EXPECT_EQ(RCL_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + + ret = rcl_arguments_get_param_files(&parsed_args, &allocator, nullptr); + EXPECT_EQ(RCL_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + + rcl_arguments_t empty_parsed_args = rcl_get_zero_initialized_arguments(); + ret = rcl_arguments_get_param_files(&empty_parsed_args, &allocator, ¶meter_files); + EXPECT_EQ(RCL_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; +} From 95c07a657f72d9ad0aa13c03756be847456cfc34 Mon Sep 17 00:00:00 2001 From: Jorge Perez Date: Fri, 14 Aug 2020 12:20:42 -0300 Subject: [PATCH 02/10] Add bad alloc tests Signed-off-by: Jorge Perez --- rcl/test/rcl/test_arguments.cpp | 65 ++++++++++++++++++++++++++++----- 1 file changed, 55 insertions(+), 10 deletions(-) diff --git a/rcl/test/rcl/test_arguments.cpp b/rcl/test/rcl/test_arguments.cpp index 3cf4a0c97..a6bd71a22 100644 --- a/rcl/test/rcl/test_arguments.cpp +++ b/rcl/test/rcl/test_arguments.cpp @@ -493,6 +493,14 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_copy_bad_alloc) ret = rcl_arguments_copy(&parsed_args, &copied_args); EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; rcl_reset_error(); + + rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); + set_time_bombed_allocator_count(bomb_alloc, 1); + parsed_args.impl->allocator = bomb_alloc; + ret = rcl_arguments_copy(&parsed_args, &copied_args); + EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; + rcl_reset_error(); + parsed_args.impl->allocator = saved_alloc; EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)) << rcl_get_error_string().str; @@ -658,6 +666,13 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_remove_ros_ argv, &parsed_args, bad_alloc, &nonros_argc, &nonros_argv)); rcl_reset_error(); + rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); + set_time_bombed_allocator_count(bomb_alloc, 1); + EXPECT_EQ( + RCL_RET_BAD_ALLOC, rcl_remove_ros_arguments( + argv, &parsed_args, bomb_alloc, &nonros_argc, &nonros_argv)); + rcl_reset_error(); + EXPECT_EQ( RCL_RET_INVALID_ARGUMENT, rcl_remove_ros_arguments( argv, &parsed_args, default_allocator, NULL, &nonros_argv)); @@ -854,6 +869,17 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_param_argument_ } alloc.deallocate(parameter_files, alloc.state); + // Test bad alloc + rcl_allocator_t bad_alloc = get_failing_allocator(); + rcl_params_t * params_test = NULL; + rcl_allocator_t saved_alloc = parsed_args.impl->allocator; + parsed_args.impl->parameter_overrides->allocator = bad_alloc; + ret = rcl_arguments_get_param_overrides(&parsed_args, ¶ms_test); + EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; + EXPECT_EQ(NULL, params_test); + parsed_args.impl->parameter_overrides->allocator = saved_alloc; + + // Expected usage rcl_params_t * params = NULL; ret = rcl_arguments_get_param_overrides(&parsed_args, ¶ms); EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; @@ -966,6 +992,10 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_no_param_overri EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; rcl_reset_error(); + rcl_arguments_t empty_parsed_arg = rcl_get_zero_initialized_arguments(); + ret = rcl_arguments_get_param_overrides(&empty_parsed_arg, ¶ms); + EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + rcl_params_t preallocated_params; params = &preallocated_params; ret = rcl_arguments_get_param_overrides(&parsed_args, ¶ms); @@ -1108,24 +1138,39 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_null_get_param_ const int argc = sizeof(argv) / sizeof(const char *); rcl_arguments_t parsed_args = rcl_get_zero_initialized_arguments(); + char ** parameter_files = NULL; rcl_allocator_t allocator = rcl_get_default_allocator(); - rcl_ret_t ret = rcl_parse_arguments(argc, argv, &allocator, &parsed_args); + rcl_ret_t ret = rcl_parse_arguments(argc, argv, allocator, &parsed_args); ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT( { EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); }); - ret = rcl_arguments_get_param_files(nullptr, &allocator, ¶meter_files); - EXPECT_EQ(RCL_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; - - ret = rcl_arguments_get_param_files(&parsed_args, nullptr, ¶meter_files); - EXPECT_EQ(RCL_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + ret = rcl_arguments_get_param_files(nullptr, allocator, ¶meter_files); + EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; - ret = rcl_arguments_get_param_files(&parsed_args, &allocator, nullptr); - EXPECT_EQ(RCL_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + ret = rcl_arguments_get_param_files(&parsed_args, allocator, nullptr); + EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; rcl_arguments_t empty_parsed_args = rcl_get_zero_initialized_arguments(); - ret = rcl_arguments_get_param_files(&empty_parsed_args, &allocator, ¶meter_files); - EXPECT_EQ(RCL_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + ret = rcl_arguments_get_param_files(&empty_parsed_args, allocator, ¶meter_files); + EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; +} + +TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_parse_arg) { + const std::string parameters_filepath1 = (test_path / "test_parameters.1.yaml").string(); + const char * const argv[] = { + "process_name", "--ros-args", "--params-file", parameters_filepath1.c_str() + }; + const int argc = sizeof(argv) / sizeof(const char *); + + rcl_arguments_t parsed_args = rcl_get_zero_initialized_arguments(); + rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); + + for (int i = 0; i < 9; i++) { + set_time_bombed_allocator_count(bomb_alloc, i); + rcl_ret_t ret = rcl_parse_arguments(argc, argv, bomb_alloc, &parsed_args); + EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; + } } From 27ce30c673c4f447857634c06ae86ad027af96b3 Mon Sep 17 00:00:00 2001 From: Jorge Perez Date: Fri, 14 Aug 2020 15:14:47 -0300 Subject: [PATCH 03/10] Add missing tests Signed-off-by: Jorge Perez --- rcl/test/rcl/test_arguments.cpp | 76 +++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/rcl/test/rcl/test_arguments.cpp b/rcl/test/rcl/test_arguments.cpp index a6bd71a22..787ef1da6 100644 --- a/rcl/test/rcl/test_arguments.cpp +++ b/rcl/test/rcl/test_arguments.cpp @@ -309,6 +309,7 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_unpar const int argc = sizeof(argv) / sizeof(const char *); rcl_arguments_t parsed_args = rcl_get_zero_initialized_arguments(); rcl_allocator_t bad_alloc = get_failing_allocator(); + rcl_allocator_t allocator = rcl_get_default_allocator(); rcl_ret_t ret = rcl_parse_arguments(argc, argv, rcl_get_default_allocator(), &parsed_args); ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; EXPECT_EQ(2, rcl_arguments_get_count_unparsed(&parsed_args)); @@ -317,8 +318,16 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_unpar EXPECT_EQ( RCL_RET_BAD_ALLOC, rcl_arguments_get_unparsed(&parsed_args, bad_alloc, &actual_unparsed)); rcl_reset_error(); + EXPECT_EQ( - RCL_RET_BAD_ALLOC, rcl_arguments_get_unparsed_ros(&parsed_args, bad_alloc, &actual_unparsed)); + RCL_RET_INVALID_ARGUMENT, + rcl_arguments_get_unparsed_ros(nullptr, allocator, &actual_unparsed)); + rcl_reset_error(); + + rcl_arguments_t empty_parsed_args = rcl_get_zero_initialized_arguments(); + EXPECT_EQ( + RCL_RET_INVALID_ARGUMENT, + rcl_arguments_get_unparsed(&empty_parsed_args, allocator, &actual_unparsed)); rcl_reset_error(); EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); @@ -666,13 +675,6 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_remove_ros_ argv, &parsed_args, bad_alloc, &nonros_argc, &nonros_argv)); rcl_reset_error(); - rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); - set_time_bombed_allocator_count(bomb_alloc, 1); - EXPECT_EQ( - RCL_RET_BAD_ALLOC, rcl_remove_ros_arguments( - argv, &parsed_args, bomb_alloc, &nonros_argc, &nonros_argv)); - rcl_reset_error(); - EXPECT_EQ( RCL_RET_INVALID_ARGUMENT, rcl_remove_ros_arguments( argv, &parsed_args, default_allocator, NULL, &nonros_argv)); @@ -713,6 +715,35 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_remove_ros_ EXPECT_EQ(0, nonros_argc); } +TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_remove_ros_args) { + const char * const argv[] = { + "process_name", "-d", "--ros-args", "-r", "__ns:=/foo/bar", "-r", "__ns:=/fiz/buz", "--", + "--foo=bar", "--baz", "--ros-args", "--ros-args", "-p", "bar:=baz", "--", "--", "arg", + }; + const int argc = sizeof(argv) / sizeof(const char *); + + rcl_allocator_t alloc = rcl_get_default_allocator(); + rcl_arguments_t parsed_args = rcl_get_zero_initialized_arguments(); + rcl_ret_t ret = rcl_parse_arguments(argc, argv, alloc, &parsed_args); + ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; + OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT( + { + EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); + }); + + int nonros_argc = 0; + const char ** nonros_argv = NULL; + rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); + set_time_bombed_allocator_count(bomb_alloc, 1); + ret = rcl_remove_ros_arguments( + argv, + &parsed_args, + bomb_alloc, + &nonros_argc, + &nonros_argv); + EXPECT_EQ(RCL_RET_BAD_ALLOC, ret); +} + TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_remove_ros_args) { const char * const argv[] = { "process_name", "-d", "--ros-args", "-r", "__ns:=/foo/bar", "-r", "__ns:=/fiz/buz", "--", @@ -969,6 +1000,35 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_param_argument_ EXPECT_FALSE(param_value->bool_array_value->values[2]); } +TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_param_arguments_copy) { + const std::string parameters_filepath1 = (test_path / "test_parameters.1.yaml").string(); + const std::string parameters_filepath2 = (test_path / "test_parameters.2.yaml").string(); + const char * const argv[] = { + "process_name", "--ros-args", "--params-file", parameters_filepath1.c_str(), + "-r", "__ns:=/namespace", "random:=arg", "--params-file", parameters_filepath2.c_str() + }; + const int argc = sizeof(argv) / sizeof(const char *); + rcl_ret_t ret; + + rcl_allocator_t alloc = rcl_get_default_allocator(); + rcl_arguments_t parsed_args = rcl_get_zero_initialized_arguments(); + + ret = rcl_parse_arguments(argc, argv, alloc, &parsed_args); + ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; + OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT( + { + EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); + }); + + int parameter_filecount = rcl_arguments_get_param_files_count(&parsed_args); + EXPECT_EQ(2, parameter_filecount); + + rcl_arguments_t copied_args = rcl_get_zero_initialized_arguments(); + ret = rcl_arguments_copy(&parsed_args, &copied_args); + EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; + EXPECT_EQ(2, rcl_arguments_get_param_files_count(&copied_args)); +} + TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_no_param_overrides) { const char * const argv[] = {"process_name"}; const int argc = sizeof(argv) / sizeof(const char *); From d672046519fe21c789ff3cc309510a1fbac06031 Mon Sep 17 00:00:00 2001 From: Jorge Perez Date: Fri, 14 Aug 2020 18:05:45 -0300 Subject: [PATCH 04/10] Add bad alloc tests rcl_arguments_copy Signed-off-by: Jorge Perez --- rcl/test/rcl/test_arguments.cpp | 43 +++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/rcl/test/rcl/test_arguments.cpp b/rcl/test/rcl/test_arguments.cpp index 787ef1da6..29f68cdca 100644 --- a/rcl/test/rcl/test_arguments.cpp +++ b/rcl/test/rcl/test_arguments.cpp @@ -502,14 +502,6 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_copy_bad_alloc) ret = rcl_arguments_copy(&parsed_args, &copied_args); EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; rcl_reset_error(); - - rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); - set_time_bombed_allocator_count(bomb_alloc, 1); - parsed_args.impl->allocator = bomb_alloc; - ret = rcl_arguments_copy(&parsed_args, &copied_args); - EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; - rcl_reset_error(); - parsed_args.impl->allocator = saved_alloc; EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)) << rcl_get_error_string().str; @@ -1234,3 +1226,38 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_parse EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; } } + +TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_allocs_copy) { + const std::string parameters_filepath1 = (test_path / "test_parameters.1.yaml").string(); + const std::string parameters_filepath2 = (test_path / "test_parameters.2.yaml").string(); + const char * const argv[] = { + "process_name", "--ros-args", "--params-file", parameters_filepath1.c_str(), + "-r", "__ns:=/namespace", "random:=arg", "--params-file", parameters_filepath2.c_str(), + "-r", "/foo/bar:=/fiz/buz", "--remap", "foo:=/baz", + "-e", "/foo", "--", "foo" + }; + const int argc = sizeof(argv) / sizeof(const char *); + rcl_ret_t ret; + + rcl_allocator_t alloc = rcl_get_default_allocator(); + rcl_arguments_t parsed_args = rcl_get_zero_initialized_arguments(); + + ret = rcl_parse_arguments(argc, argv, alloc, &parsed_args); + ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; + OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT( + { + EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); + }); + + rcl_arguments_t copied_args = rcl_get_zero_initialized_arguments(); + rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); + rcl_allocator_t saved_alloc = parsed_args.impl->allocator; + parsed_args.impl->allocator = bomb_alloc; + for (int i = 0; i < 8; i++) { + set_time_bombed_allocator_count(bomb_alloc, i); + ret = rcl_arguments_copy(&parsed_args, &copied_args); + EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; + rcl_reset_error(); + } + parsed_args.impl->allocator = saved_alloc; +} From 80850b69b07c102a81090f979b2eefe6fc1a9038 Mon Sep 17 00:00:00 2001 From: Jorge Perez Date: Tue, 18 Aug 2020 13:30:51 -0300 Subject: [PATCH 05/10] Remove repeated test Signed-off-by: Jorge Perez --- rcl/test/rcl/test_arguments.cpp | 35 --------------------------------- 1 file changed, 35 deletions(-) diff --git a/rcl/test/rcl/test_arguments.cpp b/rcl/test/rcl/test_arguments.cpp index 29f68cdca..0c45bcc20 100644 --- a/rcl/test/rcl/test_arguments.cpp +++ b/rcl/test/rcl/test_arguments.cpp @@ -1226,38 +1226,3 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_parse EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; } } - -TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_allocs_copy) { - const std::string parameters_filepath1 = (test_path / "test_parameters.1.yaml").string(); - const std::string parameters_filepath2 = (test_path / "test_parameters.2.yaml").string(); - const char * const argv[] = { - "process_name", "--ros-args", "--params-file", parameters_filepath1.c_str(), - "-r", "__ns:=/namespace", "random:=arg", "--params-file", parameters_filepath2.c_str(), - "-r", "/foo/bar:=/fiz/buz", "--remap", "foo:=/baz", - "-e", "/foo", "--", "foo" - }; - const int argc = sizeof(argv) / sizeof(const char *); - rcl_ret_t ret; - - rcl_allocator_t alloc = rcl_get_default_allocator(); - rcl_arguments_t parsed_args = rcl_get_zero_initialized_arguments(); - - ret = rcl_parse_arguments(argc, argv, alloc, &parsed_args); - ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; - OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT( - { - EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); - }); - - rcl_arguments_t copied_args = rcl_get_zero_initialized_arguments(); - rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); - rcl_allocator_t saved_alloc = parsed_args.impl->allocator; - parsed_args.impl->allocator = bomb_alloc; - for (int i = 0; i < 8; i++) { - set_time_bombed_allocator_count(bomb_alloc, i); - ret = rcl_arguments_copy(&parsed_args, &copied_args); - EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; - rcl_reset_error(); - } - parsed_args.impl->allocator = saved_alloc; -} From 7ba3c2fc0a9e7853c0185bb794696f06600a6339 Mon Sep 17 00:00:00 2001 From: Jorge Perez Date: Tue, 18 Aug 2020 13:35:55 -0300 Subject: [PATCH 06/10] Remove spaces Signed-off-by: Jorge Perez --- rcl/test/rcl/test_arguments.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rcl/test/rcl/test_arguments.cpp b/rcl/test/rcl/test_arguments.cpp index 0c45bcc20..21f913f56 100644 --- a/rcl/test/rcl/test_arguments.cpp +++ b/rcl/test/rcl/test_arguments.cpp @@ -1168,7 +1168,7 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_allocs_copy { EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); }); - + rcl_arguments_t copied_args = rcl_get_zero_initialized_arguments(); rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); rcl_allocator_t saved_alloc = parsed_args.impl->allocator; From af3adb52ffb8a41d043c3803ceaefdcc48f58061 Mon Sep 17 00:00:00 2001 From: Jorge Perez Date: Wed, 19 Aug 2020 12:45:52 -0300 Subject: [PATCH 07/10] Restore erased test Signed-off-by: Jorge Perez --- rcl/test/rcl/test_arguments.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rcl/test/rcl/test_arguments.cpp b/rcl/test/rcl/test_arguments.cpp index 21f913f56..b1c9fca36 100644 --- a/rcl/test/rcl/test_arguments.cpp +++ b/rcl/test/rcl/test_arguments.cpp @@ -319,6 +319,10 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_unpar RCL_RET_BAD_ALLOC, rcl_arguments_get_unparsed(&parsed_args, bad_alloc, &actual_unparsed)); rcl_reset_error(); + EXPECT_EQ( + RCL_RET_BAD_ALLOC, rcl_arguments_get_unparsed_ros(&parsed_args, bad_alloc, &actual_unparsed)); + rcl_reset_error(); + EXPECT_EQ( RCL_RET_INVALID_ARGUMENT, rcl_arguments_get_unparsed_ros(nullptr, allocator, &actual_unparsed)); From 2d43cd8ebdfed824389899585b65af74a0c3c7e4 Mon Sep 17 00:00:00 2001 From: Jorge Perez Date: Wed, 19 Aug 2020 12:57:45 -0300 Subject: [PATCH 08/10] Relocate test Signed-off-by: Jorge Perez --- rcl/test/rcl/test_arguments.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rcl/test/rcl/test_arguments.cpp b/rcl/test/rcl/test_arguments.cpp index b1c9fca36..3e19e8dbe 100644 --- a/rcl/test/rcl/test_arguments.cpp +++ b/rcl/test/rcl/test_arguments.cpp @@ -328,13 +328,24 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_unpar rcl_arguments_get_unparsed_ros(nullptr, allocator, &actual_unparsed)); rcl_reset_error(); + EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); +} + +TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_empty_unparsed) { + rcl_allocator_t allocator = rcl_get_default_allocator(); rcl_arguments_t empty_parsed_args = rcl_get_zero_initialized_arguments(); + int * actual_unparsed = NULL; + int * actual_unparsed_ros = NULL; + EXPECT_EQ( RCL_RET_INVALID_ARGUMENT, rcl_arguments_get_unparsed(&empty_parsed_args, allocator, &actual_unparsed)); rcl_reset_error(); - EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); + EXPECT_EQ( + RCL_RET_INVALID_ARGUMENT, + rcl_arguments_get_unparsed_ros(&empty_parsed_args, allocator, &actual_unparsed_ros)); + rcl_reset_error(); } TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_params_get_counts) { From 2ac00155d2b80788975c9d84c16e9204096b6c41 Mon Sep 17 00:00:00 2001 From: Jorge Perez Date: Wed, 19 Aug 2020 17:49:44 -0300 Subject: [PATCH 09/10] Refactor bomb allocator test Signed-off-by: Jorge Perez --- rcl/test/rcl/test_arguments.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rcl/test/rcl/test_arguments.cpp b/rcl/test/rcl/test_arguments.cpp index 3e19e8dbe..c5f5044c0 100644 --- a/rcl/test/rcl/test_arguments.cpp +++ b/rcl/test/rcl/test_arguments.cpp @@ -1235,9 +1235,14 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_parse rcl_arguments_t parsed_args = rcl_get_zero_initialized_arguments(); rcl_allocator_t bomb_alloc = get_time_bombed_allocator(); - for (int i = 0; i < 9; i++) { + for (int i = 0; i < 100; i++) { set_time_bombed_allocator_count(bomb_alloc, i); rcl_ret_t ret = rcl_parse_arguments(argc, argv, bomb_alloc, &parsed_args); - EXPECT_EQ(RCL_RET_BAD_ALLOC, ret) << rcl_get_error_string().str; + if (RCL_RET_OK == ret) { + EXPECT_EQ(RCL_RET_OK, rcl_arguments_fini(&parsed_args)); + break; + } else { + EXPECT_EQ(RCL_RET_BAD_ALLOC, ret); + } } } From cf35778d72170474da35e38e4fd199c7d2d1c7a2 Mon Sep 17 00:00:00 2001 From: Jorge Perez Date: Thu, 20 Aug 2020 13:08:59 -0300 Subject: [PATCH 10/10] Add missing rcl_reset_error() checks Signed-off-by: Jorge Perez --- rcl/test/rcl/test_arguments.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rcl/test/rcl/test_arguments.cpp b/rcl/test/rcl/test_arguments.cpp index c5f5044c0..7248051b3 100644 --- a/rcl/test/rcl/test_arguments.cpp +++ b/rcl/test/rcl/test_arguments.cpp @@ -1062,6 +1062,7 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_no_param_overri rcl_arguments_t empty_parsed_arg = rcl_get_zero_initialized_arguments(); ret = rcl_arguments_get_param_overrides(&empty_parsed_arg, ¶ms); EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + rcl_reset_error(); rcl_params_t preallocated_params; params = &preallocated_params; @@ -1216,13 +1217,19 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_null_get_param_ ret = rcl_arguments_get_param_files(nullptr, allocator, ¶meter_files); EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + EXPECT_TRUE(rcl_error_is_set()); + rcl_reset_error(); ret = rcl_arguments_get_param_files(&parsed_args, allocator, nullptr); EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + EXPECT_TRUE(rcl_error_is_set()); + rcl_reset_error(); rcl_arguments_t empty_parsed_args = rcl_get_zero_initialized_arguments(); ret = rcl_arguments_get_param_files(&empty_parsed_args, allocator, ¶meter_files); EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + EXPECT_TRUE(rcl_error_is_set()); + rcl_reset_error(); } TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_parse_arg) { @@ -1243,6 +1250,7 @@ TEST_F(CLASSNAME(TestArgumentsFixture, RMW_IMPLEMENTATION), test_bad_alloc_parse break; } else { EXPECT_EQ(RCL_RET_BAD_ALLOC, ret); + rcl_reset_error(); } } }