From fb3d20dc8aacf10e07e63ac9b1c016447c25e425 Mon Sep 17 00:00:00 2001 From: Aaravanand00 Date: Sun, 28 Jun 2026 00:58:17 +0530 Subject: [PATCH] test_rclcpp: Add local and async set_parameters_atomically tests (#282) Signed-off-by: Aaravanand00 --- test_rclcpp/test/parameter_fixtures.hpp | 17 +++++++++++ test_rclcpp/test/test_local_parameters.cpp | 17 +++++++++++ test_rclcpp/test/test_remote_parameters.cpp | 33 +++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/test_rclcpp/test/parameter_fixtures.hpp b/test_rclcpp/test/parameter_fixtures.hpp index 089d7459..8b24f889 100644 --- a/test_rclcpp/test/parameter_fixtures.hpp +++ b/test_rclcpp/test/parameter_fixtures.hpp @@ -104,6 +104,23 @@ void test_set_parameters_atomically_sync( ASSERT_EQ(set_parameters_result.successful, expect_result_successful); } +void test_set_parameters_atomically_async( + std::shared_ptr node, + std::shared_ptr parameters_client, + bool expect_result_successful = true) +{ + printf("Setting parameters atomically\n"); + std::vector parameters = get_test_parameters(); + auto set_parameters_result = parameters_client->set_parameters_atomically(parameters); + rclcpp::spin_until_future_complete(node, set_parameters_result); // Wait for the results. + printf("Got set_parameters_atomically result\n"); + + const auto result = set_parameters_result.get(); + + // Check to see if they were set. + ASSERT_EQ(result.successful, expect_result_successful); +} + void test_set_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 d9f0ecac..51830ec1 100644 --- a/test_rclcpp/test/test_local_parameters.cpp +++ b/test_rclcpp/test/test_local_parameters.cpp @@ -101,6 +101,23 @@ TEST_F(test_local_parameters, local_synchronous_repeated) } } +TEST_F(test_local_parameters, local_set_parameters_atomically) +{ + auto node = rclcpp::Node::make_shared("test_parameters_local_set_atomically"); + declare_test_parameters(node); + + auto parameters = get_test_parameters(); + auto result = node->set_parameters_atomically(parameters); + + ASSERT_TRUE(result.successful); + + auto parameters_client = std::make_shared(node); + if (!parameters_client->wait_for_service(20s)) { + ASSERT_TRUE(false) << "service not available after waiting"; + } + test_get_parameters_sync(parameters_client); +} + TEST_F(test_local_parameters, local_asynchronous) { auto node = rclcpp::Node::make_shared(std::string("test_parameters_local_asynchronous")); diff --git a/test_rclcpp/test/test_remote_parameters.cpp b/test_rclcpp/test/test_remote_parameters.cpp index 261f5294..f674b7a5 100644 --- a/test_rclcpp/test/test_remote_parameters.cpp +++ b/test_rclcpp/test/test_remote_parameters.cpp @@ -59,6 +59,23 @@ TEST_F(parameters, test_remote_parameters_async) test_get_parameters_async(node, parameters_client, true); } +TEST_F(parameters, test_set_remote_parameters_atomically_async) +{ + std::string test_server_name = "test_parameters_server_allow_undeclared"; + + auto node = rclcpp::Node::make_shared(std::string("test_set_remote_parameters_atomically_async")); + + auto parameters_client = std::make_shared( + node, test_server_name); + if (!parameters_client->wait_for_service(20s)) { + ASSERT_TRUE(false) << "service not available after waiting"; + } + + test_set_parameters_atomically_async(node, parameters_client); + + test_get_parameters_async(node, parameters_client, true); +} + TEST_F(parameters, test_remote_parameters_sync) { std::string test_server_name = "test_parameters_server_allow_undeclared"; @@ -123,6 +140,22 @@ TEST_F(parameters_must_declare, test_remote_parameters_async) test_set_parameters_async(node, parameters_client, 0); } +TEST_F(parameters_must_declare, test_set_remote_parameters_atomically_async) +{ + std::string test_server_name = "test_parameters_server_must_declare"; + + auto node = rclcpp::Node::make_shared(std::string("test_set_remote_parameters_atomically_async")); + + auto parameters_client = std::make_shared( + node, + test_server_name); + if (!parameters_client->wait_for_service(20s)) { + ASSERT_TRUE(false) << "service not available after waiting"; + } + + test_set_parameters_atomically_async(node, parameters_client, false); +} + TEST_F(parameters_must_declare, test_remote_parameters_sync) { std::string test_server_name = "test_parameters_server_must_declare";