Add bad arguments tests for coverage (#698)

* Add test context bad_fini
* Add bad name service tests
* Add default case validation result
* Add bad_arg tests rcl_lexer_lookahead2_accept
* Add bad_arg test rcl_trigger_guard_condition
* Add bad arguments events test
* Add message_lost event test
* Disable failing test
* Address peer review comments
* Remove failing test
* Separate non related API tests
* Add comments to explain error causes
* Use test fixture without params
* Replace nullptr with NULL

Signed-off-by: Jorge Perez <jjperez@ekumenlabs.com>
This commit is contained in:
Jorge Perez 2020-07-03 18:19:18 -03:00 committed by Alejandro Hernández Cordero
parent 7cc97f48f3
commit 3d6c2e90ba
6 changed files with 131 additions and 0 deletions

View file

@ -128,4 +128,26 @@ TEST_F(CLASSNAME(TestContextFixture, RMW_IMPLEMENTATION), nominal) {
TEST_F(CLASSNAME(TestContextFixture, RMW_IMPLEMENTATION), bad_fini) { TEST_F(CLASSNAME(TestContextFixture, RMW_IMPLEMENTATION), bad_fini) {
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, rcl_context_fini(nullptr)); EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, rcl_context_fini(nullptr));
rcl_reset_error(); rcl_reset_error();
rcl_init_options_t init_options = rcl_get_zero_initialized_init_options();
rcl_ret_t ret = rcl_init_options_init(&init_options, rcl_get_default_allocator());
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
{
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options)) << rcl_get_error_string().str;
});
rcl_context_t context = rcl_get_zero_initialized_context();
ret = rcl_init(0, nullptr, &init_options, &context);
EXPECT_EQ(RCL_RET_OK, ret);
ret = rcl_context_fini(&context);
EXPECT_EQ(ret, RCL_RET_INVALID_ARGUMENT);
rcl_reset_error();
ret = rcl_shutdown(&context);
EXPECT_EQ(ret, RCL_RET_OK);
ret = rcl_context_fini(&context);
EXPECT_EQ(ret, RCL_RET_OK);
} }

View file

@ -696,6 +696,40 @@ TEST_P(TestEventFixture, test_pubsub_incompatible_qos)
tear_down_publisher_subscriber(); tear_down_publisher_subscriber();
} }
/*
* Passing bad param subscriber/publisher event ini
*/
TEST_F(TestEventFixture, test_bad_event_ini)
{
setup_publisher_subscriber(default_qos_profile, default_qos_profile);
const rcl_subscription_event_type_t unknown_sub_type = (rcl_subscription_event_type_t) 5432;
const rcl_publisher_event_type_t unknown_pub_type = (rcl_publisher_event_type_t) 5432;
publisher_event = rcl_get_zero_initialized_event();
rcl_ret_t ret = rcl_publisher_event_init(
&publisher_event,
&publisher,
unknown_pub_type);
EXPECT_EQ(ret, RCL_RET_INVALID_ARGUMENT);
subscription_event = rcl_get_zero_initialized_event();
ret = rcl_subscription_event_init(
&subscription_event,
&subscription,
unknown_sub_type);
EXPECT_EQ(ret, RCL_RET_INVALID_ARGUMENT);
tear_down_publisher_subscriber();
}
/*
* Passing bad argument to get_rmw_handle
*/
TEST_F(TestEventFixture, test_bad_get_handle)
{
EXPECT_EQ(NULL, rcl_event_get_rmw_handle(NULL));
}
static static
std::array<TestIncompatibleQosEventParams, 5> std::array<TestIncompatibleQosEventParams, 5>
get_test_pubsub_incompatible_qos_inputs() get_test_pubsub_incompatible_qos_inputs()

View file

@ -216,3 +216,14 @@ TEST_F(
EXPECT_EQ(RCL_RET_OK, ret); EXPECT_EQ(RCL_RET_OK, ret);
rcl_reset_error(); rcl_reset_error();
} }
/* Tests trigger_guard_condition with bad arguments
*/
TEST_F(
CLASSNAME(TestGuardConditionFixture, RMW_IMPLEMENTATION), test_rcl_guard_condition_bad_arg) {
rcl_guard_condition_t zero_guard_condition = rcl_get_zero_initialized_guard_condition();
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, rcl_trigger_guard_condition(nullptr));
rcl_reset_error();
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, rcl_trigger_guard_condition(&zero_guard_condition));
rcl_reset_error();
}

View file

