diff --git a/.github/workflows/ci-coverage-build.yml b/.github/workflows/ci-coverage-build.yml index 6f6dd69391..61e9a05b01 100644 --- a/.github/workflows/ci-coverage-build.yml +++ b/.github/workflows/ci-coverage-build.yml @@ -34,6 +34,7 @@ jobs: ros2controlcli ros2_control ros2_control_test_assets + hardware_interface_testing transmission_interface vcs-repo-file-url: | diff --git a/.github/workflows/ci-ros-lint.yml b/.github/workflows/ci-ros-lint.yml index 5146786e8a..d89046fc51 100644 --- a/.github/workflows/ci-ros-lint.yml +++ b/.github/workflows/ci-ros-lint.yml @@ -24,6 +24,7 @@ jobs: controller_manager controller_manager_msgs hardware_interface + hardware_interface_testing ros2controlcli ros2_control ros2_control_test_assets @@ -49,6 +50,7 @@ jobs: controller_manager controller_manager_msgs hardware_interface + hardware_interface_testing ros2controlcli ros2_control ros2_control_test_assets diff --git a/controller_manager/package.xml b/controller_manager/package.xml index 10c3be6ac1..69aa9760bf 100644 --- a/controller_manager/package.xml +++ b/controller_manager/package.xml @@ -28,6 +28,8 @@ std_msgs ament_cmake_gmock + hardware_interface_testing + ros2_control_test_assets ament_cmake diff --git a/hardware_interface/CMakeLists.txt b/hardware_interface/CMakeLists.txt index e0ba861193..5892f0c3b3 100644 --- a/hardware_interface/CMakeLists.txt +++ b/hardware_interface/CMakeLists.txt @@ -138,19 +138,6 @@ if(BUILD_TESTING) target_link_libraries(test_component_parser ${PROJECT_NAME}) ament_target_dependencies(test_component_parser ros2_control_test_assets) - add_library(test_components SHARED - test/test_components/test_actuator.cpp - test/test_components/test_sensor.cpp - test/test_components/test_system.cpp) - target_link_libraries(test_components ${PROJECT_NAME}) - ament_target_dependencies(test_components - pluginlib) - install(TARGETS test_components - DESTINATION lib - ) - pluginlib_export_plugin_description_file( - ${PROJECT_NAME} test/test_components/test_components.xml) - add_library(test_hardware_components SHARED test/test_hardware_components/test_single_joint_actuator.cpp test/test_hardware_components/test_force_torque_sensor.cpp @@ -166,15 +153,6 @@ if(BUILD_TESTING) pluginlib_export_plugin_description_file( ${PROJECT_NAME} test/test_hardware_components/test_hardware_components.xml ) - - ament_add_gmock(test_resource_manager test/test_resource_manager.cpp) - target_link_libraries(test_resource_manager ${PROJECT_NAME}) - ament_target_dependencies(test_resource_manager ros2_control_test_assets) - - ament_add_gmock(test_resource_manager_prepare_perform_switch test/test_resource_manager_prepare_perform_switch.cpp) - target_link_libraries(test_resource_manager_prepare_perform_switch hardware_interface) - ament_target_dependencies(test_resource_manager_prepare_perform_switch ros2_control_test_assets) - ament_add_gmock(test_generic_system test/mock_components/test_generic_system.cpp) target_include_directories(test_generic_system PRIVATE include) target_link_libraries(test_generic_system ${PROJECT_NAME}) diff --git a/hardware_interface_testing/CMakeLists.txt b/hardware_interface_testing/CMakeLists.txt new file mode 100644 index 0000000000..ec6d591dee --- /dev/null +++ b/hardware_interface_testing/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 3.16) +project(hardware_interface_testing LANGUAGES CXX) + +if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") + add_compile_options(-Wall -Wextra -Werror=conversion -Werror=unused-but-set-variable -Werror=return-type -Werror=shadow) +endif() + +set(THIS_PACKAGE_INCLUDE_DEPENDS + control_msgs + hardware_interface + lifecycle_msgs + pluginlib + rclcpp_lifecycle + ros2_control_test_assets +) + +find_package(ament_cmake REQUIRED) +foreach(Dependency IN ITEMS ${THIS_PACKAGE_INCLUDE_DEPENDS}) + find_package(${Dependency} REQUIRED) +endforeach() + +add_library(test_components SHARED + test/test_components/test_actuator.cpp + test/test_components/test_sensor.cpp + test/test_components/test_system.cpp +) +ament_target_dependencies(test_components hardware_interface pluginlib ros2_control_test_assets) +install(TARGETS test_components + DESTINATION lib +) +pluginlib_export_plugin_description_file( +hardware_interface test/test_components/test_components.xml) + +if(BUILD_TESTING) + find_package(ament_cmake_gmock REQUIRED) + + ament_add_gmock(test_resource_manager test/test_resource_manager.cpp) + ament_target_dependencies(test_resource_manager hardware_interface ros2_control_test_assets) + + ament_add_gmock(test_resource_manager_prepare_perform_switch test/test_resource_manager_prepare_perform_switch.cpp) + ament_target_dependencies(test_resource_manager_prepare_perform_switch hardware_interface ros2_control_test_assets) + +endif() + +ament_export_dependencies(${THIS_PACKAGE_INCLUDE_DEPENDS}) +ament_package() diff --git a/hardware_interface_testing/README.md b/hardware_interface_testing/README.md new file mode 100644 index 0000000000..cba28d74a5 --- /dev/null +++ b/hardware_interface_testing/README.md @@ -0,0 +1,4 @@ +# hardware_interface_testing + +This package contains a set of hardware interfaces and controllers that can be used for other +packages to test their functionality. diff --git a/hardware_interface_testing/package.xml b/hardware_interface_testing/package.xml new file mode 100644 index 0000000000..841c77626f --- /dev/null +++ b/hardware_interface_testing/package.xml @@ -0,0 +1,25 @@ + + + hardware_interface_testing + 0.0.0 + ros2_control hardware interface testing + Bence Magyar + Denis Štogl + Christoph Froehlich + Apache License 2.0 + + ament_cmake + + control_msgs + hardware_interface + lifecycle_msgs + pluginlib + rclcpp_lifecycle + ros2_control_test_assets + + ament_cmake_gmock + + + ament_cmake + + diff --git a/hardware_interface/test/test_components/test_actuator.cpp b/hardware_interface_testing/test/test_components/test_actuator.cpp similarity index 100% rename from hardware_interface/test/test_components/test_actuator.cpp rename to hardware_interface_testing/test/test_components/test_actuator.cpp diff --git a/hardware_interface/test/test_components/test_components.xml b/hardware_interface_testing/test/test_components/test_components.xml similarity index 100% rename from hardware_interface/test/test_components/test_components.xml rename to hardware_interface_testing/test/test_components/test_components.xml diff --git a/hardware_interface/test/test_components/test_sensor.cpp b/hardware_interface_testing/test/test_components/test_sensor.cpp similarity index 100% rename from hardware_interface/test/test_components/test_sensor.cpp rename to hardware_interface_testing/test/test_components/test_sensor.cpp diff --git a/hardware_interface/test/test_components/test_system.cpp b/hardware_interface_testing/test/test_components/test_system.cpp similarity index 100% rename from hardware_interface/test/test_components/test_system.cpp rename to hardware_interface_testing/test/test_components/test_system.cpp diff --git a/hardware_interface/test/test_resource_manager.cpp b/hardware_interface_testing/test/test_resource_manager.cpp similarity index 96% rename from hardware_interface/test/test_resource_manager.cpp rename to hardware_interface_testing/test/test_resource_manager.cpp index 90b2643d7f..90129f9f64 100644 --- a/hardware_interface/test/test_resource_manager.cpp +++ b/hardware_interface_testing/test/test_resource_manager.cpp @@ -232,73 +232,73 @@ TEST_F(ResourceManagerTest, resource_claiming) // Activate components to get all interfaces available activate_components(rm); - const auto key = "joint1/position"; - EXPECT_TRUE(rm.command_interface_is_available(key)); - EXPECT_FALSE(rm.command_interface_is_claimed(key)); + const auto command_interface = "joint1/position"; + EXPECT_TRUE(rm.command_interface_is_available(command_interface)); + EXPECT_FALSE(rm.command_interface_is_claimed(command_interface)); { - auto position_command_interface = rm.claim_command_interface(key); - EXPECT_TRUE(rm.command_interface_is_available(key)); - EXPECT_TRUE(rm.command_interface_is_claimed(key)); + auto position_command_interface = rm.claim_command_interface(command_interface); + EXPECT_TRUE(rm.command_interface_is_available(command_interface)); + EXPECT_TRUE(rm.command_interface_is_claimed(command_interface)); { - EXPECT_ANY_THROW(rm.claim_command_interface(key)); - EXPECT_TRUE(rm.command_interface_is_available(key)); + EXPECT_ANY_THROW(rm.claim_command_interface(command_interface)); + EXPECT_TRUE(rm.command_interface_is_available(command_interface)); } } - EXPECT_TRUE(rm.command_interface_is_available(key)); - EXPECT_FALSE(rm.command_interface_is_claimed(key)); + EXPECT_TRUE(rm.command_interface_is_available(command_interface)); + EXPECT_FALSE(rm.command_interface_is_claimed(command_interface)); // command interfaces can only be claimed once - for (const auto & key : + for (const auto & interface_key : {"joint1/position", "joint1/position", "joint1/position", "joint2/velocity", "joint3/velocity"}) { { - auto interface = rm.claim_command_interface(key); - EXPECT_TRUE(rm.command_interface_is_available(key)); - EXPECT_TRUE(rm.command_interface_is_claimed(key)); + auto interface = rm.claim_command_interface(interface_key); + EXPECT_TRUE(rm.command_interface_is_available(interface_key)); + EXPECT_TRUE(rm.command_interface_is_claimed(interface_key)); { - EXPECT_ANY_THROW(rm.claim_command_interface(key)); - EXPECT_TRUE(rm.command_interface_is_available(key)); + EXPECT_ANY_THROW(rm.claim_command_interface(interface_key)); + EXPECT_TRUE(rm.command_interface_is_available(interface_key)); } } - EXPECT_TRUE(rm.command_interface_is_available(key)); - EXPECT_FALSE(rm.command_interface_is_claimed(key)); + EXPECT_TRUE(rm.command_interface_is_available(interface_key)); + EXPECT_FALSE(rm.command_interface_is_claimed(interface_key)); } // TODO(destogl): This claim test is not true.... can not be... // state interfaces can be claimed multiple times - for (const auto & key : + for (const auto & interface_key : {"joint1/position", "joint1/velocity", "sensor1/velocity", "joint2/position", "joint3/position"}) { { - EXPECT_TRUE(rm.state_interface_is_available(key)); - auto interface = rm.claim_state_interface(key); + EXPECT_TRUE(rm.state_interface_is_available(interface_key)); + auto interface = rm.claim_state_interface(interface_key); { - EXPECT_TRUE(rm.state_interface_is_available(key)); - EXPECT_NO_THROW(rm.claim_state_interface(key)); + EXPECT_TRUE(rm.state_interface_is_available(interface_key)); + EXPECT_NO_THROW(rm.claim_state_interface(interface_key)); } } } std::vector interfaces; const auto interface_names = {"joint1/position", "joint2/velocity", "joint3/velocity"}; - for (const auto & key : interface_names) + for (const auto & interface : interface_names) { - EXPECT_TRUE(rm.command_interface_is_available(key)); - interfaces.emplace_back(rm.claim_command_interface(key)); + EXPECT_TRUE(rm.command_interface_is_available(interface)); + interfaces.emplace_back(rm.claim_command_interface(interface)); } - for (const auto & key : interface_names) + for (const auto & interface : interface_names) { - EXPECT_TRUE(rm.command_interface_is_available(key)); - EXPECT_TRUE(rm.command_interface_is_claimed(key)); + EXPECT_TRUE(rm.command_interface_is_available(interface)); + EXPECT_TRUE(rm.command_interface_is_claimed(interface)); } interfaces.clear(); - for (const auto & key : interface_names) + for (const auto & interface : interface_names) { - EXPECT_TRUE(rm.command_interface_is_available(key)); - EXPECT_FALSE(rm.command_interface_is_claimed(key)); + EXPECT_TRUE(rm.command_interface_is_available(interface)); + EXPECT_FALSE(rm.command_interface_is_claimed(interface)); } } diff --git a/hardware_interface/test/test_resource_manager.hpp b/hardware_interface_testing/test/test_resource_manager.hpp similarity index 100% rename from hardware_interface/test/test_resource_manager.hpp rename to hardware_interface_testing/test/test_resource_manager.hpp diff --git a/hardware_interface/test/test_resource_manager_prepare_perform_switch.cpp b/hardware_interface_testing/test/test_resource_manager_prepare_perform_switch.cpp similarity index 100% rename from hardware_interface/test/test_resource_manager_prepare_perform_switch.cpp rename to hardware_interface_testing/test/test_resource_manager_prepare_perform_switch.cpp