Skip to content

Commit 4661bf3

Browse files
committed
Undo type enforcement
Signed-off-by: ivanpauno <ivanpauno@ekumenlabs.com>
1 parent 600faec commit 4661bf3

2 files changed

Lines changed: 7 additions & 14 deletions

File tree

rclcpp/src/rclcpp/node_interfaces/node_parameters.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,6 @@ __check_parameters(
260260
for (const rclcpp::Parameter & parameter : parameters) {
261261
const rcl_interfaces::msg::ParameterDescriptor & descriptor =
262262
parameter_infos[parameter.get_name()].descriptor;
263-
result = descriptor.type == parameter.get_type() ||
264-
descriptor.type == rclcpp::PARAMETER_NOT_SET;
265263
result = result && __check_parameter_value_in_range(
266264
descriptor,
267265
parameter.get_parameter_value());
@@ -295,8 +293,7 @@ __set_parameters_atomically_common(
295293
if (result.successful) {
296294
for (size_t i = 0; i < parameters.size(); ++i) {
297295
const std::string & name = parameters[i].get_name();
298-
// TODO(ivanpauno): Why updating the descriptor name in each set?
299-
// Maybe, set the correct name when declare parameter is call, and delete it here.
296+
parameter_infos[name].descriptor.type = parameters[i].get_type();
300297
parameter_infos[name].descriptor.name = parameters[i].get_name();
301298
parameter_infos[name].value = parameters[i].get_parameter_value();
302299
}

rclcpp/test/test_node.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,6 @@ TEST_F(TestNode, set_parameter_undeclared_parameters_not_allowed) {
699699
// setting a parameter with integer range descriptor
700700
auto name = "parameter"_unq;
701701
rcl_interfaces::msg::ParameterDescriptor descriptor;
702-
descriptor.type = rclcpp::PARAMETER_INTEGER;
703702
descriptor.integer_range.resize(1);
704703
auto & integer_range = descriptor.integer_range.at(0);
705704
integer_range.from_value = 10;
@@ -726,7 +725,6 @@ TEST_F(TestNode, set_parameter_undeclared_parameters_not_allowed) {
726725
// setting a parameter with integer range descriptor and wrong default value will throw
727726
auto name = "parameter"_unq;
728727
rcl_interfaces::msg::ParameterDescriptor descriptor;
729-
descriptor.type = rclcpp::PARAMETER_INTEGER;
730728
descriptor.integer_range.resize(1);
731729
auto & integer_range = descriptor.integer_range.at(0);
732730
integer_range.from_value = 10;
@@ -735,10 +733,9 @@ TEST_F(TestNode, set_parameter_undeclared_parameters_not_allowed) {
735733
ASSERT_THROW(node->declare_parameter(name, 42, descriptor), rclcpp::exceptions::InvalidParameterValueException);
736734
}
737735
{
738-
// setting a parameter with floatin point range descriptor
736+
// setting a parameter with floating point range descriptor
739737
auto name = "parameter"_unq;
740738
rcl_interfaces::msg::ParameterDescriptor descriptor;
741-
descriptor.type = rclcpp::PARAMETER_DOUBLE;
742739
descriptor.floating_point_range.resize(1);
743740
auto & floating_point_range = descriptor.floating_point_range.at(0);
744741
floating_point_range.from_value = 10.0;
@@ -762,8 +759,8 @@ TEST_F(TestNode, set_parameter_undeclared_parameters_not_allowed) {
762759
EXPECT_EQ(node->get_parameter(name).get_value<double>(), 11.0);
763760
}
764761
{
765-
// setting a parameter with a different type will fail if
766-
// it has a descriptor specifying a type
762+
// setting a parameter with a different type is still possible
763+
// when having a descriptor specifying a type (type is a status, not a constraint).
767764
auto name = "parameter"_unq;
768765
rcl_interfaces::msg::ParameterDescriptor descriptor;
769766
descriptor.type = rclcpp::PARAMETER_INTEGER;
@@ -773,12 +770,11 @@ TEST_F(TestNode, set_parameter_undeclared_parameters_not_allowed) {
773770
EXPECT_EQ(value.get_type(), rclcpp::PARAMETER_INTEGER);
774771
EXPECT_EQ(value.get_value<int64_t>(), 42);
775772

776-
EXPECT_FALSE(node->set_parameter(rclcpp::Parameter(name, "asd")).successful);
777-
773+
EXPECT_TRUE(node->set_parameter(rclcpp::Parameter(name, "asd")).successful);
778774
EXPECT_TRUE(node->has_parameter(name));
779775
value = node->get_parameter(name);
780-
EXPECT_EQ(value.get_type(), rclcpp::PARAMETER_INTEGER);
781-
EXPECT_EQ(value.get_value<int64_t>(), 42);
776+
EXPECT_EQ(value.get_type(), rclcpp::PARAMETER_STRING);
777+
EXPECT_EQ(value.get_value<std::string>(), "asd");
782778
}
783779
}
784780

0 commit comments

Comments
 (0)