Skip to content

Commit d5b8dbb

Browse files
committed
Merge branch 'master' into feature/quality-level-rep-2004
2 parents 724ca82 + 2eee57b commit d5b8dbb

21 files changed

Lines changed: 552 additions & 24 deletions

CPPLINT.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
set noparent
2-
filter=-build/include_order,-build/header_guard,-runtime/string
2+
filter=-build/header_guard,-runtime/string

codecov.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ignore:
2+
- "system_modes_examples"
3+
- "system_modes/test"
4+
- "**/*_node.cpp"

system_modes/CMakeLists.txt

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ if(BUILD_TESTING)
109109
ament_lint_auto_find_test_dependencies()
110110

111111
set(MODE_FILE_CORRECT ${CMAKE_CURRENT_SOURCE_DIR}/test/test_modes.yaml)
112+
set(MODE_FILE_RULES ${CMAKE_CURRENT_SOURCE_DIR}/test/test_modes_rules.yaml)
112113
set(MODE_FILE_WRONG ${CMAKE_CURRENT_SOURCE_DIR}/test/test_modes_wrong.yaml)
113114
configure_file(test/modefiles.h.in ${CMAKE_CURRENT_BINARY_DIR}/system_modes/modefiles.h)
114115
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
@@ -147,12 +148,44 @@ if(BUILD_TESTING)
147148
target_link_libraries(test_mode_inference mode)
148149
endif()
149150

151+
ament_add_gtest(test_mode_handling test/test_mode_handling.cpp)
152+
if(TARGET test_mode_handling)
153+
target_include_directories(test_mode_handling PUBLIC
154+
${rclcpp_INCLUDE_DIRS}
155+
${CMAKE_CURRENT_BINARY_DIR}/system_modes/
156+
)
157+
target_link_libraries(test_mode_handling mode)
158+
endif()
159+
160+
ament_add_gtest(test_mode_manager
161+
test/test_mode_manager.cpp
162+
src/system_modes/mode_manager.cpp)
163+
if(TARGET test_mode_manager)
164+
target_include_directories(test_mode_manager PUBLIC
165+
${rclcpp_INCLUDE_DIRS}
166+
${CMAKE_CURRENT_BINARY_DIR}/system_modes/
167+
)
168+
target_link_libraries(test_mode_manager mode)
169+
endif()
170+
171+
ament_add_gtest(test_mode_monitor
172+
test/test_mode_monitor.cpp
173+
src/system_modes/mode_monitor.cpp)
174+
if(TARGET test_mode_monitor)
175+
target_include_directories(test_mode_monitor PUBLIC
176+
${rclcpp_INCLUDE_DIRS}
177+
${CMAKE_CURRENT_BINARY_DIR}/system_modes/
178+
)
179+
target_link_libraries(test_mode_monitor mode)
180+
endif()
181+
150182
# Launch Tests
151183
find_package(launch_testing_ament_cmake REQUIRED)
152184
set(launch_tests
153185
"two_lifecycle_nodes" # Mode Manager with Lifecycle Nodes
154186
"two_mixed_nodes" # Mode Manager with Lifecycle and non-Lifecycle Nodes
155-
"two_independent_hierarchies") # Mode Manager for two independent hierarchies of nodes
187+
"two_independent_hierarchies" # Mode Manager for two independent hierarchies of nodes
188+
"manager_and_monitor") # Mode Manager and Mode Monitor
156189

157190
# Launch Test: Mode Manager with Lifecycle Nodes
158191
foreach(test_name ${launch_tests})

system_modes/src/mode_manager_node.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ using lifecycle_msgs::msg::TransitionEvent;
4747
using rcl_interfaces::msg::ParameterType;
4848
using rcl_interfaces::msg::ParameterEvent;
4949

50-
string modelfile, loglevel;
5150
shared_ptr<ModeManager> manager;
5251

