diff --git a/test_rclcpp/test/parameter_fixtures.hpp b/test_rclcpp/test/parameter_fixtures.hpp index ec1ba527..0d581697 100644 --- a/test_rclcpp/test/parameter_fixtures.hpp +++ b/test_rclcpp/test/parameter_fixtures.hpp @@ -27,24 +27,10 @@ const double test_epsilon = 1e-6; -void declare_test_parameters(std::shared_ptr node) +std::vector +get_test_parameters() { - node->declare_parameter("foo"); - node->declare_parameter("bar"); - node->declare_parameter("barstr"); - node->declare_parameter("baz"); - node->declare_parameter("foo.first"); - node->declare_parameter("foo.second"); - node->declare_parameter("foobar"); -} - -void set_test_parameters( - std::shared_ptr parameters_client, - bool expected_result = true) -{ - printf("Setting parameters\n"); - // Set several differnet types of parameters. - auto set_parameters_results = parameters_client->set_parameters({ + return { rclcpp::Parameter("foo", 2), rclcpp::Parameter("bar", "hello"), rclcpp::Parameter("barstr", std::string("hello_str")), @@ -52,63 +38,89 @@ void set_test_parameters( rclcpp::Parameter("foo.first", 8), rclcpp::Parameter("foo.second", 42), rclcpp::Parameter("foobar", true), - }); + }; +} + +void declare_test_parameters(std::shared_ptr node, int declare_up_to = -1) +{ + auto parameters = get_test_parameters(); + + if (declare_up_to < 0 || declare_up_to > static_cast(parameters.size())) { + declare_up_to = static_cast(parameters.size()); + } + + for (int i = 0u; i < declare_up_to; ++i) { + node->declare_parameter(parameters[i].get_name()); + } +} + +void test_set_parameters_sync( + std::shared_ptr parameters_client, + int successful_up_to = -1) +{ + printf("Setting parameters\n"); + std::vector parameters = get_test_parameters(); + auto set_parameters_results = parameters_client->set_parameters(parameters); printf("Got set_parameters result\n"); + ASSERT_EQ(set_parameters_results.size(), parameters.size()); - // Check to see if they were set. - for (auto & result : set_parameters_results) { - ASSERT_EQ(result.successful, expected_result); + if (successful_up_to < 0 || successful_up_to > static_cast(parameters.size())) { + successful_up_to = static_cast(parameters.size()); + } + + // Check success values + for (int i = 0u; i < successful_up_to; ++i) { + const auto & result = set_parameters_results[i]; + ASSERT_TRUE(result.successful); + } + for (int i = successful_up_to; i < static_cast(parameters.size()); ++i) { + const auto & result = set_parameters_results[i]; + ASSERT_FALSE(result.successful); } } -void set_test_parameters_atomically( +void test_set_parameters_atomically_sync( std::shared_ptr parameters_client, - bool expected_result = true) + bool expect_result_successful = true) { printf("Setting parameters atomically\n"); - // Set several differnet types of parameters. - auto set_parameters_result = parameters_client->set_parameters_atomically({ - rclcpp::Parameter("foo", 2), - rclcpp::Parameter("bar", "hello"), - rclcpp::Parameter("barstr", std::string("hello_str")), - rclcpp::Parameter("baz", 1.45), - rclcpp::Parameter("foo.first", 8), - rclcpp::Parameter("foo.second", 42), - rclcpp::Parameter("foobar", true), - }); + std::vector parameters = get_test_parameters(); + auto set_parameters_result = parameters_client->set_parameters_atomically(parameters); printf("Got set_parameters_atomically result\n"); // Check to see if they were set. - ASSERT_EQ(set_parameters_result.successful, expected_result); + ASSERT_EQ(set_parameters_result.successful, expect_result_successful); } -void verify_set_parameters_async( +void test_set_parameters_async( std::shared_ptr node, std::shared_ptr parameters_client, - bool expected_result = true) + int successful_up_to = -1) { printf("Setting parameters\n"); - // Set several differnet types of parameters. - auto set_parameters_results = parameters_client->set_parameters({ - rclcpp::Parameter("foo", 2), - rclcpp::Parameter("bar", "hello"), - rclcpp::Parameter("barstr", std::string("hello_str")), - rclcpp::Parameter("baz", 1.45), - rclcpp::Parameter("foo.first", 8), - rclcpp::Parameter("foo.second", 42), - rclcpp::Parameter("foobar", true), - }); + std::vector parameters = get_test_parameters(); + auto set_parameters_results = parameters_client->set_parameters(parameters); rclcpp::spin_until_future_complete(node, set_parameters_results); // Wait for the results. printf("Got set_parameters result\n"); - // Check to see if they were set. - for (auto & result : set_parameters_results.get()) { - ASSERT_EQ(result.successful, expected_result); + if (successful_up_to < 0 || successful_up_to > static_cast(parameters.size())) { + successful_up_to = static_cast(parameters.size()); + } + + const auto results = set_parameters_results.get(); + ASSERT_EQ(results.size(), parameters.size()); + + // Check success values + for (int i = 0u; i < successful_up_to; ++i) { + ASSERT_TRUE(results[i].successful); + } + for (int i = successful_up_to; i < static_cast(parameters.size()); ++i) { + ASSERT_FALSE(results[i].successful); } } -void verify_test_parameters( +void test_get_parameters_sync( std::shared_ptr parameters_client) { printf("Listing parameters with recursive depth\n"); @@ -218,7 +230,7 @@ void verify_test_parameters( } } -void verify_get_parameters_async( +void test_get_parameters_async( std::shared_ptr node, std::shared_ptr parameters_client) { diff --git a/test_rclcpp/test/test_local_parameters.cpp b/test_rclcpp/test/test_local_parameters.cpp index d99cdc3e..56a6239d 100644 --- a/test_rclcpp/test/test_local_parameters.cpp +++ b/test_rclcpp/test/test_local_parameters.cpp @@ -73,8 +73,8 @@ TEST(CLASSNAME(test_local_parameters, RMW_IMPLEMENTATION), local_synchronous) { if (!parameters_client->wait_for_service(20s)) { ASSERT_TRUE(false) << "service not available after waiting"; } - set_test_parameters(parameters_client); - verify_test_parameters(parameters_client); + test_set_parameters_sync(parameters_client); + test_get_parameters_sync(parameters_client); } TEST(CLASSNAME(test_local_parameters, RMW_IMPLEMENTATION), local_synchronous_repeated) { @@ -85,10 +85,10 @@ TEST(CLASSNAME(test_local_parameters, RMW_IMPLEMENTATION), local_synchronous_rep if (!parameters_client->wait_for_service(20s)) { ASSERT_TRUE(false) << "service not available after waiting"; } - set_test_parameters(parameters_client); + test_set_parameters_sync(parameters_client); for (int i = 0; i < 10; ++i) { printf("iteration: %d\n", i); - verify_test_parameters(parameters_client); + test_get_parameters_sync(parameters_client); } } @@ -100,8 +100,8 @@ TEST(CLASSNAME(test_local_parameters, RMW_IMPLEMENTATION), local_asynchronous) { if (!parameters_client->wait_for_service(20s)) { ASSERT_TRUE(false) << "service not available after waiting"; } - verify_set_parameters_async(node, parameters_client); - verify_get_parameters_async(node, parameters_client); + test_set_parameters_async(node, parameters_client); + test_get_parameters_async(node, parameters_client); } class ParametersAsyncNode : public rclcpp::Node diff --git a/test_rclcpp/test/test_remote_parameters.cpp b/test_rclcpp/test/test_remote_parameters.cpp index 6786f2e1..bd10b9e6 100644 --- a/test_rclcpp/test/test_remote_parameters.cpp +++ b/test_rclcpp/test/test_remote_parameters.cpp @@ -47,9 +47,9 @@ TEST(CLASSNAME(parameters, rmw_implementation), test_remote_parameters_async) { ASSERT_TRUE(false) << "service not available after waiting"; } - verify_set_parameters_async(node, parameters_client); + test_set_parameters_async(node, parameters_client); - verify_get_parameters_async(node, parameters_client); + test_get_parameters_async(node, parameters_client); } TEST(CLASSNAME(parameters, rmw_implementation), test_remote_parameters_sync) { @@ -64,9 +64,9 @@ TEST(CLASSNAME(parameters, rmw_implementation), test_remote_parameters_sync) { ASSERT_TRUE(false) << "service not available after waiting"; } - set_test_parameters(parameters_client); + test_set_parameters_sync(parameters_client); - verify_test_parameters(parameters_client); + test_get_parameters_sync(parameters_client); } TEST(CLASSNAME(parameters, rmw_implementation), test_set_remote_parameters_atomically_sync) { @@ -81,9 +81,9 @@ TEST(CLASSNAME(parameters, rmw_implementation), test_set_remote_parameters_atomi ASSERT_TRUE(false) << "service not available after waiting"; } - set_test_parameters_atomically(parameters_client); + test_set_parameters_atomically_sync(parameters_client); - verify_test_parameters(parameters_client); + test_get_parameters_sync(parameters_client); } TEST(CLASSNAME(parameters_must_declare, rmw_implementation), test_remote_parameters_async) { @@ -99,7 +99,7 @@ TEST(CLASSNAME(parameters_must_declare, rmw_implementation), test_remote_paramet ASSERT_TRUE(false) << "service not available after waiting"; } - verify_set_parameters_async(node, parameters_client, false); + test_set_parameters_async(node, parameters_client, 0); } TEST(CLASSNAME(parameters_must_declare, rmw_implementation), test_remote_parameters_sync) { @@ -115,7 +115,7 @@ TEST(CLASSNAME(parameters_must_declare, rmw_implementation), test_remote_paramet ASSERT_TRUE(false) << "service not available after waiting"; } - set_test_parameters(parameters_client, false); + test_set_parameters_sync(parameters_client, 0); } TEST( @@ -134,5 +134,5 @@ TEST( ASSERT_TRUE(false) << "service not available after waiting"; } - set_test_parameters_atomically(parameters_client, false); + test_set_parameters_atomically_sync(parameters_client, false); }