Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for launching nodes not in a package #82

Merged
merged 2 commits into from
Oct 7, 2019

Conversation

hidmic
Copy link
Contributor

@hidmic hidmic commented Oct 4, 2019

Precisely what the title says. Requiring nodes to be installed for launch_ros.actions.Node to be able to launch them is an unnecessary restriction. This way, packages with launch tests can have fixture node executables that do not get installed anywhere.

Follow-up PR after #80. Useful in upcoming PRs.

By making the package argument in launch_ros.actions.Node action optional.

Signed-off-by: Michel Hidalgo <michel@ekumenlabs.com>
Signed-off-by: Michel Hidalgo <michel@ekumenlabs.com>
@hidmic hidmic changed the title Add support for launching nodes not installed by a package. Add support for launching nodes not in a package Oct 4, 2019
@hidmic
Copy link
Contributor Author

hidmic commented Oct 4, 2019

CI up to launch_testing_ros:

  • Linux Build Status
  • Linux-aarch64 Build Status
  • macOS Build Status
  • Windows Build Status

Copy link
Member

@ivanpauno ivanpauno left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!
I left a couple of minimal comments.

(I thought a time ago about doing the same thing).

@hidmic
Copy link
Contributor Author

hidmic commented Oct 7, 2019

Going in! Thanks for the reviews!

@hidmic hidmic merged commit e64cf54 into master Oct 7, 2019
@delete-merged-branch delete-merged-branch bot deleted the hidmic/launch-not-packaged-nodes branch October 7, 2019 13:43
@wjwwood
Copy link
Member

wjwwood commented Oct 8, 2019

Is it possible this broken something? It's the only thing that's changed since yesterday when two new failures showed up on nightly/today's CI:

https://ci.ros2.org/view/nightly/job/nightly_linux_release/1323/testReport/test_launch_ros.test.test_launch_ros.frontend/test_node_frontend/test_node_frontend__n_launch__n_____let_name__a_string__value______2__5__8________n_____let_name__a_list__value___2__5__8_____n_____node_pkg__demo_nodes_py__exec__talker_qos__output__screen__name__my_node__namespace__my_ns__args____number_of_cycles_1___n_________param_name__param1__value__ads____n_________param_name__param_group1___n_____________param_name__param_group2___n_________________param_name__param2__value__2____n______________param__n_____________param_name__param3__value__2__5__8__value_sep________n_____________param_name__param4__value__$_var_a_list_____n_____________param_name__param5__value__$_var_a_string_____n_____________param_name__param6__value__2___5___8___value_sep________n_____________param_name__param7__value___2____5____8___value_sep________n_____________param_name__param8__value____2______5______8____value_sep________n_____________param_name__param9__value_____2________5________8_____value_sep________n_____________param_name__param10__value____asd______bsd______csd____value_sep________n_____________param_name__param11__value_____asd______bsd______csd___value_sep________n_____________param_name__param12__value______n__________param__n_________param_from___home_jenkins_agent_workspace_nightly_linux_release_ws_src_ros2_launch_ros_test_launch_ros_test_test_launch_ros_frontend_params_yaml____n_________env_name__var__value__1____n______node__n__launch__n_/

https://ci.ros2.org/view/nightly/job/nightly_linux_release/1323/testReport/test_launch_ros.test.test_launch_ros.frontend/test_node_frontend/test_node_frontend__n_launch__n_____let_name__a_string__value______2__5__8________n_____let_name__a_list__value___2__5__8_____n_____node_pkg__demo_nodes_py__exec__talker_qos__output__screen__name__my_node__namespace__my_ns__args____number_of_cycles_1___n_________param_name__param1__value__ads____n_________param_name__param_group1___n_____________param_name__param_group2___n_________________param_name__param2__value__2____n______________param__n_____________param_name__param3__value__2__5__8__value_sep________n_____________param_name__param4__value__$_var_a_list_____n_____________param_name__param5__value__$_var_a_string_____n_____________param_name__param6__value__2___5___8___value_sep________n_____________param_name__param7__value___2____5____8___value_sep________n_____________param_name__param8__value____2______5______8____value_sep________n_____________param_name__param9__value_____2________5________8_____value_sep________n_____________param_name__param10__value____asd______bsd______csd____value_sep________n_____________param_name__param11__value_____asd______bsd______csd___value_sep________n_____________param_name__param12__value______n__________param__n_________param_from___home_jenkins_agent_workspace_nightly_linux_release_ws_src_ros2_launch_ros_test_launch_ros_test_test_launch_ros_frontend_params_yaml____n_________env_name__var__value__1____n______node__n__launch__n_/

