@@ -833,6 +833,132 @@ TEST_F(TestGraphAPI, get_subscriptions_info_by_topic_with_bad_arguments) {
833
833
EXPECT_EQ (RMW_RET_OK, ret) << rmw_get_error_string ().str ;
834
834
}
835
835
836
+ TEST_F (TestGraphAPI, get_clients_info_by_service_with_bad_arguments) {
837
+ rcutils_allocator_t allocator = rcutils_get_default_allocator ();
838
+ constexpr char topic_name[] = " /test_service" ;
839
+ bool no_mangle = false ;
840
+ rmw_topic_endpoint_info_array_t clients_info =
841
+ rmw_get_zero_initialized_topic_endpoint_info_array ();
842
+
843
+ // A null node is an invalid argument.
844
+ rmw_ret_t ret = rmw_get_clients_info_by_service (
845
+ nullptr , &allocator, topic_name, no_mangle, &clients_info);
846
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
847
+ rmw_reset_error ();
848
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&clients_info));
849
+
850
+ // A node from a different implementation is an invalid argument.
851
+ const char * implementation_identifier = node->implementation_identifier ;
852
+ node->implementation_identifier = " not-an-rmw-implementation-identifier" ;
853
+ ret = rmw_get_clients_info_by_service (
854
+ node, &allocator, topic_name, no_mangle, &clients_info);
855
+ EXPECT_EQ (RMW_RET_INCORRECT_RMW_IMPLEMENTATION, ret);
856
+ node->implementation_identifier = implementation_identifier;
857
+ rmw_reset_error ();
858
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&clients_info));
859
+
860
+ // A null allocator is an invalid argument.
861
+ ret = rmw_get_clients_info_by_service (
862
+ node, nullptr , topic_name, no_mangle, &clients_info);
863
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
864
+ rmw_reset_error ();
865
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&clients_info));
866
+
867
+ // An invalid (zero initialized) allocator is an invalid argument.
868
+ rcutils_allocator_t invalid_allocator = rcutils_get_zero_initialized_allocator ();
869
+ ret = rmw_get_clients_info_by_service (
870
+ node, &invalid_allocator, topic_name, no_mangle, &clients_info);
871
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
872
+ rmw_reset_error ();
873
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&clients_info));
874
+
875
+ // A null topic name is an invalid argument.
876
+ ret = rmw_get_clients_info_by_service (
877
+ node, &allocator, nullptr , no_mangle, &clients_info);
878
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
879
+ rmw_reset_error ();
880
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&clients_info));
881
+
882
+ // A null array of topic endpoint info is an invalid argument.
883
+ ret = rmw_get_clients_info_by_service (node, &allocator, topic_name, no_mangle, nullptr );
884
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
885
+ rmw_reset_error ();
886
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&clients_info));
887
+
888
+ // A non zero initialized array of topic endpoint info is an invalid argument.
889
+ ret = rmw_topic_endpoint_info_array_init_with_size (&clients_info, 1u , &allocator);
890
+ ASSERT_EQ (RMW_RET_OK, ret) << rmw_get_error_string ().str ;
891
+ ret = rmw_get_clients_info_by_service (
892
+ node, &allocator, topic_name, no_mangle, &clients_info);
893
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
894
+ rmw_reset_error ();
895
+ ret = rmw_topic_endpoint_info_array_fini (&clients_info, &allocator);
896
+ EXPECT_EQ (RMW_RET_OK, ret) << rmw_get_error_string ().str ;
897
+ }
898
+
899
+ TEST_F (TestGraphAPI, get_servers_info_by_service_with_bad_arguments) {
900
+ rcutils_allocator_t allocator = rcutils_get_default_allocator ();
901
+ constexpr char topic_name[] = " /test_service" ;
902
+ bool no_mangle = false ;
903
+ rmw_topic_endpoint_info_array_t servers_info =
904
+ rmw_get_zero_initialized_topic_endpoint_info_array ();
905
+
906
+ // A null node is an invalid argument.
907
+ rmw_ret_t ret = rmw_get_servers_info_by_service (
908
+ nullptr , &allocator, topic_name, no_mangle, &servers_info);
909
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
910
+ rmw_reset_error ();
911
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&servers_info));
912
+
913
+ // A node from a different implementation is an invalid argument.
914
+ const char * implementation_identifier = node->implementation_identifier ;
915
+ node->implementation_identifier = " not-an-rmw-implementation-identifier" ;
916
+ ret = rmw_get_servers_info_by_service (
917
+ node, &allocator, topic_name, no_mangle, &servers_info);
918
+ EXPECT_EQ (RMW_RET_INCORRECT_RMW_IMPLEMENTATION, ret);
919
+ node->implementation_identifier = implementation_identifier;
920
+ rmw_reset_error ();
921
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&servers_info));
922
+
923
+ // A null allocator is an invalid argument.
924
+ ret = rmw_get_servers_info_by_service (
925
+ node, nullptr , topic_name, no_mangle, &servers_info);
926
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
927
+ rmw_reset_error ();
928
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&servers_info));
929
+
930
+ // An invalid (zero initialized) allocator is an invalid argument.
931
+ rcutils_allocator_t invalid_allocator = rcutils_get_zero_initialized_allocator ();
932
+ ret = rmw_get_servers_info_by_service (
933
+ node, &invalid_allocator, topic_name, no_mangle, &servers_info);
934
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
935
+ rmw_reset_error ();
936
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&servers_info));
937
+
938
+ // A null topic name is an invalid argument.
939
+ ret = rmw_get_servers_info_by_service (
940
+ node, &allocator, nullptr , no_mangle, &servers_info);
941
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
942
+ rmw_reset_error ();
943
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&servers_info));
944
+
945
+ // A null array of topic endpoint info is an invalid argument.
946
+ ret = rmw_get_servers_info_by_service (node, &allocator, topic_name, no_mangle, nullptr );
947
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
948
+ rmw_reset_error ();
949
+ EXPECT_EQ (RMW_RET_OK, rmw_topic_endpoint_info_array_check_zero (&servers_info));
950
+
951
+ // A non zero initialized array of topic endpoint info is an invalid argument.
952
+ ret = rmw_topic_endpoint_info_array_init_with_size (&servers_info, 1u , &allocator);
953
+ ASSERT_EQ (RMW_RET_OK, ret) << rmw_get_error_string ().str ;
954
+ ret = rmw_get_servers_info_by_service (
955
+ node, &allocator, topic_name, no_mangle, &servers_info);
956
+ EXPECT_EQ (RMW_RET_INVALID_ARGUMENT, ret);
957
+ rmw_reset_error ();
958
+ ret = rmw_topic_endpoint_info_array_fini (&servers_info, &allocator);
959
+ EXPECT_EQ (RMW_RET_OK, ret) << rmw_get_error_string ().str ;
960
+ }
961
+
836
962
TEST_F (TestGraphAPI, count_publishers_with_bad_arguments) {
837
963
size_t count = 0u ;
838
964
constexpr char topic_name[] = " /test_topic" ;
0 commit comments