Skip to content

Commit 267c898

Browse files
Blast545ahcorde
authored andcommitted
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 <[email protected]>
1 parent 7cc97f4 commit 267c898

File tree

6 files changed

+131
-0
lines changed

6 files changed

+131
-0
lines changed

rcl/test/rcl/test_context.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,26 @@ TEST_F(CLASSNAME(TestContextFixture, RMW_IMPLEMENTATION), nominal) {
128128
TEST_F(CLASSNAME(TestContextFixture, RMW_IMPLEMENTATION), bad_fini) {
129129
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, rcl_context_fini(nullptr));
130130
rcl_reset_error();
131+
132+
rcl_init_options_t init_options = rcl_get_zero_initialized_init_options();
133+
rcl_ret_t ret = rcl_init_options_init(&init_options, rcl_get_default_allocator());
134+
ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
135+
OSRF_TESTING_TOOLS_CPP_SCOPE_EXIT(
136+
{
137+
EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options)) << rcl_get_error_string().str;
138+
});
139+
140+
rcl_context_t context = rcl_get_zero_initialized_context();
141+
ret = rcl_init(0, nullptr, &init_options, &context);
142+
EXPECT_EQ(RCL_RET_OK, ret);
143+
144+
ret = rcl_context_fini(&context);
145+
EXPECT_EQ(ret, RCL_RET_INVALID_ARGUMENT);
146+
rcl_reset_error();
147+
148+
ret = rcl_shutdown(&context);
149+
EXPECT_EQ(ret, RCL_RET_OK);
150+
151+
ret = rcl_context_fini(&context);
152+
EXPECT_EQ(ret, RCL_RET_OK);
131153
}

rcl/test/rcl/test_events.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,40 @@ TEST_P(TestEventFixture, test_pubsub_incompatible_qos)
696696
tear_down_publisher_subscriber();
697697
}
698698

699+
/*
700+
* Passing bad param subscriber/publisher event ini
701+
*/
702+
TEST_F(TestEventFixture, test_bad_event_ini)
703+
{
704+
setup_publisher_subscriber(default_qos_profile, default_qos_profile);
705+
const rcl_subscription_event_type_t unknown_sub_type = (rcl_subscription_event_type_t) 5432;
706+
const rcl_publisher_event_type_t unknown_pub_type = (rcl_publisher_event_type_t) 5432;
707+
708+
publisher_event = rcl_get_zero_initialized_event();
709+
rcl_ret_t ret = rcl_publisher_event_init(
710+
&publisher_event,
711+
&publisher,
712+
unknown_pub_type);
713+
EXPECT_EQ(ret, RCL_RET_INVALID_ARGUMENT);
714+
715+
subscription_event = rcl_get_zero_initialized_event();
716+
ret = rcl_subscription_event_init(
717+
&subscription_event,
718+
&subscription,
719+
unknown_sub_type);
720+
EXPECT_EQ(ret, RCL_RET_INVALID_ARGUMENT);
721+
722+
tear_down_publisher_subscriber();
723+
}
724+
725+
/*
726+
* Passing bad argument to get_rmw_handle
727+
*/
728+
TEST_F(TestEventFixture, test_bad_get_handle)
729+
{
730+
EXPECT_EQ(NULL, rcl_event_get_rmw_handle(NULL));
731+
}
732+
699733
static
700734
std::array<TestIncompatibleQosEventParams, 5>
701735
get_test_pubsub_incompatible_qos_inputs()

rcl/test/rcl/test_guard_condition.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,3 +216,14 @@ TEST_F(
216216
EXPECT_EQ(RCL_RET_OK, ret);
217217
rcl_reset_error();
218218
}
219+
220+
/* Tests trigger_guard_condition with bad arguments
221+
*/
222+
TEST_F(
223+
CLASSNAME(TestGuardConditionFixture, RMW_IMPLEMENTATION), test_rcl_guard_condition_bad_arg) {
224+
rcl_guard_condition_t zero_guard_condition = rcl_get_zero_initialized_guard_condition();
225+
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, rcl_trigger_guard_condition(nullptr));
226+
rcl_reset_error();
227+
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, rcl_trigger_guard_condition(&zero_guard_condition));
228+
rcl_reset_error();
229+
}

rcl/test/rcl/test_lexer_lookahead.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,47 @@ TEST_F(CLASSNAME(TestLexerLookaheadFixture, RMW_IMPLEMENTATION), test_accept)
195195
EXPECT_EQ(RCL_LEXEME_EOF, lexeme);
196196
}
197197