Starting >>> test_launch_ros
03:23:02 running pytest
03:23:02 running egg_info
03:23:02 writing /home/jenkins-agent/workspace/nightly_linux_release/ws/build/test_launch_ros/test_launch_ros.egg-info/PKG-INFO
03:23:02 writing dependency_links to /home/jenkins-agent/workspace/nightly_linux_release/ws/build/test_launch_ros/test_launch_ros.egg-info/dependency_links.txt
03:23:02 writing requirements to /home/jenkins-agent/workspace/nightly_linux_release/ws/build/test_launch_ros/test_launch_ros.egg-info/requires.txt
03:23:02 writing top-level names to /home/jenkins-agent/workspace/nightly_linux_release/ws/build/test_launch_ros/test_launch_ros.egg-info/top_level.txt
03:23:02 reading manifest file '/home/jenkins-agent/workspace/nightly_linux_release/ws/build/test_launch_ros/test_launch_ros.egg-info/SOURCES.txt'
03:23:02 writing manifest file '/home/jenkins-agent/workspace/nightly_linux_release/ws/build/test_launch_ros/test_launch_ros.egg-info/SOURCES.txt'
03:23:02 running build_ext
03:23:02 ============================= test session starts ==============================
03:23:02 platform linux -- Python 3.6.8, pytest-5.2.1, py-1.8.0, pluggy-0.13.0
03:23:02 cachedir: /home/jenkins-agent/workspace/nightly_linux_release/ws/build/test_launch_ros/.pytest_cache
03:23:02 rootdir: /home/jenkins-agent/workspace/nightly_linux_release/ws/src/ros2/launch_ros/test_launch_ros
03:23:02 plugins: ament-copyright-0.8.0, ament-pep257-0.8.0, ament-flake8-0.8.0, ament-lint-0.8.0, mock-1.11.1, repeat-0.8.0, rerunfailures-7.0, cov-2.8.1
03:23:03 collecting ... 
03:23:03 collected 50 items                                                             
03:23:03 
03:23:03 test/test_copyright.py .                                                 [  2%]
03:23:03 test/test_flake8.py .                                                    [  4%]
03:23:03 test/test_pep257.py .                                                    [  6%]
03:23:03 test/test_launch_ros/test_normalize_parameters.py .....................  [ 48%]
03:23:03 test/test_launch_ros/test_normalize_remap_rule.py .....                  [ 58%]
03:23:05 test/test_launch_ros/actions/test_node.py .........                      [ 76%]
03:23:05 test/test_launch_ros/actions/test_push_ros_namespace.py ........         [ 92%]
03:23:05 test/test_launch_ros/frontend/test_node_frontend.py RRRRRRRRRRFRRRRRRRRR [ 96%]
03:23:05 RF                                                                       [ 96%]
03:23:05 test/test_launch_ros/substitutions/test_find_package.py ..               [100%]
03:23:05 
03:23:05 =================================== FAILURES ===================================
03:23:05 _ test_node_frontend[\n<launch>\n    <let name="a_string" value="\\'[2, 5, 8]\\'"/>\n    <let name="a_list" value="[2, 5, 8]"/>\n    <node pkg="demo_nodes_py" exec="talker_qos" output="screen" name="my_node" namespace="my_ns" args="--number_of_cycles 1">\n        <param name="param1" value="ads"/>\n        <param name="param_group1">\n            <param name="param_group2">\n                <param name="param2" value="2"/>\n            </param>\n            <param name="param3" value="2, 5, 8" value-sep=", "/>\n            <param name="param4" value="$(var a_list)"/>\n            <param name="param5" value="$(var a_string)"/>\n            <param name="param6" value="2., 5., 8." value-sep=", "/>\n            <param name="param7" value="'2', '5', '8'" value-sep=", "/>\n            <param name="param8" value="''2'', ''5'', ''8''" value-sep=", "/>\n            <param name="param9" value="\\'2\\', \\'5\\', \\'8\\'" value-sep=", "/>\n            <param name="param10" value="''asd'', ''bsd'', ''csd''" value-sep=", "/>\n            <param name="param11" value="'\\asd', '\\bsd', '\\csd'" value-sep=", "/>\n            <param name="param12" value=""/>\n        </param>\n        <param from="/home/jenkins-agent/workspace/nightly_linux_release/ws/src/ros2/launch_ros/test_launch_ros/test/test_launch_ros/frontend/params.yaml"/>\n        <env name="var" value="1"/>\n    </node>\n</launch>\n] _
03:23:05 test/test_launch_ros/frontend/test_node_frontend.py:114: in test_node_frontend
03:23:05     ld = parser.parse_description(root_entity)
03:23:05 ../../../../install/launch/lib/python3.6/site-packages/launch/frontend/parser.py:102: in parse_description
03:23:05     actions = [self.parse_action(child) for child in entity.children]
03:23:05 ../../../../install/launch/lib/python3.6/site-packages/launch/frontend/parser.py:102: in <listcomp>
03:23:05     actions = [self.parse_action(child) for child in entity.children]
03:23:05 ../../../../install/launch/lib/python3.6/site-packages/launch/frontend/parser.py:85: in parse_action
03:23:05     return instantiate_action(entity, self)
03:23:05 ../../../../install/launch/lib/python3.6/site-packages/launch/frontend/expose.py:38: in instantiate_action
03:23:05     action_type, kwargs = action_parse_methods[entity.type_name](entity, parser)
03:23:05 ../../../../install/launch_ros/lib/python3.6/site-packages/launch_ros/actions/node.py:242: in parse
03:23:05     package = parser.parse_substitution(entity.get_attr('pkg'), optional=True)
03:23:05 E   TypeError: parse_substitution() got an unexpected keyword argument 'optional'
03:23:05 _ test_node_frontend[\nlaunch:\n    - let:\n        name: 'a_string'\n        value: "'[2, 5, 8]'"\n    - let:\n        name: 'a_list'\n        value: '[2, 5, 8]'\n    - node:\n        pkg: demo_nodes_py\n        exec: talker_qos\n        output: screen\n        name: my_node\n        namespace: my_ns\n        args: '--number_of_cycles 1'\n        param:\n            -   name: param1\n                value: ads\n            -   name: param_group1\n                param:\n                -   name: param_group2\n                    param:\n                    -   name: param2\n                        value: 2\n                -   name: param3\n                    value: [2, 5, 8]\n                -   name: param4\n                    value: $(var a_list)\n                -   name: param5\n                    value: $(var a_string)\n                -   name: param6\n                    value: [2., 5., 8.]\n                -   name: param7\n                    value: ['2', '5', '8']\n                -   name: param8\n                    value: ["'2'", "'5'", "'8'"]\n                -   name: param9\n                    value: ["\\\\'2\\\\'", "\\\\'5\\\\'", "\\\\'8\\\\'"]\n                -   name: param10\n                    value: ["'asd'", "'bsd'", "'csd'"]\n                -   name: param11\n                    value: ['\\asd', '\\bsd', '\\csd']\n                -   name: param12\n                    value: ''\n            -   from: /home/jenkins-agent/workspace/nightly_linux_release/ws/src/ros2/launch_ros/test_launch_ros/test/test_launch_ros/frontend/params.yaml\n        env:\n            -   name: var\n                value: '1'\n] _
03:23:05 test/test_launch_ros/frontend/test_node_frontend.py:114: in test_node_frontend
03:23:05     ld = parser.parse_description(root_entity)
03:23:05 ../../../../install/launch/lib/python3.6/site-packages/launch/frontend/parser.py:102: in parse_description
03:23:05     actions = [self.parse_action(child) for child in entity.children]
03:23:05 ../../../../install/launch/lib/python3.6/site-packages/launch/frontend/parser.py:102: in <listcomp>
03:23:05     actions = [self.parse_action(child) for child in entity.children]
03:23:05 ../../../../install/launch/lib/python3.6/site-packages/launch/frontend/parser.py:85: in parse_action
03:23:05     return instantiate_action(entity, self)
03:23:05 ../../../../install/launch/lib/python3.6/site-packages/launch/frontend/expose.py:38: in instantiate_action
03:23:05     action_type, kwargs = action_parse_methods[entity.type_name](entity, parser)
03:23:05 ../../../../install/launch_ros/lib/python3.6/site-packages/launch_ros/actions/node.py:242: in parse
03:23:05     package = parser.parse_substitution(entity.get_attr('pkg'), optional=True)
03:23:05 E   TypeError: parse_substitution() got an unexpected keyword argument 'optional'
03:23:05 =============================== warnings summary ===============================
03:23:05 test/test_launch_ros/actions/test_node.py::TestNode::test_launch_node_with_parameter_dict
03:23:05   /home/jenkins-agent/workspace/nightly_linux_release/ws/src/ros2/launch_ros/test_launch_ros/test/test_launch_ros/actions/test_node.py:164: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
03:23:05     expanded_parameters_dict = yaml.load(h)
03:23:05 
03:23:05 -- Docs: https://docs.pytest.org/en/latest/warnings.html
03:23:05 - generated xml file: /home/jenkins-agent/workspace/nightly_linux_release/ws/build/test_launch_ros/pytest.xml -
03:23:05 ============== 2 failed, 48 passed, 1 warnings, 20 rerun in 2.85s ==============
03:23:05 Finished <<< test_launch_ros [3.97s]	[ with test failures ]

@@ -235,7 +239,9 @@ def parse(cls, entity: Entity, parser: Parser):
node_name = entity.get_attr('node-name', optional=True)
if node_name is not None:
kwargs['node_name'] = node_name
kwargs['package'] = parser.parse_substitution(entity.get_attr('pkg'))
package = parser.parse_substitution(entity.get_attr('pkg'), optional=True)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the line where nightly/CI is failing.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that's wrong. I'll fix it and check why it didn't fail before.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool thanks, I've got it as part of this issue, so if you fix it could you comment there too? ros2/build_farmer#244

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants