From 37fc242731cdc0e3e805cc377665eee60eb23b26 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sun, 19 Jan 2025 21:47:27 +0900 Subject: [PATCH] refactor(behavior_path_planner): common test functions (#9963) * feat: common test code in behavior_path_planner Signed-off-by: Takayuki Murooka * deal with other modules Signed-off-by: Takayuki Murooka * fix typo Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- ...t_behavior_path_planner_node_interface.cpp | 90 ++-------------- ...t_behavior_path_planner_node_interface.cpp | 82 ++------------ ...t_behavior_path_planner_node_interface.cpp | 90 +++------------- ...t_behavior_path_planner_node_interface.cpp | 83 ++------------ .../CMakeLists.txt | 1 + .../behavior_path_planner/test_utils.hpp | 42 ++++++++ .../src/test_utils.cpp | 101 ++++++++++++++++++ ...e_behavior_path_planner_node_interface.cpp | 73 ++----------- ...t_behavior_path_planner_node_interface.cpp | 80 ++------------ ...t_behavior_path_planner_node_interface.cpp | 85 ++------------- 10 files changed, 214 insertions(+), 513 deletions(-) create mode 100644 planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/test_utils.hpp create mode 100644 planning/behavior_path_planner/autoware_behavior_path_planner/src/test_utils.cpp diff --git a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp index f679efacb6a44..349d92377d091 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp @@ -12,11 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware/behavior_path_planner/behavior_path_planner_node.hpp" - -#include -#include -#include +#include "autoware/behavior_path_planner/test_utils.hpp" #include @@ -25,84 +21,18 @@ #include #include -using autoware::behavior_path_planner::BehaviorPathPlannerNode; -using autoware::planning_test_manager::PlanningInterfaceTestManager; - -std::shared_ptr generateTestManager() -{ - auto test_manager = std::make_shared(); - - // set subscriber with topic name: behavior_path_planner → test_node_ - test_manager->setPathWithLaneIdSubscriber("behavior_path_planner/output/path"); - - // set behavior_path_planner's input topic name(this topic is changed to test node) - test_manager->setRouteInputTopicName("behavior_path_planner/input/route"); - - test_manager->setInitialPoseTopicName("behavior_path_planner/input/odometry"); - - return test_manager; -} - -std::shared_ptr generateNode() -{ - auto node_options = rclcpp::NodeOptions{}; - const auto autoware_test_utils_dir = - ament_index_cpp::get_package_share_directory("autoware_test_utils"); - const auto behavior_path_planner_dir = - ament_index_cpp::get_package_share_directory("autoware_behavior_path_planner"); - const auto behavior_path_lane_change_module_dir = - ament_index_cpp::get_package_share_directory("autoware_behavior_path_lane_change_module"); - - std::vector module_names; - module_names.emplace_back("autoware::behavior_path_planner::AvoidanceByLaneChangeModuleManager"); - - std::vector params; - params.emplace_back("launch_modules", module_names); - node_options.parameter_overrides(params); - - autoware::test_utils::updateNodeOptions( - node_options, {autoware_test_utils_dir + "/config/test_common.param.yaml", - autoware_test_utils_dir + "/config/test_nearest_search.param.yaml", - autoware_test_utils_dir + "/config/test_vehicle_info.param.yaml", - behavior_path_planner_dir + "/config/behavior_path_planner.param.yaml", - behavior_path_planner_dir + "/config/drivable_area_expansion.param.yaml", - behavior_path_planner_dir + "/config/scene_module_manager.param.yaml", - behavior_path_lane_change_module_dir + "/config/lane_change.param.yaml", - ament_index_cpp::get_package_share_directory( - "autoware_behavior_path_static_obstacle_avoidance_module") + - "/config/static_obstacle_avoidance.param.yaml", - ament_index_cpp::get_package_share_directory( - "autoware_behavior_path_avoidance_by_lane_change_module") + - "/config/avoidance_by_lane_change.param.yaml"}); - - return std::make_shared(node_options); -} - -void publishMandatoryTopics( - std::shared_ptr test_manager, - std::shared_ptr test_target_node) -{ - // publish necessary topics from test_manager - test_manager->publishInitialPose(test_target_node, "behavior_path_planner/input/odometry"); - test_manager->publishAcceleration(test_target_node, "behavior_path_planner/input/accel"); - test_manager->publishPredictedObjects(test_target_node, "behavior_path_planner/input/perception"); - test_manager->publishOccupancyGrid( - test_target_node, "behavior_path_planner/input/occupancy_grid_map"); - test_manager->publishLaneDrivingScenario( - test_target_node, "behavior_path_planner/input/scenario"); - test_manager->publishMap(test_target_node, "behavior_path_planner/input/vector_map"); - test_manager->publishCostMap(test_target_node, "behavior_path_planner/input/costmap"); - test_manager->publishOperationModeState(test_target_node, "system/operation_mode/state"); - test_manager->publishLateralOffset( - test_target_node, "behavior_path_planner/input/lateral_offset"); -} +using autoware::behavior_path_planner::generateNode; +using autoware::behavior_path_planner::generateTestManager; +using autoware::behavior_path_planner::publishMandatoryTopics; TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionRoute) { rclcpp::init(0, nullptr); - auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_manager = generateTestManager(); + auto test_target_node = generateNode( + {"lane_change", "static_obstacle_avoidance", "avoidance_by_lane_change"}, + {"autoware::behavior_path_planner::AvoidanceByLaneChangeModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); // test for normal trajectory @@ -119,7 +49,9 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) rclcpp::init(0, nullptr); auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = generateNode( + {"lane_change", "static_obstacle_avoidance", "avoidance_by_lane_change"}, + {"autoware::behavior_path_planner::AvoidanceByLaneChangeModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); // test for normal trajectory diff --git a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/test/test_behavior_path_planner_node_interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/test/test_behavior_path_planner_node_interface.cpp index a18a2440dcb3a..488475079613f 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/test/test_behavior_path_planner_node_interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/test/test_behavior_path_planner_node_interface.cpp @@ -12,87 +12,23 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware/behavior_path_planner/behavior_path_planner_node.hpp" - -#include -#include -#include +#include "autoware/behavior_path_planner/test_utils.hpp" #include #include #include -using autoware::behavior_path_planner::BehaviorPathPlannerNode; -using autoware::planning_test_manager::PlanningInterfaceTestManager; - -std::shared_ptr generateTestManager() -{ - auto test_manager = std::make_shared(); - - // set subscriber with topic name: behavior_path_planner → test_node_ - test_manager->setPathWithLaneIdSubscriber("behavior_path_planner/output/path"); - - // set behavior_path_planner's input topic name(this topic is changed to test node) - test_manager->setRouteInputTopicName("behavior_path_planner/input/route"); - - test_manager->setInitialPoseTopicName("behavior_path_planner/input/odometry"); - - return test_manager; -} - -std::shared_ptr generateNode() -{ - auto node_options = rclcpp::NodeOptions{}; - const auto autoware_test_utils_dir = - ament_index_cpp::get_package_share_directory("autoware_test_utils"); - const auto behavior_path_planner_dir = - ament_index_cpp::get_package_share_directory("autoware_behavior_path_planner"); - - std::vector module_names; - module_names.emplace_back("autoware::behavior_path_planner::DynamicAvoidanceModuleManager"); - - std::vector params; - params.emplace_back("launch_modules", module_names); - node_options.parameter_overrides(params); - - autoware::test_utils::updateNodeOptions( - node_options, {autoware_test_utils_dir + "/config/test_common.param.yaml", - autoware_test_utils_dir + "/config/test_nearest_search.param.yaml", - autoware_test_utils_dir + "/config/test_vehicle_info.param.yaml", - behavior_path_planner_dir + "/config/behavior_path_planner.param.yaml", - behavior_path_planner_dir + "/config/drivable_area_expansion.param.yaml", - behavior_path_planner_dir + "/config/scene_module_manager.param.yaml", - ament_index_cpp::get_package_share_directory( - "autoware_behavior_path_dynamic_obstacle_avoidance_module") + - "/config/dynamic_obstacle_avoidance.param.yaml"}); - - return std::make_shared(node_options); -} - -void publishMandatoryTopics( - std::shared_ptr test_manager, - std::shared_ptr test_target_node) -{ - // publish necessary topics from test_manager - test_manager->publishInitialPose(test_target_node, "behavior_path_planner/input/odometry"); - test_manager->publishAcceleration(test_target_node, "behavior_path_planner/input/accel"); - test_manager->publishPredictedObjects(test_target_node, "behavior_path_planner/input/perception"); - test_manager->publishOccupancyGrid( - test_target_node, "behavior_path_planner/input/occupancy_grid_map"); - test_manager->publishLaneDrivingScenario( - test_target_node, "behavior_path_planner/input/scenario"); - test_manager->publishMap(test_target_node, "behavior_path_planner/input/vector_map"); - test_manager->publishCostMap(test_target_node, "behavior_path_planner/input/costmap"); - test_manager->publishOperationModeState(test_target_node, "system/operation_mode/state"); - test_manager->publishLateralOffset( - test_target_node, "behavior_path_planner/input/lateral_offset"); -} +using autoware::behavior_path_planner::generateNode; +using autoware::behavior_path_planner::generateTestManager; +using autoware::behavior_path_planner::publishMandatoryTopics; TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionRoute) { rclcpp::init(0, nullptr); auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = generateNode( + {"dynamic_obstacle_avoidance"}, + {"autoware::behavior_path_planner::DynamicObstacleAvoidanceModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); @@ -110,7 +46,9 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) rclcpp::init(0, nullptr); auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = generateNode( + {"dynamic_obstacle_avoidance"}, + {"autoware::behavior_path_planner::DynamicObstacleAvoidanceModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); // test for normal trajectory diff --git a/planning/behavior_path_planner/autoware_behavior_path_external_request_lane_change_module/test/test_behavior_path_planner_node_interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_external_request_lane_change_module/test/test_behavior_path_planner_node_interface.cpp index ad37a90605233..506e43a94de1d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_external_request_lane_change_module/test/test_behavior_path_planner_node_interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_external_request_lane_change_module/test/test_behavior_path_planner_node_interface.cpp @@ -12,10 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "ament_index_cpp/get_package_share_directory.hpp" -#include "autoware/behavior_path_planner/behavior_path_planner_node.hpp" -#include "autoware_planning_test_manager/autoware_planning_test_manager.hpp" -#include "autoware_test_utils/autoware_test_utils.hpp" +#include "autoware/behavior_path_planner/test_utils.hpp" #include @@ -24,83 +21,19 @@ #include #include -using autoware::behavior_path_planner::BehaviorPathPlannerNode; -using autoware::planning_test_manager::PlanningInterfaceTestManager; - -std::shared_ptr generateTestManager() -{ - auto test_manager = std::make_shared(); - - // set subscriber with topic name: behavior_path_planner → test_node_ - test_manager->setPathWithLaneIdSubscriber("behavior_path_planner/output/path"); - - // set behavior_path_planner's input topic name(this topic is changed to test node) - test_manager->setRouteInputTopicName("behavior_path_planner/input/route"); - - test_manager->setInitialPoseTopicName("behavior_path_planner/input/odometry"); - - return test_manager; -} - -std::shared_ptr generateNode() -{ - auto node_options = rclcpp::NodeOptions{}; - const auto autoware_test_utils_dir = - ament_index_cpp::get_package_share_directory("autoware_test_utils"); - const auto behavior_path_planner_dir = - ament_index_cpp::get_package_share_directory("autoware_behavior_path_planner"); - const auto behavior_path_lane_change_module_dir = - ament_index_cpp::get_package_share_directory("autoware_behavior_path_lane_change_module"); - - std::vector module_names; - module_names.emplace_back( - "autoware::behavior_path_planner::ExternalRequestLaneChangeRightModuleManager"); - module_names.emplace_back( - "autoware::behavior_path_planner::ExternalRequestLaneChangeLeftModuleManager"); - - std::vector params; - params.emplace_back("launch_modules", module_names); - node_options.parameter_overrides(params); - - autoware::test_utils::updateNodeOptions( - node_options, { - autoware_test_utils_dir + "/config/test_common.param.yaml", - autoware_test_utils_dir + "/config/test_nearest_search.param.yaml", - autoware_test_utils_dir + "/config/test_vehicle_info.param.yaml", - behavior_path_planner_dir + "/config/behavior_path_planner.param.yaml", - behavior_path_planner_dir + "/config/drivable_area_expansion.param.yaml", - behavior_path_planner_dir + "/config/scene_module_manager.param.yaml", - behavior_path_lane_change_module_dir + "/config/lane_change.param.yaml", - }); - - return std::make_shared(node_options); -} - -void publishMandatoryTopics( - std::shared_ptr test_manager, - std::shared_ptr test_target_node) -{ - // publish necessary topics from test_manager - test_manager->publishInitialPose(test_target_node, "behavior_path_planner/input/odometry"); - test_manager->publishAcceleration(test_target_node, "behavior_path_planner/input/accel"); - test_manager->publishPredictedObjects(test_target_node, "behavior_path_planner/input/perception"); - test_manager->publishOccupancyGrid( - test_target_node, "behavior_path_planner/input/occupancy_grid_map"); - test_manager->publishLaneDrivingScenario( - test_target_node, "behavior_path_planner/input/scenario"); - test_manager->publishMap(test_target_node, "behavior_path_planner/input/vector_map"); - test_manager->publishCostMap(test_target_node, "behavior_path_planner/input/costmap"); - test_manager->publishOperationModeState(test_target_node, "system/operation_mode/state"); - test_manager->publishLateralOffset( - test_target_node, "behavior_path_planner/input/lateral_offset"); -} +using autoware::behavior_path_planner::generateNode; +using autoware::behavior_path_planner::generateTestManager; +using autoware::behavior_path_planner::publishMandatoryTopics; TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionRoute) { rclcpp::init(0, nullptr); - auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_manager = generateTestManager(); + auto test_target_node = generateNode( + {"lane_change"}, + {"autoware::behavior_path_planner::ExternalRequestLaneChangeRightModuleManager", + "autoware::behavior_path_planner::ExternalRequestLaneChangeLeftModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); // test for normal trajectory @@ -117,7 +50,10 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) rclcpp::init(0, nullptr); auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = generateNode( + {"lane_change"}, + {"autoware::behavior_path_planner::ExternalRequestLaneChangeRightModuleManager", + "autoware::behavior_path_planner::ExternalRequestLaneChangeLeftModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); // test for normal trajectory diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/test/test_behavior_path_planner_node_interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/test/test_behavior_path_planner_node_interface.cpp index 555657fe34af9..f6b3e9eeaf715 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/test/test_behavior_path_planner_node_interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/test/test_behavior_path_planner_node_interface.cpp @@ -12,10 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "ament_index_cpp/get_package_share_directory.hpp" -#include "autoware/behavior_path_planner/behavior_path_planner_node.hpp" -#include "autoware_planning_test_manager/autoware_planning_test_manager.hpp" -#include "autoware_test_utils/autoware_test_utils.hpp" +#include "autoware/behavior_path_planner/test_utils.hpp" #include @@ -24,78 +21,18 @@ #include #include -using autoware::behavior_path_planner::BehaviorPathPlannerNode; -using autoware::planning_test_manager::PlanningInterfaceTestManager; - -std::shared_ptr generateTestManager() -{ - auto test_manager = std::make_shared(); - - // set subscriber with topic name: behavior_path_planner → test_node_ - test_manager->setPathWithLaneIdSubscriber("behavior_path_planner/output/path"); - - // set behavior_path_planner's input topic name(this topic is changed to test node) - test_manager->setRouteInputTopicName("behavior_path_planner/input/route"); - - test_manager->setInitialPoseTopicName("behavior_path_planner/input/odometry"); - - return test_manager; -} - -std::shared_ptr generateNode() -{ - auto node_options = rclcpp::NodeOptions{}; - const auto autoware_test_utils_dir = - ament_index_cpp::get_package_share_directory("autoware_test_utils"); - const auto behavior_path_planner_dir = - ament_index_cpp::get_package_share_directory("autoware_behavior_path_planner"); - const auto behavior_path_lane_change_module_dir = - ament_index_cpp::get_package_share_directory("autoware_behavior_path_lane_change_module"); - - std::vector module_names; - module_names.emplace_back("autoware::behavior_path_planner::LaneChangeRightModuleManager"); - module_names.emplace_back("autoware::behavior_path_planner::LaneChangeLeftModuleManager"); - - std::vector params; - params.emplace_back("launch_modules", module_names); - node_options.parameter_overrides(params); - - autoware::test_utils::updateNodeOptions( - node_options, {autoware_test_utils_dir + "/config/test_common.param.yaml", - autoware_test_utils_dir + "/config/test_nearest_search.param.yaml", - autoware_test_utils_dir + "/config/test_vehicle_info.param.yaml", - behavior_path_planner_dir + "/config/behavior_path_planner.param.yaml", - behavior_path_planner_dir + "/config/drivable_area_expansion.param.yaml", - behavior_path_planner_dir + "/config/scene_module_manager.param.yaml", - behavior_path_lane_change_module_dir + "/config/lane_change.param.yaml"}); - - return std::make_shared(node_options); -} - -void publishMandatoryTopics( - std::shared_ptr test_manager, - std::shared_ptr test_target_node) -{ - // publish necessary topics from test_manager - test_manager->publishInitialPose(test_target_node, "behavior_path_planner/input/odometry"); - test_manager->publishAcceleration(test_target_node, "behavior_path_planner/input/accel"); - test_manager->publishPredictedObjects(test_target_node, "behavior_path_planner/input/perception"); - test_manager->publishOccupancyGrid( - test_target_node, "behavior_path_planner/input/occupancy_grid_map"); - test_manager->publishLaneDrivingScenario( - test_target_node, "behavior_path_planner/input/scenario"); - test_manager->publishMap(test_target_node, "behavior_path_planner/input/vector_map"); - test_manager->publishCostMap(test_target_node, "behavior_path_planner/input/costmap"); - test_manager->publishOperationModeState(test_target_node, "system/operation_mode/state"); - test_manager->publishLateralOffset( - test_target_node, "behavior_path_planner/input/lateral_offset"); -} +using autoware::behavior_path_planner::generateNode; +using autoware::behavior_path_planner::generateTestManager; +using autoware::behavior_path_planner::publishMandatoryTopics; TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionRoute) { rclcpp::init(0, nullptr); + auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = generateNode( + {"lane_change"}, {"autoware::behavior_path_planner::LaneChangeRightModuleManager", + "autoware::behavior_path_planner::LaneChangeLeftModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); @@ -113,7 +50,9 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) rclcpp::init(0, nullptr); auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = generateNode( + {"lane_change"}, {"autoware::behavior_path_planner::LaneChangeRightModuleManager", + "autoware::behavior_path_planner::LaneChangeLeftModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); // test for normal trajectory diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/CMakeLists.txt b/planning/behavior_path_planner/autoware_behavior_path_planner/CMakeLists.txt index cadaacd01d9c9..f43b454cfb100 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/CMakeLists.txt +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/CMakeLists.txt @@ -10,6 +10,7 @@ find_package(magic_enum CONFIG REQUIRED) ament_auto_add_library(${PROJECT_NAME}_lib SHARED src/planner_manager.cpp src/behavior_path_planner_node.cpp + src/test_utils.cpp ) target_include_directories(${PROJECT_NAME}_lib SYSTEM PUBLIC diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/test_utils.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/test_utils.hpp new file mode 100644 index 0000000000000..5e1718419f139 --- /dev/null +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/test_utils.hpp @@ -0,0 +1,42 @@ +// Copyright 2024 TIER IV, Inc. +// +// 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 AUTOWARE__BEHAVIOR_PATH_PLANNER__TEST_UTILS_HPP_ +#define AUTOWARE__BEHAVIOR_PATH_PLANNER__TEST_UTILS_HPP_ + +#include "autoware/behavior_path_planner/behavior_path_planner_node.hpp" + +#include + +#include +#include +#include + +namespace autoware::behavior_path_planner +{ +using autoware::behavior_path_planner::BehaviorPathPlannerNode; +using autoware::planning_test_manager::PlanningInterfaceTestManager; + +std::shared_ptr generateTestManager(); + +std::shared_ptr generateNode( + const std::vector & module_name_vec, + const std::vector & plugin_name_vec); + +void publishMandatoryTopics( + std::shared_ptr test_manager, + std::shared_ptr test_target_node); +} // namespace autoware::behavior_path_planner + +#endif // AUTOWARE__BEHAVIOR_PATH_PLANNER__TEST_UTILS_HPP_ diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/src/test_utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_planner/src/test_utils.cpp new file mode 100644 index 0000000000000..2ce6f5bee9a50 --- /dev/null +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/src/test_utils.cpp @@ -0,0 +1,101 @@ +// Copyright 2024 TIER IV, Inc. +// +// 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 "autoware/behavior_path_planner/test_utils.hpp" + +#include +#include +#include + +#include +#include +#include + +namespace autoware::behavior_path_planner +{ +std::shared_ptr generateTestManager() +{ + auto test_manager = std::make_shared(); + + // set subscriber with topic name: behavior_path_planner → test_node_ + test_manager->setPathWithLaneIdSubscriber("behavior_path_planner/output/path"); + + // set behavior_path_planner's input topic name(this topic is changed to test node) + test_manager->setRouteInputTopicName("behavior_path_planner/input/route"); + + test_manager->setInitialPoseTopicName("behavior_path_planner/input/odometry"); + + return test_manager; +} + +std::shared_ptr generateNode( + const std::vector & module_name_vec, + const std::vector & plugin_name_vec) +{ + auto node_options = rclcpp::NodeOptions{}; + const auto autoware_test_utils_dir = + ament_index_cpp::get_package_share_directory("autoware_test_utils"); + const auto behavior_path_planner_dir = + ament_index_cpp::get_package_share_directory("autoware_behavior_path_planner"); + + std::vector plugin_names; + for (const auto & plugin_name : plugin_name_vec) { + plugin_names.emplace_back(plugin_name); + } + + std::vector params; + params.emplace_back("launch_modules", plugin_names); + node_options.parameter_overrides(params); + + const auto get_behavior_path_module_config = [](const std::string & module) { + const auto package_name = "autoware_behavior_path_" + module + "_module"; + const auto package_path = ament_index_cpp::get_package_share_directory(package_name); + return package_path + "/config/" + module + ".param.yaml"; + }; + + auto yaml_files = std::vector{ + autoware_test_utils_dir + "/config/test_common.param.yaml", + autoware_test_utils_dir + "/config/test_nearest_search.param.yaml", + autoware_test_utils_dir + "/config/test_vehicle_info.param.yaml", + behavior_path_planner_dir + "/config/behavior_path_planner.param.yaml", + behavior_path_planner_dir + "/config/drivable_area_expansion.param.yaml", + behavior_path_planner_dir + "/config/scene_module_manager.param.yaml"}; + for (const auto & module_name : module_name_vec) { + yaml_files.push_back(get_behavior_path_module_config(module_name)); + } + + autoware::test_utils::updateNodeOptions(node_options, yaml_files); + + return std::make_shared(node_options); +} + +void publishMandatoryTopics( + std::shared_ptr test_manager, + std::shared_ptr test_target_node) +{ + // publish necessary topics from test_manager + test_manager->publishInitialPose(test_target_node, "behavior_path_planner/input/odometry"); + test_manager->publishAcceleration(test_target_node, "behavior_path_planner/input/accel"); + test_manager->publishPredictedObjects(test_target_node, "behavior_path_planner/input/perception"); + test_manager->publishOccupancyGrid( + test_target_node, "behavior_path_planner/input/occupancy_grid_map"); + test_manager->publishLaneDrivingScenario( + test_target_node, "behavior_path_planner/input/scenario"); + test_manager->publishMap(test_target_node, "behavior_path_planner/input/vector_map"); + test_manager->publishCostMap(test_target_node, "behavior_path_planner/input/costmap"); + test_manager->publishOperationModeState(test_target_node, "system/operation_mode/state"); + test_manager->publishLateralOffset( + test_target_node, "behavior_path_planner/input/lateral_offset"); +} +} // namespace autoware::behavior_path_planner diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/test/test_autoware_behavior_path_planner_node_interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_planner/test/test_autoware_behavior_path_planner_node_interface.cpp index 63b7ccf3fff12..0c933345e7647 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/test/test_autoware_behavior_path_planner_node_interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/test/test_autoware_behavior_path_planner_node_interface.cpp @@ -13,10 +13,7 @@ // limitations under the License. #include "autoware/behavior_path_planner/behavior_path_planner_node.hpp" - -#include -#include -#include +#include "autoware/behavior_path_planner/test_utils.hpp" #include @@ -25,73 +22,15 @@ #include #include -using autoware::behavior_path_planner::BehaviorPathPlannerNode; -using autoware::planning_test_manager::PlanningInterfaceTestManager; - -std::shared_ptr generateTestManager() -{ - auto test_manager = std::make_shared(); - - // set subscriber with topic name: behavior_path_planner → test_node_ - test_manager->setPathWithLaneIdSubscriber("behavior_path_planner/output/path"); - - // set behavior_path_planner's input topic name(this topic is changed to test node) - test_manager->setRouteInputTopicName("behavior_path_planner/input/route"); - - test_manager->setInitialPoseTopicName("behavior_path_planner/input/odometry"); - - return test_manager; -} - -std::shared_ptr generateNode() -{ - auto node_options = rclcpp::NodeOptions{}; - const auto autoware_test_utils_dir = - ament_index_cpp::get_package_share_directory("autoware_test_utils"); - const auto behavior_path_planner_dir = - ament_index_cpp::get_package_share_directory("autoware_behavior_path_planner"); - - std::vector module_names; - - std::vector params; - params.emplace_back("launch_modules", module_names); - node_options.parameter_overrides(params); - - autoware::test_utils::updateNodeOptions( - node_options, {autoware_test_utils_dir + "/config/test_common.param.yaml", - autoware_test_utils_dir + "/config/test_nearest_search.param.yaml", - autoware_test_utils_dir + "/config/test_vehicle_info.param.yaml", - behavior_path_planner_dir + "/config/behavior_path_planner.param.yaml", - behavior_path_planner_dir + "/config/drivable_area_expansion.param.yaml", - behavior_path_planner_dir + "/config/scene_module_manager.param.yaml"}); - - return std::make_shared(node_options); -} - -void publishMandatoryTopics( - std::shared_ptr test_manager, - std::shared_ptr test_target_node) -{ - // publish necessary topics from test_manager - test_manager->publishInitialPose(test_target_node, "behavior_path_planner/input/odometry"); - test_manager->publishAcceleration(test_target_node, "behavior_path_planner/input/accel"); - test_manager->publishPredictedObjects(test_target_node, "behavior_path_planner/input/perception"); - test_manager->publishOccupancyGrid( - test_target_node, "behavior_path_planner/input/occupancy_grid_map"); - test_manager->publishLaneDrivingScenario( - test_target_node, "behavior_path_planner/input/scenario"); - test_manager->publishMap(test_target_node, "behavior_path_planner/input/vector_map"); - test_manager->publishCostMap(test_target_node, "behavior_path_planner/input/costmap"); - test_manager->publishOperationModeState(test_target_node, "system/operation_mode/state"); - test_manager->publishLateralOffset( - test_target_node, "behavior_path_planner/input/lateral_offset"); -} +using autoware::behavior_path_planner::generateNode; +using autoware::behavior_path_planner::generateTestManager; +using autoware::behavior_path_planner::publishMandatoryTopics; TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionRoute) { rclcpp::init(0, nullptr); auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = generateNode({}, {}); publishMandatoryTopics(test_manager, test_target_node); @@ -109,7 +48,7 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) rclcpp::init(0, nullptr); auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = generateNode({}, {}); publishMandatoryTopics(test_manager, test_target_node); // test for normal trajectory diff --git a/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/test/test_behavior_path_planner_node_interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/test/test_behavior_path_planner_node_interface.cpp index c8661cdf1d912..c248a40eb151a 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/test/test_behavior_path_planner_node_interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_side_shift_module/test/test_behavior_path_planner_node_interface.cpp @@ -12,11 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware/behavior_path_planner/behavior_path_planner_node.hpp" - -#include -#include -#include +#include "autoware/behavior_path_planner/test_utils.hpp" #include @@ -25,77 +21,16 @@ #include #include -using autoware::behavior_path_planner::BehaviorPathPlannerNode; -using autoware::planning_test_manager::PlanningInterfaceTestManager; - -std::shared_ptr generateTestManager() -{ - auto test_manager = std::make_shared(); - - // set subscriber with topic name: behavior_path_planner → test_node_ - test_manager->setPathWithLaneIdSubscriber("behavior_path_planner/output/path"); - - // set behavior_path_planner's input topic name(this topic is changed to test node) - test_manager->setRouteInputTopicName("behavior_path_planner/input/route"); - - test_manager->setInitialPoseTopicName("behavior_path_planner/input/odometry"); - - return test_manager; -} - -std::shared_ptr generateNode() -{ - auto node_options = rclcpp::NodeOptions{}; - const auto autoware_test_utils_dir = - ament_index_cpp::get_package_share_directory("autoware_test_utils"); - const auto behavior_path_planner_dir = - ament_index_cpp::get_package_share_directory("autoware_behavior_path_planner"); - - std::vector module_names; - module_names.emplace_back("autoware::behavior_path_planner::SideShiftModuleManager"); - - std::vector params; - params.emplace_back("launch_modules", module_names); - node_options.parameter_overrides(params); - - autoware::test_utils::updateNodeOptions( - node_options, - {autoware_test_utils_dir + "/config/test_common.param.yaml", - autoware_test_utils_dir + "/config/test_nearest_search.param.yaml", - autoware_test_utils_dir + "/config/test_vehicle_info.param.yaml", - behavior_path_planner_dir + "/config/behavior_path_planner.param.yaml", - behavior_path_planner_dir + "/config/drivable_area_expansion.param.yaml", - behavior_path_planner_dir + "/config/scene_module_manager.param.yaml", - ament_index_cpp::get_package_share_directory("autoware_behavior_path_side_shift_module") + - "/config/side_shift.param.yaml"}); - - return std::make_shared(node_options); -} - -void publishMandatoryTopics( - std::shared_ptr test_manager, - std::shared_ptr test_target_node) -{ - // publish necessary topics from test_manager - test_manager->publishInitialPose(test_target_node, "behavior_path_planner/input/odometry"); - test_manager->publishAcceleration(test_target_node, "behavior_path_planner/input/accel"); - test_manager->publishPredictedObjects(test_target_node, "behavior_path_planner/input/perception"); - test_manager->publishOccupancyGrid( - test_target_node, "behavior_path_planner/input/occupancy_grid_map"); - test_manager->publishLaneDrivingScenario( - test_target_node, "behavior_path_planner/input/scenario"); - test_manager->publishMap(test_target_node, "behavior_path_planner/input/vector_map"); - test_manager->publishCostMap(test_target_node, "behavior_path_planner/input/costmap"); - test_manager->publishOperationModeState(test_target_node, "system/operation_mode/state"); - test_manager->publishLateralOffset( - test_target_node, "behavior_path_planner/input/lateral_offset"); -} +using autoware::behavior_path_planner::generateNode; +using autoware::behavior_path_planner::generateTestManager; +using autoware::behavior_path_planner::publishMandatoryTopics; TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionRoute) { rclcpp::init(0, nullptr); auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = + generateNode({"side_shift"}, {"autoware::behavior_path_planner::SideShiftModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); @@ -113,7 +48,8 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) rclcpp::init(0, nullptr); auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = + generateNode({"side_shift"}, {"autoware::behavior_path_planner::SideShiftModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); // test for normal trajectory diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/test/test_behavior_path_planner_node_interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/test/test_behavior_path_planner_node_interface.cpp index b6a8fd04f93db..c2531e5f2bb9f 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/test/test_behavior_path_planner_node_interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/test/test_behavior_path_planner_node_interface.cpp @@ -12,89 +12,24 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware/behavior_path_planner/behavior_path_planner_node.hpp" - -#include -#include -#include +#include "autoware/behavior_path_planner/test_utils.hpp" #include #include #include -using autoware::behavior_path_planner::BehaviorPathPlannerNode; -using autoware::planning_test_manager::PlanningInterfaceTestManager; - -std::shared_ptr generateTestManager() -{ - auto test_manager = std::make_shared(); - - // set subscriber with topic name: behavior_path_planner → test_node_ - test_manager->setPathWithLaneIdSubscriber("behavior_path_planner/output/path"); - - // set behavior_path_planner's input topic name(this topic is changed to test node) - test_manager->setRouteInputTopicName("behavior_path_planner/input/route"); - - test_manager->setInitialPoseTopicName("behavior_path_planner/input/odometry"); - - return test_manager; -} - -std::shared_ptr generateNode() -{ - auto node_options = rclcpp::NodeOptions{}; - const auto autoware_test_utils_dir = - ament_index_cpp::get_package_share_directory("autoware_test_utils"); - const auto behavior_path_planner_dir = - ament_index_cpp::get_package_share_directory("autoware_behavior_path_planner"); - - std::vector module_names; - module_names.emplace_back( - "autoware::behavior_path_planner::StaticObstacleAvoidanceModuleManager"); - - std::vector params; - params.emplace_back("launch_modules", module_names); - node_options.parameter_overrides(params); - - autoware::test_utils::updateNodeOptions( - node_options, {autoware_test_utils_dir + "/config/test_common.param.yaml", - autoware_test_utils_dir + "/config/test_nearest_search.param.yaml", - autoware_test_utils_dir + "/config/test_vehicle_info.param.yaml", - behavior_path_planner_dir + "/config/behavior_path_planner.param.yaml", - behavior_path_planner_dir + "/config/drivable_area_expansion.param.yaml", - behavior_path_planner_dir + "/config/scene_module_manager.param.yaml", - ament_index_cpp::get_package_share_directory( - "autoware_behavior_path_static_obstacle_avoidance_module") + - "/config/static_obstacle_avoidance.param.yaml"}); - - return std::make_shared(node_options); -} - -void publishMandatoryTopics( - std::shared_ptr test_manager, - std::shared_ptr test_target_node) -{ - // publish necessary topics from test_manager - test_manager->publishInitialPose(test_target_node, "behavior_path_planner/input/odometry"); - test_manager->publishAcceleration(test_target_node, "behavior_path_planner/input/accel"); - test_manager->publishPredictedObjects(test_target_node, "behavior_path_planner/input/perception"); - test_manager->publishOccupancyGrid( - test_target_node, "behavior_path_planner/input/occupancy_grid_map"); - test_manager->publishLaneDrivingScenario( - test_target_node, "behavior_path_planner/input/scenario"); - test_manager->publishMap(test_target_node, "behavior_path_planner/input/vector_map"); - test_manager->publishCostMap(test_target_node, "behavior_path_planner/input/costmap"); - test_manager->publishOperationModeState(test_target_node, "system/operation_mode/state"); - test_manager->publishLateralOffset( - test_target_node, "behavior_path_planner/input/lateral_offset"); -} +using autoware::behavior_path_planner::generateNode; +using autoware::behavior_path_planner::generateTestManager; +using autoware::behavior_path_planner::publishMandatoryTopics; TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionRoute) { rclcpp::init(0, nullptr); - auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_manager = generateTestManager(); + auto test_target_node = generateNode( + {"static_obstacle_avoidance"}, + {"autoware::behavior_path_planner::StaticObstacleAvoidanceModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); // test for normal trajectory @@ -111,7 +46,9 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) rclcpp::init(0, nullptr); auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); + auto test_target_node = generateNode( + {"static_obstacle_avoidance"}, + {"autoware::behavior_path_planner::StaticObstacleAvoidanceModuleManager"}); publishMandatoryTopics(test_manager, test_target_node); // test for normal trajectory