84437855c9
By checking the cmd result with the original we cause these tests to fail on older releases without this PR.
342 lines
9.9 KiB
YAML
342 lines
9.9 KiB
YAML
# Test code for the command and shell modules.
|
|
|
|
# Copyright: (c) 2014, Richard Isaacson <richard.c.isaacson@gmail.com>
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
- name: use command to execute sudo
|
|
command: sudo -h
|
|
register: become
|
|
|
|
- name: assert become warning was reported
|
|
assert:
|
|
that:
|
|
- "become.warnings | length() == 1"
|
|
- "'Consider using' in become.warnings[0]"
|
|
|
|
- name: use command to execute sudo without warnings
|
|
command: sudo -h warn=no
|
|
register: become
|
|
|
|
- name: assert become warning was not reported
|
|
assert:
|
|
that:
|
|
- "'warnings' not in become"
|
|
|
|
- name: use command to execute tar
|
|
command: tar --help
|
|
register: tar
|
|
|
|
- name: assert tar warning was reported
|
|
assert:
|
|
that:
|
|
- "tar.warnings | length() == 1"
|
|
- "'Consider using the unarchive module rather than running tar' in tar.warnings[0]"
|
|
|
|
- name: use command to execute chown
|
|
command: chown -h
|
|
register: chown
|
|
ignore_errors: true
|
|
|
|
- name: assert chown warning was reported
|
|
assert:
|
|
that:
|
|
- "chown.warnings | length() == 1"
|
|
- "'Consider using the file module with owner rather than running chown' in chown.warnings[0]"
|
|
|
|
- name: use command with unsupported executable arg
|
|
command: ls /dev/null executable=/bogus
|
|
register: executable
|
|
|
|
- name: assert executable warning was reported
|
|
assert:
|
|
that:
|
|
- "executable.stdout == '/dev/null'"
|
|
- "executable.warnings | length() == 1"
|
|
- "'no longer supported' in executable.warnings[0]"
|
|
|
|
- name: use command with no command
|
|
command: chdir=/
|
|
register: no_command
|
|
ignore_errors: true
|
|
|
|
- name: assert executable fails with no command
|
|
assert:
|
|
that:
|
|
- "no_command.failed == true"
|
|
- "no_command.msg == 'no command given'"
|
|
- "no_command.rc == 256"
|
|
|
|
- name: use argv
|
|
command:
|
|
argv:
|
|
- echo
|
|
- testing
|
|
register: argv_command
|
|
ignore_errors: true
|
|
|
|
- name: assert executable works with argv
|
|
assert:
|
|
that:
|
|
- "argv_command.stdout == 'testing'"
|
|
|
|
- name: use argv and command string
|
|
command: echo testing
|
|
args:
|
|
argv:
|
|
- echo
|
|
- testing
|
|
register: argv_and_string_command
|
|
ignore_errors: true
|
|
|
|
- name: assert executable fails with both argv and command string
|
|
assert:
|
|
that:
|
|
- "argv_and_string_command.failed == true"
|
|
- "argv_and_string_command.msg == 'only command or argv can be given, not both'"
|
|
- "argv_and_string_command.rc == 256"
|
|
|
|
- set_fact: output_dir_test={{output_dir}}/test_command_shell
|
|
|
|
- name: make sure our testing sub-directory does not exist
|
|
file: path="{{ output_dir_test }}" state=absent
|
|
|
|
- name: create our testing sub-directory
|
|
file: path="{{ output_dir_test }}" state=directory
|
|
|
|
- name: prep our test script
|
|
copy: src=test.sh dest="{{ output_dir_test }}" mode=0755
|
|
|
|
- name: prep our test script
|
|
copy: src=create_afile.sh dest="{{ output_dir_test }}" mode=0755
|
|
|
|
- name: prep our test script
|
|
copy: src=remove_afile.sh dest="{{ output_dir_test }}" mode=0755
|
|
|
|
- name: locate bash
|
|
shell: which bash
|
|
register: bash
|
|
|
|
##
|
|
## command
|
|
##
|
|
|
|
- name: execute the test.sh script via command
|
|
command: "{{output_dir_test | expanduser}}/test.sh"
|
|
register: command_result0
|
|
|
|
- name: assert that the script executed correctly
|
|
assert:
|
|
that:
|
|
- "command_result0.rc == 0"
|
|
- "command_result0.stderr == ''"
|
|
- "command_result0.stdout == 'win'"
|
|
|
|
# executable
|
|
|
|
# FIXME doesn't have the expected stdout.
|
|
|
|
#- name: execute the test.sh script with executable via command
|
|
# command: "{{output_dir_test | expanduser}}/test.sh executable={{ bash.stdout }}"
|
|
# register: command_result1
|
|
#
|
|
#- name: assert that the script executed correctly with command
|
|
# assert:
|
|
# that:
|
|
# - "command_result1.rc == 0"
|
|
# - "command_result1.stderr == ''"
|
|
# - "command_result1.stdout == 'win'"
|
|
|
|
# chdir
|
|
|
|
- name: execute the test.sh script with chdir via command
|
|
command: ./test.sh chdir="{{output_dir_test | expanduser}}"
|
|
register: command_result2
|
|
|
|
- name: assert that the script executed correctly with chdir
|
|
assert:
|
|
that:
|
|
- "command_result2.rc == 0"
|
|
- "command_result2.stderr == ''"
|
|
- "command_result2.stdout == 'win'"
|
|
|
|
# creates
|
|
|
|
- name: verify that afile.txt is absent
|
|
file: path={{output_dir_test}}/afile.txt state=absent
|
|
|
|
- name: create afile.txt with create_afile.sh via command
|
|
command: "{{output_dir_test | expanduser}}/create_afile.sh {{output_dir_test | expanduser}}/afile.txt creates={{output_dir_test | expanduser}}/afile.txt"
|
|
|
|
- name: verify that afile.txt is present
|
|
file: path={{output_dir_test}}/afile.txt state=file
|
|
|
|
- name: re-run previous command using creates with globbing
|
|
command: "{{output_dir_test | expanduser}}/create_afile.sh {{output_dir_test | expanduser}}/afile.txt creates={{output_dir_test | expanduser}}/afile.*"
|
|
register: command_result3
|
|
|
|
- name: assert that creates with globbing is working
|
|
assert:
|
|
that:
|
|
- "command_result3.changed != True"
|
|
|
|
# removes
|
|
|
|
- name: remove afile.txt with remote_afile.sh via command
|
|
command: "{{output_dir_test | expanduser}}/remove_afile.sh {{output_dir_test | expanduser}}/afile.txt removes={{output_dir_test | expanduser}}/afile.txt"
|
|
|
|
- name: verify that afile.txt is absent
|
|
file: path={{output_dir_test}}/afile.txt state=absent
|
|
|
|
- name: re-run previous command using removes with globbing
|
|
command: "{{output_dir_test | expanduser}}/remove_afile.sh {{output_dir_test | expanduser}}/afile.txt removes={{output_dir_test | expanduser}}/afile.*"
|
|
register: command_result4
|
|
|
|
- name: assert that removes with globbing is working
|
|
assert:
|
|
that:
|
|
- "command_result4.changed != True"
|
|
|
|
- name: pass stdin to cat via command
|
|
command: "cat"
|
|
args:
|
|
stdin: 'foobar'
|
|
register: command_result5
|
|
|
|
- name: assert that stdin is passed
|
|
assert:
|
|
that:
|
|
- "command_result5.stdout == 'foobar'"
|
|
|
|
- name: send to stdin literal multiline block
|
|
command: "{{ ansible_python_interpreter }} -c 'import hashlib, sys; print(hashlib.sha1((sys.stdin.buffer if hasattr(sys.stdin, \"buffer\") else sys.stdin).read()).hexdigest())'"
|
|
args:
|
|
stdin: |-
|
|
this is the first line
|
|
this is the second line
|
|
|
|
this line is after an empty line
|
|
this line is the last line
|
|
register: command_result6
|
|
|
|
- name: assert the multiline input was passed correctly
|
|
assert:
|
|
that:
|
|
- "command_result6.stdout == '9cd0697c6a9ff6689f0afb9136fa62e0b3fee903'"
|
|
|
|
##
|
|
## shell
|
|
##
|
|
|
|
- name: Execute the test.sh script
|
|
shell: "{{output_dir_test | expanduser}}/test.sh"
|
|
register: shell_result0
|
|
|
|
- name: Assert that the script executed correctly
|
|
assert:
|
|
that:
|
|
- shell_result0 is changed
|
|
- shell_result0.cmd == '{{output_dir_test | expanduser}}/test.sh'
|
|
- shell_result0.rc == 0
|
|
- shell_result0.stderr == ''
|
|
- shell_result0.stdout == 'win'
|
|
|
|
# executable
|
|
|
|
# FIXME doesn't pass the expected stdout
|
|
|
|
#- name: execute the test.sh script
|
|
# shell: "{{output_dir_test | expanduser}}/test.sh executable={{ bash.stdout }}"
|
|
# register: shell_result1
|
|
#
|
|
#- name: assert that the shell executed correctly
|
|
# assert:
|
|
# that:
|
|
# - "shell_result1.rc == 0"
|
|
# - "shell_result1.stderr == ''"
|
|
# - "shell_result1.stdout == 'win'"
|
|
|
|
# chdir
|
|
|
|
- name: Execute the test.sh script with chdir
|
|
shell: ./test.sh chdir="{{output_dir_test | expanduser}}"
|
|
register: shell_result2
|
|
|
|
- name: Assert that the shell executed correctly with chdir
|
|
assert:
|
|
that:
|
|
- shell_result2 is changed
|
|
- shell_result2.cmd == './test.sh'
|
|
- shell_result2.rc == 0
|
|
- shell_result2.stderr == ''
|
|
- shell_result2.stdout == 'win'
|
|
|
|
# creates
|
|
|
|
- name: Verify that afile.txt is absent
|
|
file: path={{output_dir_test}}/afile.txt state=absent
|
|
|
|
- name: Execute the test.sh script with chdir
|
|
shell: "{{output_dir_test | expanduser}}/test.sh > {{output_dir_test | expanduser}}/afile.txt creates={{output_dir_test | expanduser}}/afile.txt"
|
|
|
|
- name: Verify that afile.txt is present
|
|
file: path={{output_dir_test}}/afile.txt state=file
|
|
|
|
# multiline
|
|
|
|
- name: Remove test file previously created
|
|
file: path={{output_dir_test | expanduser}}/afile.txt state=absent
|
|
|
|
- name: Execute a shell command using a literal multiline block
|
|
args:
|
|
executable: "{{ bash.stdout }}"
|
|
shell: |
|
|
echo this is a \
|
|
"multiline echo" \
|
|
"with a new line
|
|
in quotes" \
|
|
| {{ ansible_python_interpreter }} -c 'import hashlib, sys; print(hashlib.sha1((sys.stdin.buffer if hasattr(sys.stdin, "buffer") else sys.stdin).read()).hexdigest())'
|
|
echo "this is a second line"
|
|
register: shell_result5
|
|
|
|
- name: Assert the multiline shell command ran as expected
|
|
assert:
|
|
that:
|
|
- shell_result5 is changed
|
|
- shell_result5.rc == 0
|
|
- shell_result5.cmd == 'echo this is a "multiline echo" "with a new line\nin quotes" | ' + ansible_python_interpreter + ' -c \'import hashlib, sys; print(hashlib.sha1((sys.stdin.buffer if hasattr(sys.stdin, "buffer") else sys.stdin).read()).hexdigest())\'\necho "this is a second line"\n'
|
|
- shell_result5.stdout == '5575bb6b71c9558db0b6fbbf2f19909eeb4e3b98\nthis is a second line'
|
|
|
|
- name: Execute a shell command using a literal multiline block with arguments in it
|
|
shell: |
|
|
executable="{{ bash.stdout }}"
|
|
creates={{output_dir_test | expanduser}}/afile.txt
|
|
echo "test"
|
|
register: shell_result6
|
|
|
|
- name: Assert the multiline shell command with arguments in it run as expected
|
|
assert:
|
|
that:
|
|
- shell_result6 is changed
|
|
- shell_result6.rc == 0
|
|
- shell_result6.cmd == 'echo "test"\n'
|
|
- shell_result6.stdout == 'test'
|
|
|
|
- name: Execute a shell command using a multiline block where whitespaces matter
|
|
shell: |
|
|
cat <<EOF
|
|
One
|
|
Two
|
|
Three
|
|
EOF
|
|
register: shell_result7
|
|
|
|
- name: Assert the multiline shell command outputs with whitespaces preserved
|
|
assert:
|
|
that:
|
|
- shell_result7 is changed
|
|
- shell_result7.rc == 0
|
|
- shell_result7.cmd == 'cat <<EOF\nOne\n Two\n Three\nEOF\n'
|
|
- shell_result7.stdout == 'One\n Two\n Three'
|
|
|
|
- name: remove the previously created file
|
|
file: path={{output_dir_test}}/afile.txt state=absent
|