diff --git a/.github/workflows/ci-coverage-build.yml b/.github/workflows/ci-coverage-build.yml index 5cea0f1538..2d2e930887 100644 --- a/.github/workflows/ci-coverage-build.yml +++ b/.github/workflows/ci-coverage-build.yml @@ -30,6 +30,7 @@ jobs: controller_interface controller_manager hardware_interface + 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 06ada46e49..d563d313db 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 9ccfda0269..cbfa345e2a 100644 --- a/controller_manager/package.xml +++ b/controller_manager/package.xml @@ -29,6 +29,7 @@ std_msgs ament_cmake_gmock + hardware_interface_testing ros2_control_test_assets diff --git a/hardware_interface/CMakeLists.txt b/hardware_interface/CMakeLists.txt index ecb4f794c7..f198ebc012 100644 --- a/hardware_interface/CMakeLists.txt +++ b/hardware_interface/CMakeLists.txt @@ -96,21 +96,6 @@ if(BUILD_TESTING) target_link_libraries(test_component_parser hardware_interface) 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 hardware_interface) - ament_target_dependencies(test_components - pluginlib - ros2_control_test_assets - ) - install(TARGETS test_components - DESTINATION lib - ) - pluginlib_export_plugin_description_file( - hardware_interface 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 @@ -127,14 +112,6 @@ if(BUILD_TESTING) hardware_interface 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 hardware_interface) - 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 hardware_interface) 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 97% rename from hardware_interface/test/test_resource_manager.cpp rename to hardware_interface_testing/test/test_resource_manager.cpp index 7da42df317..e9071f2cf5 100644 --- a/hardware_interface/test/test_resource_manager.cpp +++ b/hardware_interface_testing/test/test_resource_manager.cpp @@ -233,73 +233,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