@@ -1202,31 +1202,49 @@ TEST_F(TestResourceManager, managing_controllers_reference_interfaces)
12021202{
12031203 hardware_interface::ResourceManager rm (ros2_control_test_assets::minimal_robot_urdf);
12041204
1205+ std::string CONTROLLER_NAME = " test_controller" ;
1206+ std::vector<std::string> REFERENCE_INTERFACE_NAMES = {" input1" , " input2" , " input3" };
12051207 std::vector<std::string> FULL_REFERENCE_INTERFACE_NAMES = {
1206- " test_controller/input1" , " test_controller/input2" , " test_controller/input3" };
1208+ CONTROLLER_NAME + " /" + REFERENCE_INTERFACE_NAMES[0 ],
1209+ CONTROLLER_NAME + " /" + REFERENCE_INTERFACE_NAMES[1 ],
1210+ CONTROLLER_NAME + " /" + REFERENCE_INTERFACE_NAMES[2 ]};
12071211
12081212 std::vector<hardware_interface::CommandInterface> reference_interfaces;
12091213 std::vector<double > reference_interface_values = {1.0 , 2.0 , 3.0 };
1210- std::vector<std::string> reference_interface_names = {" input1" , " input2" , " input3" };
12111214
1212- for (size_t i = 0 ; i < reference_interface_names .size (); ++i)
1215+ for (size_t i = 0 ; i < REFERENCE_INTERFACE_NAMES .size (); ++i)
12131216 {
12141217 reference_interfaces.push_back (hardware_interface::CommandInterface (
1215- " test_controller " , reference_interface_names [i], &(reference_interface_values[i])));
1218+ CONTROLLER_NAME, REFERENCE_INTERFACE_NAMES [i], &(reference_interface_values[i])));
12161219 }
12171220
1218- auto ref_itf_names = rm.import_controller_reference_interfaces (reference_interfaces);
1221+ rm.import_controller_reference_interfaces (CONTROLLER_NAME, reference_interfaces);
12191222
1220- ASSERT_THAT (ref_itf_names, testing::ElementsAreArray (FULL_REFERENCE_INTERFACE_NAMES));
1223+ ASSERT_THAT (
1224+ rm.get_controller_reference_interface_names (CONTROLLER_NAME),
1225+ testing::ElementsAreArray (FULL_REFERENCE_INTERFACE_NAMES));
12211226
12221227 // check that all interfaces are imported properly
12231228 for (const auto & interface : FULL_REFERENCE_INTERFACE_NAMES)
1229+ {
1230+ EXPECT_TRUE (rm.command_interface_exists (interface));
1231+ EXPECT_FALSE (rm.command_interface_is_available (interface));
1232+ EXPECT_FALSE (rm.command_interface_is_claimed (interface));
1233+ }
1234+
1235+ // make interface available
1236+ rm.make_controller_reference_interfaces_available (CONTROLLER_NAME);
1237+ for (const auto & interface : FULL_REFERENCE_INTERFACE_NAMES)
12241238 {
12251239 EXPECT_TRUE (rm.command_interface_exists (interface));
12261240 EXPECT_TRUE (rm.command_interface_is_available (interface));
12271241 EXPECT_FALSE (rm.command_interface_is_claimed (interface));
12281242 }
12291243
1244+ // try to make interfaces available from unknown controller
1245+ EXPECT_THROW (
1246+ rm.make_controller_reference_interfaces_available (" unknown_controller" ), std::out_of_range);
1247+
12301248 // claim interfaces in a scope that deletes them after
12311249 {
12321250 auto claimed_itf1 = rm.claim_command_interface (FULL_REFERENCE_INTERFACE_NAMES[0 ]);
@@ -1263,18 +1281,35 @@ TEST_F(TestResourceManager, managing_controllers_reference_interfaces)
12631281 EXPECT_FALSE (rm.command_interface_is_claimed (interface));
12641282 }
12651283
1284+ // make interfaces unavailable
1285+ rm.make_controller_reference_interfaces_unavailable (CONTROLLER_NAME);
1286+ for (const auto & interface : FULL_REFERENCE_INTERFACE_NAMES)
1287+ {
1288+ EXPECT_TRUE (rm.command_interface_exists (interface));
1289+ EXPECT_FALSE (rm.command_interface_is_available (interface));
1290+ EXPECT_FALSE (rm.command_interface_is_claimed (interface));
1291+ }
1292+
1293+ // try to make interfaces unavailable from unknown controller
1294+ EXPECT_THROW (
1295+ rm.make_controller_reference_interfaces_unavailable (" unknown_controller" ), std::out_of_range);
1296+
12661297 // Last written values should stay
12671298 EXPECT_EQ (reference_interface_values[0 ], 11.1 );
12681299 EXPECT_EQ (reference_interface_values[1 ], 2.0 );
12691300 EXPECT_EQ (reference_interface_values[2 ], 33.3 );
12701301
12711302 // remove reference interfaces from resource manager
1272- rm.remove_controller_reference_interfaces (ref_itf_names );
1303+ rm.remove_controller_reference_interfaces (CONTROLLER_NAME );
12731304
12741305 // they should not exist in resource manager
12751306 for (const auto & interface : FULL_REFERENCE_INTERFACE_NAMES)
12761307 {
12771308 EXPECT_FALSE (rm.command_interface_exists (interface));
12781309 EXPECT_FALSE (rm.command_interface_is_available (interface));
12791310 }
1311+
1312+ // try to remove interfaces from unknown controller
1313+ EXPECT_THROW (
1314+ rm.make_controller_reference_interfaces_unavailable (" unknown_controller" ), std::out_of_range);
12801315}
0 commit comments