8000 add rmw zenoh support to rmw plugin (#315) · osrf/rocker@5c6e8e7 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5c6e8e7

Browse files
authored
add rmw zenoh support to rmw plugin (#315)
* add rmw zenoh support to rmw plugin Fixes #307 * Update to validate detecting multiple packages Also parameterize tests automatically * Move the expensive apt-get update after the installed test And only clean up once so repeated calls will hit the cache.
1 parent 149d4ef commit 5c6e8e7

File tree

3 files changed

+24
-14
lines changed

3 files changed

+24
-14
lines changed

src/rocker/rmw_extension.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ class RMW(RockerExtension):
2525
rmw_map = {
2626
'cyclonedds': ['ros-${ROS_DISTRO}-rmw-cyclonedds-cpp'],
2727
'fastrtps' : ['ros-${ROS_DISTRO}-rmw-fastrtps-cpp'],
28+
'zenoh' : ['ros-${ROS_DISTRO}-rmw-zenoh-cpp', 'ros-${ROS_DISTRO}-zenoh-vendor'],
29+
# Second dependency not 100% necessary but validates dual package detection in tests.
2830
# TODO(tfoote) Enable connext with license acceptance method
2931
# 'connextdds': ['ros-${ROS_DISTRO}-rmw-connextdds'],
3032
}
Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
# workspace development helpers
22

3-
3+
# TODO(tfoote) This could be optimized to skip repeated apt updates.
44
@[ if rmw ]@
55
RUN \
66
if [ -z "${ROS_DISTRO}" ]; then echo "ROS_DISTRO is unset cannot override RMW" ; exit 1 ; fi ;\
7-
if dpkg -l @(' '.join(packages)) > /dev/null 2>&1; then \
8-
apt-get update \
9-
&& DEBIAN_FRONTENT=non-interactive apt-get install -qy --no-install-recommends\
10-
@(' '.join(packages)) \
11-
&& apt-get clean ;\
7+
@[for package in packages]@
8+
if ! dpkg -l @(packages) | grep -q ^ii ; then \
9+
apt-get update && \
10+
DEBIAN_FRONTENT=non-interactive apt-get install -qy --no-install-recommends\
11+
@(package) ;\
1212
else \
13-
echo "Found rmw packages @(' '.join(packages)) no need to install" ; \
14-
fi
13+
echo "Found rmw package @(package) no need to install" ; \
14+
fi ; \
15+
@[end for]@
16+
apt-get clean ;\
17+
echo "Done detecting packages for rmw"
1518
@[ end if ]@
1619

test/test_rmw_extension.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
from test_extension import plugin_load_parser_correctly
2828

29+
from rocker.rmw_extension import RMW
2930

3031

3132
class rmwExtensionTest(unittest.TestCase):
@@ -84,12 +85,16 @@ def test_rmw_extension(self):
8485
plugins = list_plugins()
8586
rmw_plugin = plugins['rmw']
8687

88+
rmws_to_test = RMW.rmw_map.keys()
89+
8790
p = rmw_plugin()
8891
self.assertTrue(plugin_load_parser_correctly(rmw_plugin))
8992

90-
mock_cliargs = {'rmw': ['cyclonedds']}
91-
dig = DockerImageGenerator([rmw_plugin()], mock_cliargs, 'ros:rolling')
92-
self.assertEqual(dig.build(), 0)
93-
self.assertEqual(dig.run(command='dpkg -l ros-rolling-rmw-cyclonedds-cpp'), 0)
94-
self.assertIn('-e RMW_IMPLEMENTATION=rmw_cyclonedds_cpp', dig.generate_docker_cmd('', mode='dry-run'))
95-
dig.clear_image()
93+
94+
for rmw_name in rmws_to_test:
95+
mock_cliargs = {'rmw': [rmw_name]}
96+
dig = DockerImageGenerator([rmw_plugin()], mock_cliargs, 'ros:rolling')
97+
self.assertEqual(dig.build(), 0, msg=f'dig.build for rmw {rmw_name} failed')
98+
self.assertEqual(dig.run(command=f'dpkg -l ros-rolling-rmw-{rmw_name}-cpp'), 0)
99+
self.assertIn(f'-e RMW_IMPLEMENTATION=rmw_{rmw_name}_cpp', dig.generate_docker_cmd('', mode='dry-run'))
100+
dig.clear_image()

0 commit comments

Comments
 (0)
0