@@ -834,6 +834,90 @@ TEST_F(TestGraphFixture, test_rcl_wait_for_subscribers) {
834834 rcl_reset_error ();
835835}
836836
837+ /* Test the rcl_wait_for_clients function.
838+ */
839+ TEST_F (TestGraphFixture, test_rcl_wait_for_clients) {
840+ rcl_ret_t ret;
841+ rcl_node_t zero_node = rcl_get_zero_initialized_node ();
842+ rcl_allocator_t zero_allocator = static_cast <rcl_allocator_t >(
843+ rcutils_get_zero_initialized_allocator ());
844+ rcl_allocator_t allocator = rcl_get_default_allocator ();
845+ const char * service_name = " /topic_test_rcl_wait_for_clients" ;
846+ bool success = false ;
847+
848+ // Invalid node
849+ ret = rcl_wait_for_clients (nullptr , &allocator, service_name, 1u , 100 , &success);
850+ EXPECT_EQ (RCL_RET_NODE_INVALID, ret);
851+ rcl_reset_error ();
852+ ret = rcl_wait_for_clients (&zero_node, &allocator, service_name, 1u , 100 , &success);
853+ EXPECT_EQ (RCL_RET_NODE_INVALID, ret);
854+ rcl_reset_error ();
855+ ret = rcl_wait_for_clients (this ->old_node_ptr , &allocator, service_name, 1u , 100 , &success);
856+ EXPECT_EQ (RCL_RET_NODE_INVALID, ret) << rcl_get_error_string ().str ;
857+ rcl_reset_error ();
858+ // Invalid allocator
859+ ret = rcl_wait_for_clients (this ->node_ptr , nullptr , service_name, 1u , 100 , &success);
860+ EXPECT_EQ (RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string ().str ;
861+ rcl_reset_error ();
862+ ret = rcl_wait_for_clients (this ->node_ptr , &zero_allocator, service_name, 1u , 100 , &success);
863+ EXPECT_EQ (RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string ().str ;
864+ rcl_reset_error ();
865+ // Invalid topic name
866+ ret = rcl_wait_for_clients (this ->node_ptr , &allocator, nullptr , 1u , 100 , &success);
867+ EXPECT_EQ (RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string ().str ;
868+ rcl_reset_error ();
869+ // Invalid output arg
870+ ret = rcl_wait_for_clients (this ->node_ptr , &allocator, service_name, 1u , 100 , nullptr );
871+ EXPECT_EQ (RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string ().str ;
872+ rcl_reset_error ();
873+ // Valid call (expect timeout since there are no clients)
874+ ret = rcl_wait_for_clients (this ->node_ptr , &allocator, service_name, 1u , 100 , &success);
875+ EXPECT_EQ (RCL_RET_TIMEOUT, ret) << rcl_get_error_string ().str ;
876+ rcl_reset_error ();
877+ }
878+
879+ /* Test the rcl_wait_for_clients function.
880+ */
881+ TEST_F (TestGraphFixture, test_rcl_wait_for_services) {
882+ rcl_ret_t ret;
883+ rcl_node_t zero_node = rcl_get_zero_initialized_node ();
884+ rcl_allocator_t zero_allocator = static_cast <rcl_allocator_t >(
885+ rcutils_get_zero_initialized_allocator ());
886+ rcl_allocator_t allocator = rcl_get_default_allocator ();
887+ const char * service_name = " /topic_test_rcl_wait_for_services" ;
888+ bool success = false ;
889+
890+ // Invalid node
891+ ret = rcl_wait_for_services (nullptr , &allocator, service_name, 1u , 100 , &success);
892+ EXPECT_EQ (RCL_RET_NODE_INVALID, ret);
893+ rcl_reset_error ();
894+ ret = rcl_wait_for_services (&zero_node, &allocator, service_name, 1u , 100 , &success);
895+ EXPECT_EQ (RCL_RET_NODE_INVALID, ret);
896+ rcl_reset_error ();
897+ ret = rcl_wait_for_services (this ->old_node_ptr , &allocator, service_name, 1u , 100 , &success);
898+ EXPECT_EQ (RCL_RET_NODE_INVALID, ret) << rcl_get_error_string ().str ;
899+ rcl_reset_error ();
900+ // Invalid allocator
901+ ret = rcl_wait_for_services (this ->node_ptr , nullptr , service_name, 1u , 100 , &success);
902+ EXPECT_EQ (RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string ().str ;
903+ rcl_reset_error ();
904+ ret = rcl_wait_for_services (this ->node_ptr , &zero_allocator, service_name, 1u , 100 , &success);
905+ EXPECT_EQ (RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string ().str ;
906+ rcl_reset_error ();
907+ // Invalid topic name
908+ ret = rcl_wait_for_services (this ->node_ptr , &allocator, nullptr , 1u , 100 , &success);
909+ EXPECT_EQ (RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string ().str ;
910+ rcl_reset_error ();
911+ // Invalid output arg
912+ ret = rcl_wait_for_services (this ->node_ptr , &allocator, service_name, 1u , 100 , nullptr );
913+ EXPECT_EQ (RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string ().str ;
914+ rcl_reset_error ();
915+ // Valid call (expect timeout since there are no servers)
916+ ret = rcl_wait_for_services (this ->node_ptr , &allocator, service_name, 1u , 100 , &success);
917+ EXPECT_EQ (RCL_RET_TIMEOUT, ret) << rcl_get_error_string ().str ;
918+ rcl_reset_error ();
919+ }
920+
837921void
838922check_entity_count (
839923 const rcl_node_t * node_ptr,
0 commit comments