Skip to content

Commit

Permalink
Implement test for subscription loaned messages (#186)
Browse files Browse the repository at this point in the history
* Implement test for rmw_take_loaned_message.

Signed-off-by: Miguel Company <[email protected]>

* Implement test for rmw_take_loaned_message_with_info.

Signed-off-by: Miguel Company <[email protected]>

* Implement test for rmw_return_loaned_message_from_subscription.

Signed-off-by: Miguel Company <[email protected]>
  • Loading branch information
MiguelCompany authored Apr 13, 2021
1 parent 59a5495 commit 0890417
Showing 1 changed file with 97 additions and 8 deletions.
105 changes: 97 additions & 8 deletions test_rmw_implementation/test/test_subscription.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -808,23 +808,112 @@ class CLASSNAME (TestSubscriptionUseLoan, RMW_IMPLEMENTATION)
};

TEST_F(CLASSNAME(TestSubscriptionUseLoan, RMW_IMPLEMENTATION), rmw_take_loaned_message) {
// TODO(lobotuerk): add tests for rmw_take_loaned_message() when we have an implementation.
FAIL() << "Not implemented";
bool taken = false;
void * loaned_message = nullptr;
rmw_subscription_allocation_t * null_allocation{nullptr}; // still valid allocation
rmw_ret_t ret = rmw_take_loaned_message(nullptr, &loaned_message, &taken, null_allocation);
EXPECT_EQ(RMW_RET_INVALID_ARGUMENT, ret) << rmw_get_error_string().str;
rmw_reset_error();
EXPECT_EQ(nullptr, loaned_message);
EXPECT_FALSE(taken);

ret = rmw_take_loaned_message(sub, nullptr, &taken, null_allocation);
EXPECT_EQ(RMW_RET_INVALID_ARGUMENT, ret) << rmw_get_error_string().str;
rmw_reset_error();
EXPECT_EQ(nullptr, loaned_message);
EXPECT_FALSE(taken);

ret = rmw_take_loaned_message(sub, &loaned_message, nullptr, null_allocation);
EXPECT_EQ(RMW_RET_INVALID_ARGUMENT, ret) << rmw_get_error_string().str;
rmw_reset_error();
EXPECT_EQ(nullptr, loaned_message);
EXPECT_FALSE(taken);

ret = rmw_take_loaned_message(sub, &loaned_message, &taken, null_allocation);
EXPECT_EQ(RMW_RET_OK, ret) << rmw_get_error_string().str;
EXPECT_EQ(nullptr, loaned_message);
EXPECT_FALSE(taken);

const char * implementation_identifier = sub->implementation_identifier;
sub->implementation_identifier = "not-an-rmw-implementation-identifier";
ret = rmw_take_loaned_message(sub, &loaned_message, &taken, null_allocation);
EXPECT_EQ(RMW_RET_INCORRECT_RMW_IMPLEMENTATION, ret) << rmw_get_error_string().str;
rmw_reset_error();
sub->implementation_identifier = implementation_identifier;
}

TEST_F(
CLASSNAME(TestSubscriptionUseLoan, RMW_IMPLEMENTATION), rmw_take_loaned_message_with_info) {
// TODO(lobotuerk): add tests for rmw_take_loaned_message_with_info()
// when we have an implementation.
FAIL() << "Not implemented";
bool taken = false;
void * loaned_message = nullptr;
rmw_message_info_t message_info = rmw_get_zero_initialized_message_info();
rmw_subscription_allocation_t * null_allocation{nullptr}; // still valid allocation
rmw_ret_t ret = rmw_take_loaned_message_with_info(
nullptr, &loaned_message, &taken, &message_info, null_allocation);
EXPECT_EQ(RMW_RET_INVALID_ARGUMENT, ret) << rmw_get_error_string().str;
rmw_reset_error();
EXPECT_EQ(nullptr, loaned_message);
EXPECT_FALSE(taken);

ret = rmw_take_loaned_message_with_info(
sub, nullptr, &taken, &message_info, null_allocation);
EXPECT_EQ(RMW_RET_INVALID_ARGUMENT, ret) << rmw_get_error_string().str;
rmw_reset_error();
EXPECT_EQ(nullptr, loaned_message);
EXPECT_FALSE(taken);

ret = rmw_take_loaned_message_with_info(
sub, &loaned_message, nullptr, &message_info, null_allocation);
EXPECT_EQ(RMW_RET_INVALID_ARGUMENT, ret) << rmw_get_error_string().str;
rmw_reset_error();
EXPECT_EQ(nullptr, loaned_message);
EXPECT_FALSE(taken);

ret = rmw_take_loaned_message_with_info(
sub, &loaned_message, &taken, nullptr, null_allocation);
EXPECT_EQ(RMW_RET_INVALID_ARGUMENT, ret) << rmw_get_error_string().str;
rmw_reset_error();
EXPECT_EQ(nullptr, loaned_message);
EXPECT_FALSE(taken);

ret = rmw_take_loaned_message_with_info(
sub, &loaned_message, &taken, &message_info, null_allocation);
EXPECT_EQ(RMW_RET_OK, ret) << rmw_get_error_string().str;
EXPECT_EQ(nullptr, loaned_message);
EXPECT_FALSE(taken);

const char * implementation_identifier = sub->implementation_identifier;
sub->implementation_identifier = "not-an-rmw-implementation-identifier";
ret = rmw_take_loaned_message_with_info(
sub, &loaned_message, &taken, &message_info, null_allocation);
EXPECT_EQ(RMW_RET_INCORRECT_RMW_IMPLEMENTATION, ret) << rmw_get_error_string().str;
rmw_reset_error();
sub->implementation_identifier = implementation_identifier;
}

TEST_F(
CLASSNAME(TestSubscriptionUseLoan, RMW_IMPLEMENTATION),
rmw_return_loaned_message_from_subscription) {
// TODO(lobotuerk): add tests for rmw_return_loaned_message_from_subscription()
// when we have an implementation.
FAIL() << "Not implemented";
test_msgs__msg__BasicTypes msg{};
rmw_ret_t ret = rmw_return_loaned_message_from_subscription(nullptr, &msg);
EXPECT_EQ(RMW_RET_INVALID_ARGUMENT, ret) << rmw_get_error_string().str;
rmw_reset_error();

ret = rmw_return_loaned_message_from_subscription(sub, nullptr);
EXPECT_EQ(RMW_RET_INVALID_ARGUMENT, ret) << rmw_get_error_string().str;
rmw_reset_error();

// Returning a sample that was not loaned
ret = rmw_return_loaned_message_from_subscription(sub, &msg);
EXPECT_EQ(RMW_RET_ERROR, ret) << rmw_get_error_string().str;
rmw_reset_error();

const char * implementation_identifier = sub->implementation_identifier;
sub->implementation_identifier = "not-an-rmw-implementation-identifier";
ret = rmw_return_loaned_message_from_subscription(sub, &msg);
EXPECT_EQ(RMW_RET_INCORRECT_RMW_IMPLEMENTATION, ret) << rmw_get_error_string().str;
rmw_reset_error();
sub->implementation_identifier = implementation_identifier;
}

bool operator==(const test_msgs__msg__BasicTypes & m1, const test_msgs__msg__BasicTypes & m2)
Expand Down

0 comments on commit 0890417

Please sign in to comment.