5352
void transition_callback(

system_modes/src/mode_monitor_node.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,6 @@ using lifecycle_msgs::msg::TransitionEvent;
5050
using rcl_interfaces::msg::ParameterType;
5151
using rcl_interfaces::msg::ParameterEvent;
5252

53-
string modelfile, loglevel;
54-
bool debug = false;
55-
unsigned int rate = 1000;
56-
bool verbose = false;
57-
5853
shared_ptr<system_modes::ModeMonitor> monitor;
5954

6055
void transition_callback(

system_modes/src/system_modes/mode_handling.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,19 @@
1414
// limitations under the License.
1515
#include "system_modes/mode_handling.hpp"
1616

17+
#include <shared_mutex>
18+
19+
#include <lifecycle_msgs/msg/state.hpp>
1720
#include <rclcpp/parameter.hpp>
1821
#include <rclcpp/parameter_map.hpp>
19-
#include <lifecycle_msgs/msg/state.hpp>
2022
#include <rcl_yaml_param_parser/parser.h>
2123

2224
#include <map>
25+
#include <memory>
2326
#include <mutex>
2427
#include <string>
25-
#include <vector>
26-
#include <memory>
2728
#include <utility>
28-
#include <shared_mutex>
29+
#include <vector>
2930

3031
using std::endl;
3132
using std::pair;
@@ -135,8 +136,7 @@ ModeHandling::get_rules_for(const std::string & system, const StateAndMode & tar
135136
{
136137
std::vector<ModeRule> rules;
137138
try {
138-
auto rulesmap = this->rules_[system];
139-
for (auto rule : rulesmap) {
139+
for (auto rule : this->rules_[system]) {
140140
if (target == rule.second.system_target) {
141141
rules.push_back(rule.second);
142142
}

system_modes/src/system_modes/mode_impl.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
// limitations under the License.
1515
#include "system_modes/mode_impl.hpp"
1616

17+
#include <lifecycle_msgs/msg/state.hpp>
18+
#include <lifecycle_msgs/msg/transition.hpp>
19+
20+
#include <exception>
1721
#include <map>
1822
#include <string>
19-
#include <vector>
2023
#include <utility>
21-
#include <exception>
22-
23-
#include <lifecycle_msgs/msg/state.hpp>
24-
#include <lifecycle_msgs/msg/transition.hpp>
24+
#include <vector>
2525

2626
using std::map;
2727
using std::pair;

system_modes/src/system_modes/mode_inference.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,19 @@
1414
// limitations under the License.
1515
#include "system_modes/mode_inference.hpp"
1616

17+
#include <shared_mutex>
18+
19+
#include <lifecycle_msgs/msg/state.hpp>
1720
#include <rclcpp/parameter.hpp>
1821
#include <rclcpp/parameter_map.hpp>
19-
#include <lifecycle_msgs/msg/state.hpp>
2022
#include <rcl_yaml_param_parser/parser.h>
2123

2224
#include <map>
25+
#include <memory>
2326
#include <mutex>
2427
#include <string>
25-
#include <vector>
26-
#include <memory>
2728
#include <utility>
28-
#include <shared_mutex>
29+
#include <vector>
2930

3031
using std::endl;
3132
using std::mutex;

system_modes/src/system_modes/mode_monitor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
#include <lifecycle_msgs/srv/change_state.hpp>
2121
#include <lifecycle_msgs/srv/get_state.hpp>
2222

23-
#include <rcl_yaml_param_parser/parser.h>
2423
#include <rclcpp/parameter_map.hpp>
2524
#include <rcl_interfaces/srv/list_parameters.hpp>
25+
#include <rcl_yaml_param_parser/parser.h>
2626

2727
#include <string>
2828
#include <memory>
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import os
2+
3+
import unittest
4+
5+
import ament_index_python
6+
import launch
7+
import launch_ros
8+
import launch_testing.actions
9+
import launch_testing_ros
10+
11+
from launch import LaunchDescription
12+
from launch.actions import ExecuteProcess
13+
14+
15+
def generate_test_description():
16+
os.environ['OSPL_VERBOSITY'] = '8'
17+
os.environ['RCUTILS_CONSOLE_OUTPUT_FORMAT'] = '{message}'
18+
19+
modelfile = '@MODELFILE@'
20+
21+
mode_manager = launch.actions.IncludeLaunchDescription(
22+
launch.launch_description_sources.PythonLaunchDescriptionSource(
23+
ament_index_python.packages.get_package_share_directory(
24+
'system_modes') + '/launch/mode_manager.launch.py'),
25+
launch_arguments={'modelfile': modelfile}.items())
26+
27+
test_nodes = ExecuteProcess(
28+
cmd=[
29+
"@PYTHON_EXECUTABLE@",
30+
"@TEST_NODES@"
31+
],
32+
name='test_nodes',
33+
emulate_tty=True)
34+
35+
mode_monitor = ExecuteProcess(
36+
cmd=[
37+
"ros2",
38+
"run",
39+
"system_modes",
40+
"mode_monitor",
41+
"--ros-args",
42+
"-p",
43+
"modelfile:=" + modelfile,
44+
"-p",
45+
"debug:=True",
46+
"-p",
47+
"verbose:=True",
48+
"-p",
49+
"rate:=200"],
50+
name='mode_monitor',
51+
emulate_tty=True,
52+
output='screen')
53+
54+
launch_description = LaunchDescription()
55+
launch_description.add_action(mode_manager)
56+
launch_description.add_action(mode_monitor)
57+
launch_description.add_action(test_nodes)
58+
launch_description.add_action(launch_testing.actions.ReadyToTest())
59+
60+
return launch_description, locals()
61+
62+
class TestModeManagement(unittest.TestCase):
63+
64+
def test_processes_output(self, proc_output, mode_monitor):
65+
"""Check manager and nodes logging output for expected strings."""
66+
67+
from launch_testing.tools.output import get_default_filtered_prefixes
68+
output_filter = launch_testing_ros.tools.basic_output_filter(
69+
filtered_prefixes=get_default_filtered_prefixes() + ['service not available, waiting...'],
70+
filtered_rmw_implementation='@RMW_IMPLEMENTATION@'
71+
)
72+
proc_output.assertWaitFor(
73+
expected_output=launch_testing.tools.expected_output_from_file(path="@EXPECTED_OUTPUT@"),
74+
process=mode_monitor,
75+
output_filter=output_filter,
76+
timeout=15,
77+
stream='stdout')
78+
79+
import time
80+
time.sleep(1)

0 commit comments

Comments
 (0)