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:
parent
7cc97f48f3
commit
3d6c2e90ba
6 changed files with 131 additions and 0 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue