@@ -965,3 +965,69 @@ TEST_F(TestActionServerCancelPolicy, test_action_process_cancel_request_by_time_
965965 EXPECT_TRUE (uuidcmp (goal_info_out->goal_id .uuid , cancel_request.goal_info .goal_id .uuid ));
966966 EXPECT_EQ (RCL_RET_OK, rcl_action_cancel_response_fini (&cancel_response));
967967}
968+
969+ TEST_F (TestActionServer, action_server_init_fini_maybe_fail)
970+ {
971+ rcl_allocator_t allocator = rcl_get_default_allocator ();
972+ rcl_ret_t ret;
973+ rcl_init_options_t init_options = rcl_get_zero_initialized_init_options ();
974+ ret = rcl_init_options_init (&init_options, allocator);
975+ ASSERT_EQ (RCL_RET_OK, ret) << rcl_get_error_string ().str ;
976+ rcl_context_t context = rcl_get_zero_initialized_context ();
977+ ret = rcl_init (0 , nullptr , &init_options, &context);
978+ ASSERT_EQ (RCL_RET_OK, ret) << rcl_get_error_string ().str ;
979+
980+ rcl_node_t node = rcl_get_zero_initialized_node ();
981+ rcl_node_options_t node_options = rcl_node_get_default_options ();
982+ ret = rcl_node_init (&node, " test_action_server_node" , " " , &context, &node_options);
983+ ASSERT_EQ (RCL_RET_OK, ret) << rcl_get_error_string ().str ;
984+ rcl_clock_t clock;
985+ ret = rcl_clock_init (RCL_STEADY_TIME, &clock, &allocator);
986+ ASSERT_EQ (RCL_RET_OK, ret) << rcl_get_error_string ().str ;
987+ const rosidl_action_type_support_t * ts = ROSIDL_GET_ACTION_TYPE_SUPPORT (test_msgs, Fibonacci);
988+ const rcl_action_server_options_t options = rcl_action_server_get_default_options ();
989+ const char * action_name = " test_action_server_name" ;
990+
991+ RCUTILS_FAULT_INJECTION_TEST (
992+ {
993+ rcl_action_server_t action_server = rcl_action_get_zero_initialized_server ();
994+ rcl_ret_t ret = rcl_action_server_init (
995+ &action_server, &node, &clock, ts, action_name, &options);
996+
997+ if (RCL_RET_OK == ret) {
998+ ret = rcl_action_server_fini (&action_server, &node);
999+ }
1000+ });
1001+ }
1002+
1003+ TEST_F (TestActionServerCancelPolicy, test_action_process_cancel_request_maybe_fail)
1004+ {
1005+ // Request to cancel all goals
1006+ rcl_action_cancel_request_t cancel_request = rcl_action_get_zero_initialized_cancel_request ();
1007+ cancel_request.goal_info .stamp .sec = 0 ;
1008+ cancel_request.goal_info .stamp .nanosec = 0u ;
1009+ rcl_action_cancel_response_t cancel_response = rcl_action_get_zero_initialized_cancel_response ();
1010+
1011+ RCUTILS_FAULT_INJECTION_TEST (
1012+ {
1013+ rcl_ret_t ret = rcl_action_process_cancel_request (
1014+ &this ->action_server , &cancel_request, &cancel_response);
1015+ (void )ret;
1016+ EXPECT_EQ (RCL_RET_OK, rcl_action_cancel_response_fini (&cancel_response));
1017+ });
1018+ }
1019+
1020+ TEST_F (TestActionServerCancelPolicy, test_action_expire_goals_maybe_fail)
1021+ {
1022+ const size_t capacity = 10u ;
1023+ rcl_action_goal_info_t expired_goals[10u ];
1024+ size_t num_expired = 42u ;
1025+
1026+ RCUTILS_FAULT_INJECTION_TEST (
1027+ {
1028+ rcl_ret_t ret = rcl_action_expire_goals (
1029+ &this ->action_server , expired_goals, capacity, &num_expired);
1030+ (void )ret;
1031+ rcl_reset_error ();
1032+ });
1033+ }
0 commit comments