diff --git a/rcl/test/rcl/test_init.cpp b/rcl/test/rcl/test_init.cpp index 5df2a084b8..582b4c2fb6 100644 --- a/rcl/test/rcl/test_init.cpp +++ b/rcl/test/rcl/test_init.cpp @@ -111,6 +111,10 @@ TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_rcl_init_and_shutdown EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret); rcl_reset_error(); ASSERT_FALSE(rcl_context_is_valid(&context)); + // Already init + ret = rcl_init_options_init(&init_options, rcl_get_default_allocator()); + EXPECT_EQ(RCL_RET_ALREADY_INIT, ret) << rcl_get_error_string().str; + rcl_reset_error(); // If argc is not 0, but argv is, it should be an invalid argument. ret = rcl_init(42, nullptr, &init_options, &context); EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret); @@ -122,6 +126,11 @@ TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_rcl_init_and_shutdown EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret); rcl_reset_error(); ASSERT_FALSE(rcl_context_is_valid(&context)); + // If argc is less than 1, argv is not null, it should be an invalid argument. + ret = rcl_init(0, invalid_args, &init_options, &context); + EXPECT_EQ(RCL_RET_INVALID_ARGUMENT, ret); + rcl_reset_error(); + ASSERT_FALSE(rcl_context_is_valid(&context)); // If either the allocate or deallocate function pointers are not set, it should be invalid arg. init_options.impl->allocator.allocate = nullptr; ret = rcl_init(0, nullptr, &init_options, &context); @@ -284,4 +293,8 @@ TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_rcl_init_options_acce const rcl_allocator_t * options_allocator = rcl_init_options_get_allocator(&init_options); EXPECT_TRUE(rcutils_allocator_is_valid(options_allocator)); + + rcl_init_options_t init_options_dst = rcl_get_zero_initialized_init_options(); + EXPECT_EQ(RCL_RET_OK, rcl_init_options_copy(&init_options, &init_options_dst)); + EXPECT_EQ(RCL_RET_ALREADY_INIT, rcl_init_options_copy(&init_options, &init_options_dst)); }