From 4ca5263f1fbf3531a0ec1cab92811898079426ec Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Mon, 15 Jun 2020 13:46:35 +0900 Subject: [PATCH 1/4] add rcl_init_options_get/set_domain_id. Signed-off-by: Tomoya.Fujita --- rcl/include/rcl/init_options.h | 44 ++++++++++++++++++++++++++++++++++ rcl/src/rcl/init_options.c | 19 +++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/rcl/include/rcl/init_options.h b/rcl/include/rcl/init_options.h index 1d33a0739..a2bd384e4 100644 --- a/rcl/include/rcl/init_options.h +++ b/rcl/include/rcl/init_options.h @@ -127,6 +127,50 @@ RCL_WARN_UNUSED rcl_ret_t rcl_init_options_fini(rcl_init_options_t * init_options); +/// Return domain_id which is stored in rmw_init_options. +/** + * Get the domain id from specifid rcl_init_options_t object. + * + *
+ * Attribute | Adherence + * ------------------ | ------------- + * Allocates Memory | No + * Thread-Safe | Yes + * Uses Atomics | No + * Lock-Free | Yes + * + * \param[in] init_options rcl_init_options_t object to get domain id. + * \param[inout] domain_id domain id to be copied from rcl_init_options_t object. + * \return `RCL_RET_OK` if successful, or + * \return `RCL_RET_INVALID_ARGUMENT` if any arguments are invalid. + */ +RCL_PUBLIC +RCL_WARN_UNUSED +rcl_ret_t +rcl_init_options_get_domain_id(rcl_init_options_t * init_options, size_t * domain_id); + +/// Set domain_id to rmw_init_options. +/** + * Store the domain id to specified rcl_init_options_t object. + * + *
+ * Attribute | Adherence + * ------------------ | ------------- + * Allocates Memory | No + * Thread-Safe | Yes + * Uses Atomics | No + * Lock-Free | Yes + * + * \param[in] init_options rcl_init_options_t object to be set domain id. + * \param[in] domain_id domain id to be set into rcl_init_options_t object. + * \return `RCL_RET_OK` if successful, or + * \return `RCL_RET_INVALID_ARGUMENT` if any arguments are invalid. + */ +RCL_PUBLIC +RCL_WARN_UNUSED +rcl_ret_t +rcl_init_options_set_domain_id(rcl_init_options_t * init_options, size_t domain_id); + /// Return the rmw init options which are stored internally. /** * This function can fail and return `NULL` if: diff --git a/rcl/src/rcl/init_options.c b/rcl/src/rcl/init_options.c index 713337d60..fbdd00f15 100644 --- a/rcl/src/rcl/init_options.c +++ b/rcl/src/rcl/init_options.c @@ -131,6 +131,25 @@ rcl_init_options_fini(rcl_init_options_t * init_options) return RCL_RET_OK; } +rcl_ret_t +rcl_init_options_get_domain_id(rcl_init_options_t * init_options, size_t * domain_id) +{ + RCL_CHECK_ARGUMENT_FOR_NULL(init_options, RCL_RET_INVALID_ARGUMENT); + RCL_CHECK_ARGUMENT_FOR_NULL(init_options->impl, RCL_RET_INVALID_ARGUMENT); + RCL_CHECK_ARGUMENT_FOR_NULL(domain_id, RCL_RET_INVALID_ARGUMENT); + *domain_id = init_options->impl->rmw_init_options.domain_id; + return RCL_RET_OK; +} + +rcl_ret_t +rcl_init_options_set_domain_id(rcl_init_options_t * init_options, size_t domain_id) +{ + RCL_CHECK_ARGUMENT_FOR_NULL(init_options, RCL_RET_INVALID_ARGUMENT); + RCL_CHECK_ARGUMENT_FOR_NULL(init_options->impl, RCL_RET_INVALID_ARGUMENT); + init_options->impl->rmw_init_options.domain_id = domain_id; + return RCL_RET_OK; +} + rmw_init_options_t * rcl_init_options_get_rmw_init_options(rcl_init_options_t * init_options) { From 52eed8d246e27244fe854d338190c19d75f782a0 Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Mon, 22 Jun 2020 08:01:14 +0900 Subject: [PATCH 2/4] fix description in docblocks. Signed-off-by: Tomoya.Fujita --- rcl/include/rcl/init_options.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/rcl/include/rcl/init_options.h b/rcl/include/rcl/init_options.h index a2bd384e4..c6ccb5938 100644 --- a/rcl/include/rcl/init_options.h +++ b/rcl/include/rcl/init_options.h @@ -127,9 +127,9 @@ RCL_WARN_UNUSED rcl_ret_t rcl_init_options_fini(rcl_init_options_t * init_options); -/// Return domain_id which is stored in rmw_init_options. +/// Return the domain_id stored in the init options. /** - * Get the domain id from specifid rcl_init_options_t object. + * Get the domain id from the specified rcl_init_options_t object. * *
* Attribute | Adherence @@ -139,8 +139,8 @@ rcl_init_options_fini(rcl_init_options_t * init_options); * Uses Atomics | No * Lock-Free | Yes * - * \param[in] init_options rcl_init_options_t object to get domain id. - * \param[inout] domain_id domain id to be copied from rcl_init_options_t object. + * \param[in] init_options object from which the domain id should be retrieved. + * \param[out] domain_id domain id to be set in init_options object. * \return `RCL_RET_OK` if successful, or * \return `RCL_RET_INVALID_ARGUMENT` if any arguments are invalid. */ @@ -149,9 +149,9 @@ RCL_WARN_UNUSED rcl_ret_t rcl_init_options_get_domain_id(rcl_init_options_t * init_options, size_t * domain_id); -/// Set domain_id to rmw_init_options. +/// Set a domain id in the init options provided. /** - * Store the domain id to specified rcl_init_options_t object. + * Store the domain id in the specified init_options object. * *
* Attribute | Adherence @@ -161,8 +161,8 @@ rcl_init_options_get_domain_id(rcl_init_options_t * init_options, size_t * domai * Uses Atomics | No * Lock-Free | Yes * - * \param[in] init_options rcl_init_options_t object to be set domain id. - * \param[in] domain_id domain id to be set into rcl_init_options_t object. + * \param[in] init_options objects in which to set the specified domain id. + * \param[in] domain_id domain id to be set in init_options object. * \return `RCL_RET_OK` if successful, or * \return `RCL_RET_INVALID_ARGUMENT` if any arguments are invalid. */ From 17e033668d13c2eb6d272dd3ddfaa463b5ce4758 Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Tue, 23 Jun 2020 11:30:02 +0900 Subject: [PATCH 3/4] add minimal test for rcl_init_options_get/set_domain_id(). Signed-off-by: Tomoya.Fujita --- rcl/test/rcl/test_init.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/rcl/test/rcl/test_init.cpp b/rcl/test/rcl/test_init.cpp index da638f1e8..1db7336f6 100644 --- a/rcl/test/rcl/test_init.cpp +++ b/rcl/test/rcl/test_init.cpp @@ -298,8 +298,30 @@ 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)); + size_t domain_id; + ret = rcl_init_options_get_domain_id(NULL, &domain_id); + ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + ret = rcl_init_options_get_domain_id(&init_options, NULL); + ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + ret = rcl_init_options_get_domain_id(NULL, NULL); + ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + ret = rcl_init_options_set_domain_id(NULL, domain_id); + ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + + ret = rcl_init_options_get_domain_id(&init_options, &domain_id); + ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; + EXPECT_EQ(RCL_DEFAULT_DOMAIN_ID, domain_id); + ret = rcl_init_options_set_domain_id(&init_options, (size_t) 0); + ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; + ret = rcl_init_options_get_domain_id(&init_options, &domain_id); + ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; + EXPECT_EQ(0U, domain_id); + 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)); + ret = rcl_init_options_get_domain_id(&init_options_dst, &domain_id); + ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; + EXPECT_EQ(0U, domain_id); EXPECT_EQ(RCL_RET_ALREADY_INIT, rcl_init_options_copy(&init_options, &init_options_dst)); EXPECT_EQ(RCL_RET_OK, rcl_init_options_fini(&init_options_dst)); } From 76adfa939b204f6ec980bd86b60283c02f779d40 Mon Sep 17 00:00:00 2001 From: "Tomoya.Fujita" Date: Mon, 29 Jun 2020 05:55:35 +0900 Subject: [PATCH 4/4] call rcl_reset_error() after expected failure cases. Signed-off-by: Tomoya.Fujita --- rcl/test/rcl/test_init.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/rcl/test/rcl/test_init.cpp b/rcl/test/rcl/test_init.cpp index 1db7336f6..b9ed4357b 100644 --- a/rcl/test/rcl/test_init.cpp +++ b/rcl/test/rcl/test_init.cpp @@ -301,24 +301,28 @@ TEST_F(CLASSNAME(TestRCLFixture, RMW_IMPLEMENTATION), test_rcl_init_options_acce size_t domain_id; ret = rcl_init_options_get_domain_id(NULL, &domain_id); ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + rcl_reset_error(); ret = rcl_init_options_get_domain_id(&init_options, NULL); ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + rcl_reset_error(); ret = rcl_init_options_get_domain_id(NULL, NULL); ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + rcl_reset_error(); ret = rcl_init_options_set_domain_id(NULL, domain_id); ASSERT_EQ(RCL_RET_INVALID_ARGUMENT, ret) << rcl_get_error_string().str; + rcl_reset_error(); ret = rcl_init_options_get_domain_id(&init_options, &domain_id); ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; EXPECT_EQ(RCL_DEFAULT_DOMAIN_ID, domain_id); - ret = rcl_init_options_set_domain_id(&init_options, (size_t) 0); + ret = rcl_init_options_set_domain_id(&init_options, static_cast(0u)); ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; ret = rcl_init_options_get_domain_id(&init_options, &domain_id); ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; EXPECT_EQ(0U, domain_id); 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)); + ASSERT_EQ(RCL_RET_OK, rcl_init_options_copy(&init_options, &init_options_dst)); ret = rcl_init_options_get_domain_id(&init_options_dst, &domain_id); ASSERT_EQ(RCL_RET_OK, ret) << rcl_get_error_string().str; EXPECT_EQ(0U, domain_id);