From a6a4d5d8613ccecd6955bfcd2ea887e418f67f14 Mon Sep 17 00:00:00 2001 From: Lennart Nachtigall Date: Fri, 19 Apr 2024 10:13:23 +0200 Subject: [PATCH 1/2] added a test controller that fails at activation --- controller_manager/CMakeLists.txt | 14 ++++ .../test_controller_failed_activate.cpp | 68 +++++++++++++++++ .../test_controller_failed_activate.hpp | 76 +++++++++++++++++++ .../test_controller_failed_activate.xml | 9 +++ 4 files changed, 167 insertions(+) create mode 100644 controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.cpp create mode 100644 controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.hpp create mode 100644 controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.xml diff --git a/controller_manager/CMakeLists.txt b/controller_manager/CMakeLists.txt index e267856eb1..262abec840 100644 --- a/controller_manager/CMakeLists.txt +++ b/controller_manager/CMakeLists.txt @@ -171,6 +171,20 @@ if(BUILD_TESTING) DESTINATION lib ) + add_library(test_controller_failed_activate SHARED + test/test_controller_failed_activate/test_controller_failed_activate.cpp + ) + target_link_libraries(test_controller_failed_activate PUBLIC + controller_manager + ) + target_compile_definitions(test_controller_failed_activate PRIVATE "CONTROLLER_MANAGER_BUILDING_DLL") + pluginlib_export_plugin_description_file( + controller_interface test/test_controller_failed_activate/test_controller_failed_activate.xml) + install( + TARGETS test_controller_failed_activate + DESTINATION lib + ) + ament_add_gmock(test_release_interfaces test/test_release_interfaces.cpp APPEND_ENV AMENT_PREFIX_PATH=${ament_index_build_path}_$ diff --git a/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.cpp b/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.cpp new file mode 100644 index 0000000000..c46fea53d9 --- /dev/null +++ b/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.cpp @@ -0,0 +1,68 @@ +// Copyright 2021 Department of Engineering Cybernetics, NTNU. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "test_controller_failed_activate.hpp" + +#include +#include + +#include "lifecycle_msgs/msg/transition.hpp" + +namespace test_controller_failed_activate +{ +TestControllerFailedActivate::TestControllerFailedActivate() +: controller_interface::ControllerInterface() +{ +} + +rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn +TestControllerFailedActivate::on_init() +{ + return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS; +} + +controller_interface::return_type TestControllerFailedActivate::update( + const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) +{ + return controller_interface::return_type::OK; +} + +rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn +TestControllerFailedActivate::on_configure(const rclcpp_lifecycle::State & /*previous_state&*/) +{ + return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS; +} + + +rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn +TestControllerFailedActivate::on_activate(const rclcpp_lifecycle::State & /*previous_state&*/) +{ + //Simply simulate a controller that can not be activated + return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::FAILURE; +} + + +rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn +TestControllerFailedActivate::on_cleanup(const rclcpp_lifecycle::State & /*previous_state*/) +{ + return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS; +} + +} // namespace test_controller_with_interfaces + +#include "pluginlib/class_list_macros.hpp" + +PLUGINLIB_EXPORT_CLASS( + test_controller_failed_activate::TestControllerFailedActivate, + controller_interface::ControllerInterface) diff --git a/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.hpp b/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.hpp new file mode 100644 index 0000000000..672ed1eb3b --- /dev/null +++ b/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.hpp @@ -0,0 +1,76 @@ +// Copyright 2020 Department of Engineering Cybernetics, NTNU +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef TEST_CONTROLLER_WITH_INTERFACES__TEST_CONTROLLER_WITH_INTERFACES_HPP_ +#define TEST_CONTROLLER_WITH_INTERFACES__TEST_CONTROLLER_WITH_INTERFACES_HPP_ + +#include +#include + +#include "controller_interface/visibility_control.h" +#include "controller_manager/controller_manager.hpp" + +namespace test_controller_failed_activate +{ +// Corresponds to the name listed within the pluginglib xml +constexpr char TEST_CONTROLLER_WITH_INTERFACES_CLASS_NAME[] = + "controller_manager/test_controller_failed_activate"; +// Corresponds to the command interface to claim +constexpr char TEST_CONTROLLER_COMMAND_INTERFACE[] = "joint2/velocity"; +class TestControllerFailedActivate : public controller_interface::ControllerInterface +{ +public: + CONTROLLER_MANAGER_PUBLIC + TestControllerFailedActivate(); + + CONTROLLER_MANAGER_PUBLIC + virtual ~TestControllerFailedActivate() = default; + + controller_interface::InterfaceConfiguration command_interface_configuration() const override + { + return controller_interface::InterfaceConfiguration{ + controller_interface::interface_configuration_type::INDIVIDUAL, + {TEST_CONTROLLER_COMMAND_INTERFACE}}; + } + + controller_interface::InterfaceConfiguration state_interface_configuration() const override + { + return controller_interface::InterfaceConfiguration{ + controller_interface::interface_configuration_type::NONE}; + } + + CONTROLLER_MANAGER_PUBLIC + controller_interface::return_type update( + const rclcpp::Time & time, const rclcpp::Duration & period) override; + + CONTROLLER_MANAGER_PUBLIC + rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_init() override; + + CONTROLLER_MANAGER_PUBLIC + rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_configure( + const rclcpp_lifecycle::State & previous_state) override; + + CONTROLLER_MANAGER_PUBLIC + rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_activate( + const rclcpp_lifecycle::State & previous_state) override; + + + CONTROLLER_MANAGER_PUBLIC + rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_cleanup( + const rclcpp_lifecycle::State & previous_state) override; +}; + +} // namespace test_controller_with_interfaces + +#endif // TEST_CONTROLLER_WITH_INTERFACES__TEST_CONTROLLER_WITH_INTERFACES_HPP_ diff --git a/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.xml b/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.xml new file mode 100644 index 0000000000..80c4e6bef5 --- /dev/null +++ b/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.xml @@ -0,0 +1,9 @@ + + + + + Controller used for testing + + + + From baa48e8b1755c8d36b66574e53da3634e20b2afd Mon Sep 17 00:00:00 2001 From: Lennart Nachtigall Date: Fri, 19 Apr 2024 10:19:53 +0200 Subject: [PATCH 2/2] forgot to run pre-commit --- .../test_controller_failed_activate.cpp | 6 ++---- .../test_controller_failed_activate.hpp | 3 +-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.cpp b/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.cpp index c46fea53d9..c13df1a713 100644 --- a/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.cpp +++ b/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.cpp @@ -44,22 +44,20 @@ TestControllerFailedActivate::on_configure(const rclcpp_lifecycle::State & /*pre return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS; } - rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn TestControllerFailedActivate::on_activate(const rclcpp_lifecycle::State & /*previous_state&*/) { - //Simply simulate a controller that can not be activated + // Simply simulate a controller that can not be activated return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::FAILURE; } - rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn TestControllerFailedActivate::on_cleanup(const rclcpp_lifecycle::State & /*previous_state*/) { return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS; } -} // namespace test_controller_with_interfaces +} // namespace test_controller_failed_activate #include "pluginlib/class_list_macros.hpp" diff --git a/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.hpp b/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.hpp index 672ed1eb3b..483d2b0158 100644 --- a/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.hpp +++ b/controller_manager/test/test_controller_failed_activate/test_controller_failed_activate.hpp @@ -65,12 +65,11 @@ class TestControllerFailedActivate : public controller_interface::ControllerInte rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_activate( const rclcpp_lifecycle::State & previous_state) override; - CONTROLLER_MANAGER_PUBLIC rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_cleanup( const rclcpp_lifecycle::State & previous_state) override; }; -} // namespace test_controller_with_interfaces +} // namespace test_controller_failed_activate #endif // TEST_CONTROLLER_WITH_INTERFACES__TEST_CONTROLLER_WITH_INTERFACES_HPP_