1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00
community.general/tests/integration/targets/cmd_runner/vars/main.yml

263 lines
6.2 KiB
YAML
Raw Normal View History

Command Runner (#4476) * initial commit, passing unit tests * passing one very silly integration test * multiple changes: - updated copyright year - cmd_runner - added fmt_optval - created specific exceptions - fixed bug in context class where values from module params were not being used for resolving cmd arguments - changed order of class declaration for readability purpose - tests - minor improvements in integration test code - removed some extraneous code in msimple.yml - minor improvements in unit tests - added few missing cases to unit test * multiple changes cmd_runner.py - renamed InvalidParameterName to MissingArgumentFormat - improved exception parameters - added repr and str to all exceptions - added unpacking decorator for fmt functions - CmdRunner - improved parameter validation - _CmdRunnerContext - Context runs must now pass named arguments - Simplified passing of additional arguments to module.run_command() - Provided multiple context variables with info about the run Integration tests - rename msimple.py to cmd_echo.py for clarity - added more test cases * cmd_runner: env update can be passed to runner * adding runner context info to output * added comment on OrderedDict * wrong variable * refactored all fmt functions into static methods of a class Imports should be simpler now, only one object fmt, with attr access to all callables * added unit tests for CmdRunner * fixed sanity checks * fixed mock imports * added more unit tests for CmdRunner * terminology consistency * multiple adjustments: - remove extraneous imports - renamed some variables - added wrapper around arg formatters to handle individual arg ignore_none behaviour * removed old code commented out in test * multiple changes: - ensure fmt functions return list of strings - renamed fmt parameter from `option` to `args` - renamed fmt.mapped to fmt.as_map - simplified fmt.as_map - added tests for fmt.as_fixed * more improvements in formats * fixed sanity * args_order can be a string (to be split()) and improved integration test * simplified integration test * removed overkill str() on values - run_command does that for us * as_list makes more sense than as_str in that context * added changelog fragment * Update plugins/module_utils/cmd_runner.py Co-authored-by: Felix Fontein <felix@fontein.de> * adjusted __repr__ output for the exceptions * added superclass object to classes * added additional comment on the testcase sample/example * suggestion from PR Co-authored-by: Felix Fontein <felix@fontein.de>
2022-04-25 22:12:00 +02:00
# -*- coding: utf-8 -*-
# Copyright (c) 2022, Alexei Znamensky
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later
Command Runner (#4476) * initial commit, passing unit tests * passing one very silly integration test * multiple changes: - updated copyright year - cmd_runner - added fmt_optval - created specific exceptions - fixed bug in context class where values from module params were not being used for resolving cmd arguments - changed order of class declaration for readability purpose - tests - minor improvements in integration test code - removed some extraneous code in msimple.yml - minor improvements in unit tests - added few missing cases to unit test * multiple changes cmd_runner.py - renamed InvalidParameterName to MissingArgumentFormat - improved exception parameters - added repr and str to all exceptions - added unpacking decorator for fmt functions - CmdRunner - improved parameter validation - _CmdRunnerContext - Context runs must now pass named arguments - Simplified passing of additional arguments to module.run_command() - Provided multiple context variables with info about the run Integration tests - rename msimple.py to cmd_echo.py for clarity - added more test cases * cmd_runner: env update can be passed to runner * adding runner context info to output * added comment on OrderedDict * wrong variable * refactored all fmt functions into static methods of a class Imports should be simpler now, only one object fmt, with attr access to all callables * added unit tests for CmdRunner * fixed sanity checks * fixed mock imports * added more unit tests for CmdRunner * terminology consistency * multiple adjustments: - remove extraneous imports - renamed some variables - added wrapper around arg formatters to handle individual arg ignore_none behaviour * removed old code commented out in test * multiple changes: - ensure fmt functions return list of strings - renamed fmt parameter from `option` to `args` - renamed fmt.mapped to fmt.as_map - simplified fmt.as_map - added tests for fmt.as_fixed * more improvements in formats * fixed sanity * args_order can be a string (to be split()) and improved integration test * simplified integration test * removed overkill str() on values - run_command does that for us * as_list makes more sense than as_str in that context * added changelog fragment * Update plugins/module_utils/cmd_runner.py Co-authored-by: Felix Fontein <felix@fontein.de> * adjusted __repr__ output for the exceptions * added superclass object to classes * added additional comment on the testcase sample/example * suggestion from PR Co-authored-by: Felix Fontein <felix@fontein.de>
2022-04-25 22:12:00 +02:00
cmd_echo_tests:
- name: set aa and bb value
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
bb:
func: as_bool
args: [--bb-here]
arg_order: 'aa bb'
arg_values:
bb: true
aa: 11
assertions:
- test_result.rc == 0
- test_result.out == "-- --answer=11 --bb-here\n"
- test_result.err == ""
- name: default aa value
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
bb:
func: as_bool
args: [--bb-here]
arg_order: ['aa', 'bb']
arg_values:
aa: 43
bb: true
assertions:
- test_result.rc == 0
- test_result.out == "-- --answer=43 --bb-here\n"
- test_result.err == ""
- name: implicit aa format
arg_formats:
bb:
func: as_bool
args: [--bb-here]
arg_order: ['aa', 'bb']
arg_values:
bb: true
aa: 1984
assertions:
- test_result.rc == 0
- test_result.out == "-- --aa 1984 --bb-here\n"
- test_result.err == ""
- name: missing bb format
arg_order: ['aa', 'bb']
arg_values:
bb: true
aa: 1984
expect_error: true
assertions:
- test_result is failed
- test_result.rc == 1
- '"out" not in test_result'
- '"err" not in test_result'
- >-
"MissingArgumentFormat: Cannot find format for parameter bb"
in test_result.module_stderr
- name: missing bb value
arg_formats:
bb:
func: as_bool
args: [--bb-here]
arg_order: 'aa bb'
aa: 1984
expect_error: true
assertions:
- test_result is failed
- test_result.rc == 1
- '"out" not in test_result'
- '"err" not in test_result'
- >-
"MissingArgumentValue: Cannot find value for parameter bb"
in test_result.module_stderr
- name: set aa and bb value with check_mode on
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
bb:
func: as_bool
args: [--bb-here]
arg_order: 'aa bb'
arg_values:
bb: true
aa: 11
check_mode: true
assertions:
- test_result.rc == 0
- test_result.out == "-- --answer=11 --bb-here\n"
- test_result.err == ""
- name: set aa and bb value with check_mode and check_mode_skip on
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
bb:
func: as_bool
args: [--bb-here]
arg_order: 'aa bb'
arg_values:
bb: true
check_mode_skip: true
aa: 11
check_mode: true
expect_error: true # because if result contains rc != 0, ansible assumes error
assertions:
- test_result.rc == None
- test_result.out == None
- test_result.err == None
- name: set aa and tt value
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
tt:
func: as_opt_val
args: [--tt-arg]
arg_order: 'aa tt'
arg_values:
tt: potatoes
aa: 11
assertions:
- test_result.rc == 0
- test_result.out == "-- --answer=11 --tt-arg potatoes\n"
- test_result.err == ""
- name: use cmd echo
cmd: echo
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
tt:
func: as_opt_val
args: [--tt-arg]
arg_order: 'aa tt'
arg_values:
tt: potatoes
aa: 11
assertions:
- test_result.rc == 0
- test_result.out == "-- --answer=11 --tt-arg potatoes\n"
- test_result.err == ""
- name: use cmd /bin/echo
cmd: /bin/echo
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
tt:
func: as_opt_val
args: [--tt-arg]
arg_order: 'aa tt'
arg_values:
tt: potatoes
aa: 11
assertions:
- test_result.rc == 0
- test_result.out == "-- --answer=11 --tt-arg potatoes\n"
- test_result.err == ""
# this will not be in the regular set of paths get_bin_path() searches
- name: use cmd {{ remote_tmp_dir }}/echo
condition: >
{{
ansible_distribution != "MacOSX" and
not (ansible_distribution == "CentOS" and ansible_distribution_major_version is version('7.0', '<'))
}}
copy_to: "{{ remote_tmp_dir }}"
cmd: "{{ remote_tmp_dir }}/echo"
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
tt:
func: as_opt_val
args: [--tt-arg]
arg_order: 'aa tt'
arg_values:
tt: potatoes
aa: 11
assertions:
- test_result.rc == 0
- test_result.out == "-- --answer=11 --tt-arg potatoes\n"
- test_result.err == ""
- name: use cmd echo with path_prefix {{ remote_tmp_dir }}
cmd: echo
condition: >
{{
ansible_distribution != "MacOSX" and
not (ansible_distribution == "CentOS" and ansible_distribution_major_version is version('7.0', '<'))
}}
copy_to: "{{ remote_tmp_dir }}"
path_prefix: "{{ remote_tmp_dir }}"
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
tt:
func: as_opt_val
args: [--tt-arg]
arg_order: 'aa tt'
arg_values:
tt: potatoes
aa: 11
assertions:
- test_result.rc == 0
- test_result.out == "-- --answer=11 --tt-arg potatoes\n"
- test_result.err == ""
- name: use cmd never-existed
cmd: never-existed
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
tt:
func: as_opt_val
args: [--tt-arg]
arg_order: 'aa tt'
arg_values:
tt: potatoes
aa: 11
expect_error: true
assertions:
- >
"Failed to find required executable" in test_result.msg
- name: use cmd /usr/bin/never-existed
cmd: /usr/bin/never-existed
arg_formats:
aa:
func: as_opt_eq_val
args: [--answer]
tt:
func: as_opt_val
args: [--tt-arg]
arg_order: 'aa tt'
arg_values:
tt: potatoes
aa: 11
expect_error: true
assertions:
- >
"No such file or directory" in test_result.msg