198+
TEST_F(CLASSNAME(TestLexerLookaheadFixture, RMW_IMPLEMENTATION), test_accept_bad_arg)
199+
{
200+
rcl_lexer_lookahead2_t buffer;
201+
rcl_lexer_lookahead2_t buffer_not_ini = rcl_get_zero_initialized_lexer_lookahead2();
202+
SCOPE_LOOKAHEAD2(buffer, "foobar/");
203+
204+
rcl_lexeme_t lexeme = RCL_LEXEME_NONE;
205+
const char * lexeme_text;
206+
size_t lexeme_text_length = 0;
207+
208+
// Can't accept without peek first
209+
rcl_ret_t ret = rcl_lexer_lookahead2_accept(&buffer, &lexeme_text, &lexeme_text_length);
210+
EXPECT_EQ(RCL_RET_ERROR, ret) << rcl_get_error_string().str;
211+
rcl_reset_error();
212+
213+
// Expected usage
214+
ret = rcl_lexer_lookahead2_peek(&buffer, &lexeme);
215+
EXPECT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str;
216+
EXPECT_EQ(RCL_LEXEME_TOKEN, lexeme);
217+
218+
// Invalid nullptr parameter
219+
ret = rcl_lexer_lookahead2_accept(nullptr, &lexeme_text, &lexeme_text_length);
220+
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
221+
rcl_reset_error();
222+
223+
// Invalid not ini parameter
224+
ret = rcl_lexer_lookahead2_accept(&buffer_not_ini, &lexeme_text, &lexeme_text_length);
225+
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
226+
rcl_reset_error();
227+
228+
// Invalid nullptr as lexeme_text_length
229+
ret = rcl_lexer_lookahead2_accept(&buffer, &lexeme_text, nullptr);
230+
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
231+
rcl_reset_error();
232+
233+
// Invalid nullptr as lexeme_text
234+
ret = rcl_lexer_lookahead2_accept(&buffer, nullptr, &lexeme_text_length);
235+
EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str;
236+
rcl_reset_error();
237+
}
238+
198239
TEST_F(CLASSNAME(TestLexerLookaheadFixture, RMW_IMPLEMENTATION), test_expect)
199240
{
200241
rcl_ret_t ret;

rcl/test/rcl/test_service.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,3 +402,21 @@ TEST_F(CLASSNAME(TestServiceFixture, RMW_IMPLEMENTATION), test_bad_arguments) {
402402
&service, this->node_ptr, ts,
403403
topic, &service_options_bad_alloc)) << rcl_get_error_string().str;
404404
}
405+
406+
/* Name failed tests
407+
*/
408+
TEST_F(CLASSNAME(TestServiceFixture, RMW_IMPLEMENTATION), test_service_fail_name) {
409+
const rosidl_service_type_support_t * ts = ROSIDL_GET_SRV_TYPE_SUPPORT(
410+
test_msgs, srv, BasicTypes);
411+
const char * topic = "white space";
412+
rcl_service_t service = rcl_get_zero_initialized_service();
413+
rcl_service_options_t service_options = rcl_service_get_default_options();
414+
rcl_ret_t ret = rcl_service_init(&service, this->node_ptr, ts, topic, &service_options);
415+
EXPECT_EQ(RCL_RET_SERVICE_NAME_INVALID, ret) << rcl_get_error_string().str;
416+
rcl_reset_error();
417+
418+
const char * topic2 = "{invalidbecausecurlybraces}";
419+
ret = rcl_service_init(&service, this->node_ptr, ts, topic2, &service_options);
420+
EXPECT_EQ(RCL_RET_SERVICE_NAME_INVALID, ret) << rcl_get_error_string().str;
421+
rcl_reset_error();
422+
}

rcl/test/rcl/test_validate_topic_name.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@ TEST(test_validate_topic_name, various_valid_topics) {
120120
EXPECT_EQ(42u, invalid_index);
121121
EXPECT_STREQ(nullptr, rcl_topic_name_validation_result_string(validation_result));
122122
}
123+
124+
int not_valid_validation_result = 5600;
125+
EXPECT_STREQ(
126+
"unknown result code for rcl topic name validation",
127+
rcl_topic_name_validation_result_string(not_valid_validation_result));
123128
}
124129

125130
TEST(test_validate_topic_name, various_invalid_topics) {

0 commit comments

Comments
 (0)