Merge pull request #15144 from mattclay/winrm-test

Add winrm tests and fix exposed unicode errors.
pull/15235/head
Matt Davis 8 years ago
commit 3f70d7a70d

@ -247,9 +247,9 @@ class Connection(ConnectionBase):
# FUTURE: determine buffer size at runtime via remote winrm config?
def _put_file_stdin_iterator(self, in_path, out_path, buffer_size=250000):
in_size = os.path.getsize(in_path)
in_size = os.path.getsize(to_bytes(in_path, errors='strict'))
offset = 0
with open(in_path, 'rb') as in_file:
with open(to_bytes(in_path, errors='strict'), 'rb') as in_file:
for out_data in iter((lambda:in_file.read(buffer_size)), ''):
offset += len(out_data)
self._display.vvvvv('WINRM PUT "%s" to "%s" (offset=%d size=%d)' % (in_path, out_path, offset, len(out_data)), host=self._winrm_host)
@ -265,7 +265,7 @@ class Connection(ConnectionBase):
super(Connection, self).put_file(in_path, out_path)
out_path = self._shell._unquote(out_path)
display.vvv('PUT "%s" TO "%s"' % (in_path, out_path), host=self._winrm_host)
if not os.path.exists(in_path):
if not os.path.exists(to_bytes(in_path, errors='strict')):
raise AnsibleFileNotFound('file or module does not exist: "%s"' % in_path)
script_template = u'''
@ -366,9 +366,9 @@ class Connection(ConnectionBase):
else:
if not out_file:
# If out_path is a directory and we're expecting a file, bail out now.
if os.path.isdir(out_path):
if os.path.isdir(to_bytes(out_path, errors='strict')):
break
out_file = open(out_path, 'wb')
out_file = open(to_bytes(out_path, errors='strict'), 'wb')
out_file.write(data)
if len(data) < buffer_size:
break

@ -102,6 +102,13 @@ test_connection: setup
$(call TEST_CONNECTION_CMD)
$(call TEST_CONNECTION_CMD, LC_ALL=C LANG=C)
# Connection plugin test command to repeat with each locale setting. WinRM specific version.
TEST_CONNECTION_WINRM_CMD = $(1) ansible-playbook test_connection_winrm.yml -i inventory.winrm $(TEST_FLAGS)
test_connection_winrm: setup
$(call TEST_CONNECTION_WINRM_CMD)
$(call TEST_CONNECTION_WINRM_CMD, LC_ALL=C LANG=C)
destructive: setup
ansible-playbook destructive.yml -i $(INVENTORY) -e outputdir=$(TEST_DIR) -e @$(VARS_FILE) $(CREDENTIALS_ARG) -v $(TEST_FLAGS)

@ -5,3 +5,15 @@ server ansible_ssh_host=10.10.10.10 ansible_ssh_user=Administrator ansible_ssh_p
ansible_connection=winrm
# HTTPS uses 5986, HTTP uses 5985
ansible_ssh_port=5985
[winrm]
winrm-pipelining ansible_ssh_pipelining=true
winrm-no-pipelining ansible_ssh_pipelining=false
[winrm:vars]
ansible_connection=winrm
ansible_host=somehost
ansible_user=someuser
ansible_password=somepassword
ansible_port=5986
ansible_winrm_server_cert_validation=ignore

@ -0,0 +1,37 @@
- hosts: winrm
gather_facts: no
serial: 1
tasks:
### raw with unicode arg and output
- name: raw with unicode arg and output
raw: echo 汉语
register: command
- name: check output of raw with unicode arg and output
assert: { that: "'汉语' in command.stdout" }
### copy local file with unicode filename and content
- name: create local file with unicode filename and content
local_action: lineinfile dest=/tmp/ansible-local-汉语/汉语.txt create=true line=汉语
- name: remove remote file with unicode filename and content
win_file: path=c:/windows/temp/ansible-remote-汉语/汉语.txt state=absent
- name: create remote directory with unicode name
win_file: path=c:/windows/temp/ansible-remote-汉语 state=directory
- name: copy local file with unicode filename and content
win_copy: src=/tmp/ansible-local-汉语/汉语.txt dest=c:/windows/temp/ansible-remote-汉语/汉语.txt
### fetch remote file with unicode filename and content
- name: remove local file with unicode filename and content
local_action: file path=/tmp/ansible-local-汉语/汉语.txt state=absent
- name: fetch remote file with unicode filename and content
fetch: src=c:/windows/temp/ansible-remote-汉语/汉语.txt dest=/tmp/ansible-local-汉语/汉语.txt fail_on_missing=true validate_checksum=true flat=true
### remove local and remote temp files
- name: remove local temp file
local_action: file path=/tmp/ansible-local-汉语 state=absent
- name: remove remote temp file
win_file: path=c:/windows/temp/ansible-remote-汉语 state=absent
Loading…
Cancel
Save