diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt
index b4a688d711221..b28e486c9be05 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt
@@ -13,4 +13,14 @@ ament_auto_add_library(${PROJECT_NAME} SHARED
src/util.cpp
)
+if(BUILD_TESTING)
+ find_package(ament_lint_auto REQUIRED)
+ ament_lint_auto_find_test_dependencies()
+ file(GLOB_RECURSE TEST_SOURCES test/*.cpp)
+ ament_add_ros_isolated_gtest(test_${PROJECT_NAME}
+ ${TEST_SOURCES}
+ )
+ target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME})
+endif()
+
ament_auto_package(INSTALL_TO_SHARE config)
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml
index a2ea4a82a884d..5c5f993d77bb3 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml
@@ -17,6 +17,7 @@
ament_cmake_auto
autoware_cmake
+ autoware_behavior_velocity_planner
autoware_behavior_velocity_planner_common
autoware_lanelet2_extension
autoware_motion_utils
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_node_interface.cpp
new file mode 100644
index 0000000000000..e0ceca4e12951
--- /dev/null
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_node_interface.cpp
@@ -0,0 +1,64 @@
+// 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
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace autoware::behavior_velocity_planner
+{
+TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID)
+{
+ rclcpp::init(0, nullptr);
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode({});
+
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test with nominal path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ // test with empty path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node));
+ rclcpp::shutdown();
+}
+
+TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose)
+{
+ rclcpp::init(0, nullptr);
+
+ const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{
+ "blind_spot", "autoware::behavior_velocity_planner::BlindSpotModulePlugin"}};
+
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec);
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test for normal trajectory
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+
+ // make sure behavior_path_planner is running
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node));
+
+ rclcpp::shutdown();
+}
+} // namespace autoware::behavior_velocity_planner
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/CMakeLists.txt
index 3aff4a524ffdd..53eafaffbba6c 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/CMakeLists.txt
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/CMakeLists.txt
@@ -14,6 +14,7 @@ if(BUILD_TESTING)
ament_lint_auto_find_test_dependencies()
ament_add_ros_isolated_gtest(test_${PROJECT_NAME}
test/test_utils.cpp
+ test/test_node_interface.cpp
)
target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME})
endif()
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml
index ff91cf40a32a6..4ae1d20991078 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml
@@ -17,6 +17,7 @@
autoware_cmake
eigen3_cmake_module
+ autoware_behavior_velocity_planner
autoware_behavior_velocity_planner_common
autoware_lanelet2_extension
autoware_motion_utils
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/test/test_node_interface.cpp
new file mode 100644
index 0000000000000..f84d22debea8e
--- /dev/null
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/test/test_node_interface.cpp
@@ -0,0 +1,64 @@
+// 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
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace autoware::behavior_velocity_planner
+{
+TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID)
+{
+ rclcpp::init(0, nullptr);
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode({});
+
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test with nominal path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ // test with empty path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node));
+ rclcpp::shutdown();
+}
+
+TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose)
+{
+ rclcpp::init(0, nullptr);
+
+ const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{
+ "detection_area", "autoware::behavior_velocity_planner::DetectionAreaModulePlugin"}};
+
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec);
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test for normal trajectory
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+
+ // make sure behavior_path_planner is running
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node));
+
+ rclcpp::shutdown();
+}
+} // namespace autoware::behavior_velocity_planner
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml
index 7a64d1d6638ff..bf7665e054171 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml
@@ -19,6 +19,7 @@
ament_cmake_auto
autoware_cmake
+ autoware_behavior_velocity_planner
autoware_behavior_velocity_planner_common
autoware_internal_debug_msgs
autoware_interpolation
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/test/test_node_interface.cpp
new file mode 100644
index 0000000000000..b515107e0ae8e
--- /dev/null
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/test/test_node_interface.cpp
@@ -0,0 +1,64 @@
+// 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
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace autoware::behavior_velocity_planner
+{
+TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID)
+{
+ rclcpp::init(0, nullptr);
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode({});
+
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test with nominal path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ // test with empty path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node));
+ rclcpp::shutdown();
+}
+
+TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose)
+{
+ rclcpp::init(0, nullptr);
+
+ const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{
+ "intersection", "autoware::behavior_velocity_planner::IntersectionModulePlugin"}};
+
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec);
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test for normal trajectory
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+
+ // make sure behavior_path_planner is running
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node));
+
+ rclcpp::shutdown();
+}
+} // namespace autoware::behavior_velocity_planner
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt
index b710924410549..e6b362271afb3 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt
@@ -14,6 +14,7 @@ if(BUILD_TESTING)
ament_lint_auto_find_test_dependencies()
ament_add_ros_isolated_gtest(test_${PROJECT_NAME}
test/test_utils.cpp
+ test/test_node_interface.cpp
)
target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME})
endif()
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml
index 88fafeb5b90dc..ece9b82ebf425 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml
@@ -17,6 +17,7 @@
ament_cmake_auto
autoware_cmake
+ autoware_behavior_velocity_planner
autoware_behavior_velocity_planner_common
autoware_interpolation
autoware_lanelet2_extension
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/test_node_interface.cpp
new file mode 100644
index 0000000000000..875e757cbfcec
--- /dev/null
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/test_node_interface.cpp
@@ -0,0 +1,64 @@
+// 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
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace autoware::behavior_velocity_planner
+{
+TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID)
+{
+ rclcpp::init(0, nullptr);
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode({});
+
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test with nominal path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ // test with empty path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node));
+ rclcpp::shutdown();
+}
+
+TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose)
+{
+ rclcpp::init(0, nullptr);
+
+ const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{
+ "no_stopping_area", "autoware::behavior_velocity_planner::NoStoppingAreaModulePlugin"}};
+
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec);
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test for normal trajectory
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+
+ // make sure behavior_path_planner is running
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node));
+
+ rclcpp::shutdown();
+}
+} // namespace autoware::behavior_velocity_planner
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/CMakeLists.txt
index da2f4ce33ff60..1436f23aa83ea 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/CMakeLists.txt
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/CMakeLists.txt
@@ -21,6 +21,7 @@ if(BUILD_TESTING)
tests/test_path_utils.cpp
tests/test_utils.cpp
tests/test_state_machine.cpp
+ tests/test_node_interface.cpp
)
target_link_libraries(test_${PROJECT_NAME}
autoware_behavior_velocity_run_out_module
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml
index b3ced8b2e9b9f..18db8281356f8 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml
@@ -20,6 +20,7 @@
eigen3_cmake_module
autoware_behavior_velocity_crosswalk_module
+ autoware_behavior_velocity_planner
autoware_behavior_velocity_planner_common
autoware_internal_debug_msgs
autoware_motion_utils
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_node_interface.cpp
new file mode 100644
index 0000000000000..75bf59751ed44
--- /dev/null
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_node_interface.cpp
@@ -0,0 +1,64 @@
+// 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
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace autoware::behavior_velocity_planner
+{
+TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID)
+{
+ rclcpp::init(0, nullptr);
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode({});
+
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test with nominal path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ // test with empty path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node));
+ rclcpp::shutdown();
+}
+
+TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose)
+{
+ rclcpp::init(0, nullptr);
+
+ const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{
+ "run_out", "autoware::behavior_velocity_planner::RunOutModulePlugin"}};
+
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec);
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test for normal trajectory
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+
+ // make sure behavior_path_planner is running
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node));
+
+ rclcpp::shutdown();
+}
+} // namespace autoware::behavior_velocity_planner
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/CMakeLists.txt
index f4528f0d13cf4..a187b4cda9459 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/CMakeLists.txt
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/CMakeLists.txt
@@ -14,6 +14,7 @@ ament_auto_add_library(${PROJECT_NAME} SHARED
if(BUILD_TESTING)
ament_add_ros_isolated_gtest(test_${PROJECT_NAME}
test/test_scene.cpp
+ test/test_node_interface.cpp
)
target_link_libraries(test_${PROJECT_NAME}
gtest_main
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/test/test_node_interface.cpp
new file mode 100644
index 0000000000000..c6d6ff638cfbb
--- /dev/null
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/test/test_node_interface.cpp
@@ -0,0 +1,64 @@
+// 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
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace autoware::behavior_velocity_planner
+{
+TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID)
+{
+ rclcpp::init(0, nullptr);
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode({});
+
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test with nominal path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ // test with empty path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node));
+ rclcpp::shutdown();
+}
+
+TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose)
+{
+ rclcpp::init(0, nullptr);
+
+ const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{
+ "stop_line", "autoware::behavior_velocity_planner::StopLineModulePlugin"}};
+
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec);
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test for normal trajectory
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+
+ // make sure behavior_path_planner is running
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node));
+
+ rclcpp::shutdown();
+}
+} // namespace autoware::behavior_velocity_planner
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt
index 6370dd5e6c21d..02ed192459970 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt
@@ -15,6 +15,7 @@ ament_auto_add_library(${PROJECT_NAME} SHARED
if(BUILD_TESTING)
ament_add_ros_isolated_gtest(test_${PROJECT_NAME}
test/test_utils.cpp
+ test/test_node_interface.cpp
)
target_link_libraries(test_${PROJECT_NAME}
${PROJECT_NAME}
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/test/test_node_interface.cpp
new file mode 100644
index 0000000000000..e24c2dab5dab9
--- /dev/null
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/test/test_node_interface.cpp
@@ -0,0 +1,64 @@
+// 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
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace autoware::behavior_velocity_planner
+{
+TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID)
+{
+ rclcpp::init(0, nullptr);
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode({});
+
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test with nominal path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ // test with empty path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node));
+ rclcpp::shutdown();
+}
+
+TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose)
+{
+ rclcpp::init(0, nullptr);
+
+ const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{
+ "traffic_light", "autoware::behavior_velocity_planner::TrafficLightModulePlugin"}};
+
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec);
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test for normal trajectory
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+
+ // make sure behavior_path_planner is running
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node));
+
+ rclcpp::shutdown();
+}
+} // namespace autoware::behavior_velocity_planner
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp
new file mode 100644
index 0000000000000..9cb6bbfd40639
--- /dev/null
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp
@@ -0,0 +1,65 @@
+// 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
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace autoware::behavior_velocity_planner
+{
+TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID)
+{
+ rclcpp::init(0, nullptr);
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode({});
+
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test with nominal path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ // test with empty path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node));
+ rclcpp::shutdown();
+}
+
+TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose)
+{
+ rclcpp::init(0, nullptr);
+
+ const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{
+ "virtual_traffic_light",
+ "autoware::behavior_velocity_planner::VirtualTrafficLightModulePlugin"}};
+
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec);
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test for normal trajectory
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+
+ // make sure behavior_path_planner is running
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node));
+
+ rclcpp::shutdown();
+}
+} // namespace autoware::behavior_velocity_planner
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/CMakeLists.txt
index 11504d9c8999c..8b11fdce7283e 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/CMakeLists.txt
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/CMakeLists.txt
@@ -11,4 +11,14 @@ ament_auto_add_library(${PROJECT_NAME} SHARED
src/scene_walkway.cpp
)
+if(BUILD_TESTING)
+ find_package(ament_lint_auto REQUIRED)
+ ament_lint_auto_find_test_dependencies()
+ file(GLOB_RECURSE TEST_SOURCES test/*.cpp)
+ ament_add_ros_isolated_gtest(test_${PROJECT_NAME}
+ ${TEST_SOURCES}
+ )
+ target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME})
+endif()
+
ament_auto_package(INSTALL_TO_SHARE config)
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/package.xml
index 5f1aea22855a4..44374062cdfb7 100644
--- a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/package.xml
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/package.xml
@@ -18,6 +18,7 @@
autoware_cmake
autoware_behavior_velocity_crosswalk_module
+ autoware_behavior_velocity_planner
autoware_behavior_velocity_planner_common
autoware_lanelet2_extension
autoware_motion_utils
diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/test/test_node_interface.cpp
new file mode 100644
index 0000000000000..e0b7fa5c31965
--- /dev/null
+++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/test/test_node_interface.cpp
@@ -0,0 +1,64 @@
+// 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
+
+#include
+
+#include
+#include
+#include
+#include
+
+namespace autoware::behavior_velocity_planner
+{
+TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID)
+{
+ rclcpp::init(0, nullptr);
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode({});
+
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test with nominal path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ // test with empty path_with_lane_id
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node));
+ rclcpp::shutdown();
+}
+
+TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose)
+{
+ rclcpp::init(0, nullptr);
+
+ const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{
+ "walkway", "autoware::behavior_velocity_planner::WalkwayModulePlugin"}};
+
+ auto test_manager = autoware::behavior_velocity_planner::generateTestManager();
+ auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec);
+ autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node);
+
+ // test for normal trajectory
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node));
+
+ // make sure behavior_path_planner is running
+ EXPECT_GE(test_manager->getReceivedTopicNum(), 1);
+
+ ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node));
+
+ rclcpp::shutdown();
+}
+} // namespace autoware::behavior_velocity_planner