From 65b1164ef29ef325d358836007844402a458e3d3 Mon Sep 17 00:00:00 2001 From: Antonio Cuadros <49162117+Acuadros95@users.noreply.github.com> Date: Wed, 13 Apr 2022 13:09:52 +0200 Subject: [PATCH] Fix parameter tests timeout (#283) * Add sleep on parameter event match * Reset global values for gtest_repeat * Fix var name --- .../test/rclc_parameter/test_parameter.cpp | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/rclc_parameter/test/rclc_parameter/test_parameter.cpp b/rclc_parameter/test/rclc_parameter/test_parameter.cpp index 68f9e876..8ecd6a14 100644 --- a/rclc_parameter/test/rclc_parameter/test_parameter.cpp +++ b/rclc_parameter/test/rclc_parameter/test_parameter.cpp @@ -30,8 +30,8 @@ using namespace std::chrono_literals; // #include "parameter_client.hpp" -static int callcack_calls = 0; -static rclc_parameter_type_t expected_type; +static int callbacks_calls = 0; +static rclc_parameter_type_t expected_type = RCLC_PARAMETER_NOT_SET; static union { bool bool_value; int64_t integer_value; @@ -40,7 +40,7 @@ static union { void on_parameter_changed(Parameter * param) { - callcack_calls++; + callbacks_calls++; ASSERT_EQ(expected_type, param->value.type); switch (param->value.type) { case RCLC_PARAMETER_BOOL: @@ -58,8 +58,14 @@ void on_parameter_changed(Parameter * param) } TEST(Test, rclc_node_init_default) { + auto default_spin_timeout = std::chrono::duration(5000); std::string node_name("test_node"); + // Reset global tests values + expected_type = RCLC_PARAMETER_NOT_SET; + expected_value.bool_value = false; + callbacks_calls = 0; + // Create auxiliar RCLCPP node rclcpp::init(0, NULL); auto param_client_node = std::make_shared("param_aux_client"); @@ -161,7 +167,7 @@ TEST(Test, rclc_node_init_default) { rclc_parameter_get_double(¶m_server, "param3", ¶m3); ASSERT_EQ(param3, 0.01); - ASSERT_EQ(callcack_calls, 3); + ASSERT_EQ(callbacks_calls, 3); // Spin RCLC parameter server in a thread bool spin = true; @@ -173,8 +179,11 @@ TEST(Test, rclc_node_init_default) { } ); + // Wait for parameter server + ASSERT_TRUE(parameters_client->wait_for_service(default_spin_timeout)); + // Use auxiliar RCLCPP node for check - auto list_params = parameters_client->list_parameters({}, 10); + auto list_params = parameters_client->list_parameters({}, 10, default_spin_timeout); ASSERT_EQ(list_params.names.size(), 4u); for (auto & name : list_params.names) { std::vector::iterator it; @@ -241,11 +250,18 @@ TEST(Test, rclc_node_init_default) { promise->set_value(); }); + // Sleep for pub/sub match + std::this_thread::sleep_for(500ms); + expected_type = RCLC_PARAMETER_BOOL; expected_value.double_value = false; rclc_parameter_set_bool(¶m_server, "param1", false); - rclcpp::spin_until_future_complete(param_client_node, future.share()); + ASSERT_EQ( + rclcpp::spin_until_future_complete( + param_client_node, future.share(), + default_spin_timeout), + rclcpp::FutureReturnCode::SUCCESS); ASSERT_EQ(on_parameter_calls, 1u);