Skip to content

Commit 75e004a

Browse files
authored
Use rmw_test_fixture to isolate ros2cli tests (#1062)
Signed-off-by: Scott K Logan <[email protected]>
1 parent 8a90dbe commit 75e004a

File tree

13 files changed

+82
-70
lines changed

13 files changed

+82
-70
lines changed

ros2action/test/test_cli.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@
2020

2121
from launch import LaunchDescription
2222
from launch.actions import ExecuteProcess
23+
from launch.actions import SetEnvironmentVariable
2324

2425
import launch_testing
2526
import launch_testing.actions
2627
import launch_testing.asserts
2728
import launch_testing.markers
2829
import launch_testing.tools
30+
from launch_testing_ros.actions import EnableRmwIsolation
2931
import launch_testing_ros.tools
3032

3133
import pytest
@@ -51,23 +53,24 @@ def generate_test_description(rmw_implementation):
5153
os.path.dirname(__file__), 'fixtures', 'fibonacci_action_server.py'
5254
)
5355
additional_env = get_rmw_additional_env(rmw_implementation)
56+
set_env_actions = [SetEnvironmentVariable(k, v) for k, v in additional_env.items()]
5457
return LaunchDescription([
5558
# Always restart daemon to isolate tests.
5659
ExecuteProcess(
5760
cmd=['ros2', 'daemon', 'stop'],
5861
name='daemon-stop',
5962
on_exit=[
63+
*set_env_actions,
64+
EnableRmwIsolation(),
6065
ExecuteProcess(
6166
cmd=['ros2', 'daemon', 'start'],
6267
name='daemon-start',
6368
on_exit=[
6469
ExecuteProcess(
6570
cmd=[sys.executable, path_to_action_server_executable],
66-
additional_env=additional_env,
6771
),
6872
launch_testing.actions.ReadyToTest()
6973
],
70-
additional_env=additional_env,
7174
)
7275
]
7376
),
@@ -115,8 +118,9 @@ def setUpClass(
115118
):
116119
@contextlib.contextmanager
117120
def launch_action_command(self, arguments):
118-
additional_env = get_rmw_additional_env(rmw_implementation)
119-
additional_env['PYTHONUNBUFFERED'] = '1'
121+
additional_env = {
122+
'PYTHONUNBUFFERED': '1',
123+
}
120124

121125
action_command_action = ExecuteProcess(
122126
cmd=['ros2', 'action', *arguments],

ros2action/test/test_echo.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@
2121

2222
from launch import LaunchDescription
2323
from launch.actions import ExecuteProcess
24+
from launch.actions import SetEnvironmentVariable
2425

2526
import launch_testing
2627
import launch_testing.actions
2728
import launch_testing.asserts
2829
import launch_testing.markers
2930
import launch_testing.tools
3031

32+
from launch_testing_ros.actions import EnableRmwIsolation
3133
import launch_testing_ros.tools
3234

3335
from osrf_pycommon.terminal_color import remove_ansi_escape_sequences
@@ -221,23 +223,24 @@ def generate_test_description(rmw_implementation):
221223
os.path.dirname(__file__), 'fixtures', 'fibonacci_action_introspection.py'
222224
)
223225
additional_env = get_rmw_additional_env(rmw_implementation)
226+
set_env_actions = [SetEnvironmentVariable(k, v) for k, v in additional_env.items()]
224227
return LaunchDescription([
225228
# Always restart daemon to isolate tests.
226229
ExecuteProcess(
227230
cmd=['ros2', 'daemon', 'stop'],
228231
name='daemon-stop',
229232
on_exit=[
233+
*set_env_actions,
234+
EnableRmwIsolation(),
230235
ExecuteProcess(
231236
cmd=['ros2', 'daemon', 'start'],
232237
name='daemon-start',
233238
on_exit=[
234239
ExecuteProcess(
235240
cmd=[sys.executable, path_to_action_server_executable],
236-
additional_env=additional_env
237241
),
238242
launch_testing.actions.ReadyToTest()
239243
],
240-
additional_env=additional_env
241244
)
242245
]
243246
),
@@ -256,8 +259,9 @@ def setUpClass(
256259
):
257260
@contextlib.contextmanager
258261
def launch_action_command(self, arguments):
259-
additional_env = get_rmw_additional_env(rmw_implementation)
260-
additional_env['PYTHONUNBUFFERED'] = '1'
262+
additional_env = {
263+
'PYTHONUNBUFFERED': '1',
264+
}
261265
action_command_action = ExecuteProcess(
262266
cmd=['ros2', 'action', *arguments],
263267
name='ros2action-cli', output='screen',

ros2cli/ros2cli/helpers.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,6 @@ def get_rmw_additional_env(rmw_implementation: str) -> Dict[str, str]:
127127
if rmw_implementation == 'rmw_zenoh_cpp':
128128
return {
129129
'RMW_IMPLEMENTATION': rmw_implementation,
130-
'ZENOH_ROUTER_CHECK_ATTEMPTS': '-1',
131-
'ZENOH_CONFIG_OVERRIDE': 'scouting/multicast/enabled=true',
132130
'RUST_LOG': 'z=error'
133131
}
134132
else:

ros2doctor/test/test_qos_compatibility.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
from launch import LaunchDescription
2121
from launch.actions import ExecuteProcess
22+
from launch.actions import SetEnvironmentVariable
2223

2324
from launch_ros.actions import Node
2425

@@ -27,6 +28,7 @@
2728
import launch_testing.asserts
2829
import launch_testing.markers
2930
import launch_testing.tools
31+
from launch_testing_ros.actions import EnableRmwIsolation
3032
import launch_testing_ros.tools
3133

3234
import pytest
@@ -49,6 +51,7 @@ def generate_test_description(rmw_implementation):
4951
path_to_fixtures = os.path.join(os.path.dirname(__file__), 'fixtures')
5052
additional_env = get_rmw_additional_env(rmw_implementation)
5153
additional_env['PYTHONUNBUFFERED'] = '1'
54+
set_env_actions = [SetEnvironmentVariable(k, v) for k, v in additional_env.items()]
5255

5356
path_to_incompatible_talker_node_script = os.path.join(
5457
path_to_fixtures, 'talker_node_with_best_effort_qos.py')
@@ -62,25 +65,21 @@ def generate_test_description(rmw_implementation):
6265
executable=sys.executable,
6366
arguments=[path_to_compatible_talker_node_script],
6467
remappings=[('chatter', 'compatible_chatter')],
65-
additional_env=additional_env
6668
)
6769
listener_node_compatible = Node(
6870
executable=sys.executable,
6971
arguments=[path_to_listener_node_script],
7072
remappings=[('chatter', 'compatible_chatter')],
71-
additional_env=additional_env
7273
)
7374
talker_node_incompatible = Node(
7475
executable=sys.executable,
7576
arguments=[path_to_incompatible_talker_node_script],
7677
remappings=[('chatter', 'incompatible_chatter')],
77-
additional_env=additional_env
7878
)
7979
listener_node_incompatible = Node(
8080
executable=sys.executable,
8181
arguments=[path_to_listener_node_script],
8282
remappings=[('chatter', 'incompatible_chatter')],
83-
additional_env=additional_env
8483
)
8584

8685
return LaunchDescription([
@@ -89,6 +88,8 @@ def generate_test_description(rmw_implementation):
8988
cmd=['ros2', 'daemon', 'stop'],
9089
name='daemon-stop',
9190
on_exit=[
91+
*set_env_actions,
92+
EnableRmwIsolation(),
9293
ExecuteProcess(
9394
cmd=['ros2', 'daemon', 'start'],
9495
name='daemon-start',
@@ -100,7 +101,6 @@ def generate_test_description(rmw_implementation):
100101
listener_node_compatible,
101102
launch_testing.actions.ReadyToTest()
102103
],
103-
additional_env=additional_env
104104
)
105105
]
106106
),
@@ -128,11 +128,8 @@ def setUpClass(
128128

129129
@contextlib.contextmanager
130130
def launch_doctor_command(self, arguments):
131-
additional_env = get_rmw_additional_env(rmw_implementation)
132-
additional_env['PYTHONUNBUFFERED'] = '1'
133131
doctor_command_action = ExecuteProcess(
134132
cmd=['ros2', 'doctor', *arguments],
135-
additional_env=additional_env,
136133
name='ros2doctor-cli',
137134
output='screen'
138135
)

ros2lifecycle/test/test_cli.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@
1818

1919
from launch import LaunchDescription
2020
from launch.actions import ExecuteProcess
21+
from launch.actions import SetEnvironmentVariable
2122
from launch_ros.actions import Node
2223

2324
import launch_testing
2425
import launch_testing.actions
2526
import launch_testing.asserts
2627
import launch_testing.markers
2728
import launch_testing.tools
29+
from launch_testing_ros.actions import EnableRmwIsolation
2830
import launch_testing_ros.tools
2931

3032
import pytest
@@ -124,12 +126,15 @@
124126
@launch_testing.parametrize('rmw_implementation', get_available_rmw_implementations())
125127
def generate_test_description(rmw_implementation):
126128
additional_env = get_rmw_additional_env(rmw_implementation)
129+
set_env_actions = [SetEnvironmentVariable(k, v) for k, v in additional_env.items()]
127130
return LaunchDescription([
128131
# Always restart daemon to isolate tests.
129132
ExecuteProcess(
130133
cmd=['ros2', 'daemon', 'stop'],
131134
name='daemon-stop',
132135
on_exit=[
136+
*set_env_actions,
137+
EnableRmwIsolation(),
133138
ExecuteProcess(
134139
cmd=['ros2', 'daemon', 'start'],
135140
name='daemon-start',
@@ -140,18 +145,15 @@ def generate_test_description(rmw_implementation):
140145
executable='simple_lifecycle_node',
141146
name='test_lifecycle_node',
142147
output='screen',
143-
additional_env=additional_env
144148
),
145149
Node(
146150
package='ros2lifecycle_test_fixtures',
147151
executable='simple_lifecycle_node',
148152
name='_hidden_test_lifecycle_node',
149153
output='screen',
150-
additional_env=additional_env
151154
),
152155
launch_testing.actions.ReadyToTest()
153156
],
154-
additional_env=additional_env
155157
)
156158
]
157159
),
@@ -170,8 +172,9 @@ def setUpClass(
170172
):
171173
@contextlib.contextmanager
172174
def launch_lifecycle_command(self, arguments):
173-
additional_env = get_rmw_additional_env(rmw_implementation)
174-
additional_env['PYTHONUNBUFFERED'] = '1'
175+
additional_env = {
176+
'PYTHONUNBUFFERED': '1',
177+
}
175178
lifecycle_command_action = ExecuteProcess(
176179
cmd=['ros2', 'lifecycle', *arguments],
177180
additional_env=additional_env,

ros2node/test/test_cli.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
from launch import LaunchDescription
2323
from launch.actions import ExecuteProcess
24+
from launch.actions import SetEnvironmentVariable
2425

2526
from launch_ros.actions import Node
2627

@@ -29,6 +30,7 @@
2930
import launch_testing.asserts
3031
import launch_testing.markers
3132
import launch_testing.tools
33+
from launch_testing_ros.actions import EnableRmwIsolation
3234
import launch_testing_ros.tools
3335

3436
import pytest
@@ -52,12 +54,15 @@ def generate_test_description(rmw_implementation):
5254
os.path.dirname(__file__), 'fixtures', 'complex_node.py'
5355
)
5456
additional_env = get_rmw_additional_env(rmw_implementation)
57+
set_env_actions = [SetEnvironmentVariable(k, v) for k, v in additional_env.items()]
5558
return LaunchDescription([
5659
# Always restart daemon to isolate tests.
5760
ExecuteProcess(
5861
cmd=['ros2', 'daemon', 'stop'],
5962
name='daemon-stop',
6063
on_exit=[
64+
*set_env_actions,
65+
EnableRmwIsolation(),
6166
ExecuteProcess(
6267
cmd=['ros2', 'daemon', 'start'],
6368
name='daemon-start',
@@ -67,17 +72,14 @@ def generate_test_description(rmw_implementation):
6772
executable=sys.executable,
6873
arguments=[path_to_complex_node_script],
6974
name='complex_node',
70-
additional_env=additional_env
7175
),
7276
Node(
7377
executable=sys.executable,
7478
arguments=[path_to_complex_node_script],
7579
name='_hidden_complex_node',
76-
additional_env=additional_env
7780
),
7881
launch_testing.actions.ReadyToTest()
7982
],
80-
additional_env=additional_env
8183
)
8284
]
8385
),
@@ -96,8 +98,9 @@ def setUpClass(
9698
):
9799
@contextlib.contextmanager
98100
def launch_node_command(self, arguments):
99-
additional_env = get_rmw_additional_env(rmw_implementation)
100-
additional_env['PYTHONUNBUFFERED'] = '1'
101+
additional_env = {
102+
'PYTHONUNBUFFERED': '1',
103+
}
101104

102105
node_command_action = ExecuteProcess(
103106
cmd=['ros2', 'node', *arguments],

ros2node/test/test_cli_duplicate_node_names.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
from launch import LaunchDescription
2121
from launch.actions import ExecuteProcess
22+
from launch.actions import SetEnvironmentVariable
2223

2324
from launch_ros.actions import Node
2425

@@ -27,6 +28,7 @@
2728
import launch_testing.asserts
2829
import launch_testing.markers
2930
import launch_testing.tools
31+
from launch_testing_ros.actions import EnableRmwIsolation
3032
import launch_testing_ros.tools
3133

3234
import pytest
@@ -51,12 +53,15 @@ def generate_test_description(rmw_implementation):
5153
os.path.dirname(__file__), 'fixtures', 'complex_node.py'
5254
)
5355
additional_env = get_rmw_additional_env(rmw_implementation)
56+
set_env_actions = [SetEnvironmentVariable(k, v) for k, v in additional_env.items()]
5457
return LaunchDescription([
5558
# Always restart daemon to isolate tests.
5659
ExecuteProcess(
5760
cmd=['ros2', 'daemon', 'stop'],
5861
name='daemon-stop',
5962
on_exit=[
63+
*set_env_actions,
64+
EnableRmwIsolation(),
6065
ExecuteProcess(
6166
cmd=['ros2', 'daemon', 'start'],
6267
name='daemon-start',
@@ -66,23 +71,19 @@ def generate_test_description(rmw_implementation):
6671
executable=sys.executable,
6772
arguments=[path_to_complex_node_script],
6873
name='complex_node',
69-
additional_env=additional_env,
7074
),
7175
Node(
7276
executable=sys.executable,
7377
arguments=[path_to_complex_node_script],
7478
name='complex_node',
75-
additional_env=additional_env,
7679
),
7780
Node(
7881
executable=sys.executable,
7982
arguments=[path_to_complex_node_script],
8083
name='complex_node_2',
81-
additional_env=additional_env,
8284
),
8385
launch_testing.actions.ReadyToTest(),
8486
],
85-
additional_env=additional_env
8687
)
8788
]
8889
),
@@ -101,8 +102,9 @@ def setUpClass(
101102
):
102103
@contextlib.contextmanager
103104
def launch_node_command(self, arguments):
104-
additional_env = get_rmw_additional_env(rmw_implementation)
105-
additional_env['PYTHONUNBUFFERED'] = '1'
105+
additional_env = {
106+
'PYTHONUNBUFFERED': '1',
107+
}
106108
node_command_action = ExecuteProcess(
107109
cmd=['ros2', 'node', *arguments],
108110
additional_env=additional_env,

0 commit comments

Comments
 (0)