[rcl_action] Bugfix: check if number of elements to allocate for message is greater than zero

This commit is contained in:
Jacob Perron 2018-10-31 17:29:36 -07:00
parent 4d8cb487f8
commit e64fcaf5a8
3 changed files with 41 additions and 9 deletions

View file

@ -87,14 +87,24 @@ TEST(TestActionTypes, test_init_fini_goal_status_array)
ASSERT_EQ(status_array.status_list.size, 0u);
ret = rcl_action_goal_status_array_init(&status_array, num_status, invalid_allocator);
EXPECT_EQ(ret, RCL_RET_INVALID_ARGUMENT);
EXPECT_EQ(status_array.status_list.size, 0u);
EXPECT_EQ(status_array.status_list.data, nullptr);
// Initialize with zero size
status_array = rcl_action_get_zero_initialized_goal_status_array();
ASSERT_EQ(status_array.status_list.size, 0u);
ret = rcl_action_goal_status_array_init(&status_array, 0, rcl_get_default_allocator());
EXPECT_EQ(ret, RCL_RET_INVALID_ARGUMENT);
EXPECT_EQ(status_array.status_list.size, 0u);
EXPECT_EQ(status_array.status_list.data, nullptr);
// Initialize with valid arguments
status_array = rcl_action_get_zero_initialized_goal_status_array();
ASSERT_EQ(status_array.status_list.size, 0u);
ret = rcl_action_goal_status_array_init(&status_array, num_status, rcl_get_default_allocator());
EXPECT_EQ(ret, RCL_RET_OK);
EXPECT_EQ(num_status, status_array.status_list.size);
EXPECT_NE(nullptr, status_array.status_list.data);
EXPECT_EQ(status_array.status_list.size, num_status);
EXPECT_NE(status_array.status_list.data, nullptr);
// Finalize with invalid status array
ret = rcl_action_goal_status_array_fini(nullptr, rcl_get_default_allocator());
@ -126,6 +136,16 @@ TEST(TestActionTypes, test_init_fini_cancel_response)
ASSERT_EQ(cancel_response.goals_canceling.size, 0u);
ret = rcl_action_cancel_response_init(&cancel_response, num_goals_canceling, invalid_allocator);
EXPECT_EQ(ret, RCL_RET_INVALID_ARGUMENT);
EXPECT_EQ(cancel_response.goals_canceling.size, 0u);
EXPECT_EQ(cancel_response.goals_canceling.data, nullptr);
// Initialize with zero size
cancel_response = rcl_action_get_zero_initialized_cancel_response();
ASSERT_EQ(cancel_response.goals_canceling.size, 0u);
ret = rcl_action_cancel_response_init(&cancel_response, 0, rcl_get_default_allocator());
EXPECT_EQ(ret, RCL_RET_INVALID_ARGUMENT);
EXPECT_EQ(cancel_response.goals_canceling.size, 0u);
EXPECT_EQ(cancel_response.goals_canceling.data, nullptr);
// Initialize with valid arguments
cancel_response = rcl_action_get_zero_initialized_cancel_response();
@ -135,8 +155,8 @@ TEST(TestActionTypes, test_init_fini_cancel_response)
num_goals_canceling,
rcl_get_default_allocator());
EXPECT_EQ(ret, RCL_RET_OK);
EXPECT_EQ(num_goals_canceling, cancel_response.goals_canceling.size);
EXPECT_NE(nullptr, cancel_response.goals_canceling.data);
EXPECT_EQ(cancel_response.goals_canceling.size, num_goals_canceling);
EXPECT_NE(cancel_response.goals_canceling.data, nullptr);
// Finalize with invalid cancel response
ret = rcl_action_cancel_response_fini(nullptr, rcl_get_default_allocator());