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

Fix expect for python 3 #24912

Merged
merged 10 commits into from
May 23, 2017
2 changes: 1 addition & 1 deletion lib/ansible/modules/commands/expect.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ def response_closure(module, question, responses):

def wrapped(info):
try:
return resp_gen.next()
return next(resp_gen)
except StopIteration:
module.fail_json(msg="No remaining responses for '%s', "
"output was '%s'" %
Expand Down
1 change: 1 addition & 0 deletions test/integration/targets/expect/aliases
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
posix/ci/group2
1 change: 1 addition & 0 deletions test/integration/targets/expect/files/foo.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
foo.txt
3 changes: 3 additions & 0 deletions test/integration/targets/expect/files/test_command.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from ansible.module_utils.six.moves import input
user_input = input('foo')
print(user_input)
96 changes: 96 additions & 0 deletions test/integration/targets/expect/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# test code for the ping module
# (c) 2014, James Cammarata <jcammarata@ansible.com>

# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.

- name: record the test_command file
set_fact: test_command_file={{output_dir | expanduser}}/test_command.py

- name: copy script into output directory
copy: src=test_command.py dest={{test_command_file}} mode=0444

- name: record the output file
set_fact: output_file={{output_dir}}/foo.txt

- copy:
content: "foo"
dest: "{{output_file}}"

- name: test expect
expect:
command: "{{ansible_python_interpreter}} {{test_command_file}}"
responses:
foo: bar
register: expect_result

- name: assert expect worked
assert:
that:
- "expect_result.changed == true"
- "expect_result.stdout == 'foobar'"

- name: test creates option
expect:
command: "echo"
responses:
foo: bar
creates: "{{output_file}}"
register: creates_result

- name: assert when creates is provided command is not run
assert:
that:
- "creates_result.changed == false"

- name: test chdir
expect:
command: "pwd"
chdir: "{{output_dir}}"
responses:
foo: bar
register: chdir_result

- name: assert chdir works
assert:
that:
- "chdir_result.stdout == '{{output_dir | expanduser | realpath}}'"

- name: test timeout option
expect:
command: "cat"
responses:
foo: bar
timeout: 0
ignore_errors: true
register: timeout_result

- name: assert failure message when timeout
assert:
that:
- "timeout_result.msg == 'command exceeded timeout'"

- name: test echo option
expect:
command: "{{ansible_python_interpreter}} {{test_command_file}}"
responses:
foo: bar
echo: true
register: echo_result

- name: assert echo works
assert:
that:
- "'bar' in echo_result.stdout_lines"
1 change: 1 addition & 0 deletions test/runner/requirements/integration.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ junit-xml
ordereddict ; python_version < '2.7'
paramiko
passlib
pexpect
pycrypto
pyyaml