@ -195,6 +195,47 @@ TEST_F(CLASSNAME(TestLexerLookaheadFixture, RMW_IMPLEMENTATION), test_accept)
EXPECT_EQ(RCL_LEXEME_EOF, lexeme); EXPECT_EQ(RCL_LEXEME_EOF, lexeme);
} }
TEST_F(CLASSNAME(TestLexerLookaheadFixture, RMW_IMPLEMENTATION), test_accept_bad_arg)
{
rcl_lexer_lookahead2_t buffer;
rcl_lexer_lookahead2_t buffer_not_ini = rcl_get_zero_initialized_lexer_lookahead2();
SCOPE_LOOKAHEAD2(buffer, "foobar/");
rcl_lexeme_t lexeme = RCL_LEXEME_NONE;
const char * lexeme_text;
size_t lexeme_text_length = 0;
// Can't accept without peek first
rcl_ret_t ret = rcl_lexer_lookahead2_accept(&buffer, &lexeme_text, &lexeme_text_length);
EXPECT_EQ(RCL_RET_ERROR, ret) << rcl_get_error_string().str;
rcl_reset_error();
// Expected usage
ret = rcl_lexer_lookahead2_peek(&buffer, &lexeme);
EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
EXPECT_EQ(RCL_LEXEME_TOKEN, lexeme);
// Invalid nullptr parameter
ret = rcl_lexer_lookahead2_accept(nullptr, &lexeme_text, &lexeme_text_length);
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
rcl_reset_error();
// Invalid not ini parameter
ret = rcl_lexer_lookahead2_accept(&buffer_not_ini, &lexeme_text, &lexeme_text_length);
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
rcl_reset_error();
// Invalid nullptr as lexeme_text_length
ret = rcl_lexer_lookahead2_accept(&buffer, &lexeme_text, nullptr);
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
rcl_reset_error();
// Invalid nullptr as lexeme_text
ret = rcl_lexer_lookahead2_accept(&buffer, nullptr, &lexeme_text_length);
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
rcl_reset_error();
}
TEST_F(CLASSNAME(TestLexerLookaheadFixture, RMW_IMPLEMENTATION), test_expect) TEST_F(CLASSNAME(TestLexerLookaheadFixture, RMW_IMPLEMENTATION), test_expect)
{ {
rcl_ret_t ret; rcl_ret_t ret;

View file

@ -402,3 +402,21 @@ TEST_F(CLASSNAME(TestServiceFixture, RMW_IMPLEMENTATION), test_bad_arguments) {
&service, this->node_ptr, ts, &service, this->node_ptr, ts,
topic, &service_options_bad_alloc)) << rcl_get_error_string().str; topic, &service_options_bad_alloc)) << rcl_get_error_string().str;
} }
/* Name failed tests
*/
TEST_F(CLASSNAME(TestServiceFixture, RMW_IMPLEMENTATION), test_service_fail_name) {
const rosidl_service_type_support_t * ts = ROSIDL_GET_SRV_TYPE_SUPPORT(
test_msgs, srv, BasicTypes);
const char * topic = "white space";
rcl_service_t service = rcl_get_zero_initialized_service();
rcl_service_options_t service_options = rcl_service_get_default_options();
rcl_ret_t ret = rcl_service_init(&service, this->node_ptr, ts, topic, &service_options);
EXPECT_EQ(RCL_RET_SERVICE_NAME_INVALID, ret) << rcl_get_error_string().str;
rcl_reset_error();
const char * topic2 = "{invalidbecausecurlybraces}";
ret = rcl_service_init(&service, this->node_ptr, ts, topic2, &service_options);
EXPECT_EQ(RCL_RET_SERVICE_NAME_INVALID, ret) << rcl_get_error_string().str;
rcl_reset_error();
}

View file

@ -120,6 +120,11 @@ TEST(test_validate_topic_name, various_valid_topics) {
EXPECT_EQ(42u, invalid_index); EXPECT_EQ(42u, invalid_index);
EXPECT_STREQ(nullptr, rcl_topic_name_validation_result_string(validation_result)); EXPECT_STREQ(nullptr, rcl_topic_name_validation_result_string(validation_result));
} }
int not_valid_validation_result = 5600;
EXPECT_STREQ(
"unknown result code for rcl topic name validation",
rcl_topic_name_validation_result_string(not_valid_validation_result));
} }
TEST(test_validate_topic_name, various_invalid_topics) { TEST(test_validate_topic_name, various_invalid_topics) {