diff options
author | Jordan Borean <jborean93@gmail.com> | 2019-03-14 08:04:49 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-14 08:04:49 +1000 |
commit | d3792145d59dca99705a96c46120d4a904588aa3 (patch) | |
tree | 28c752b9326c7c7c9a6bfff845fcdc6892ee691b | |
parent | 42e6700a717d8e07d24b5644d392dbed1d744f82 (diff) | |
download | ansible-d3792145d59dca99705a96c46120d4a904588aa3.tar.gz |
win_get_url - refactor tests to use httptester (#53765)
* win_get_url - refactor tests to use httptester
* Use the file lookup instead of slurp
12 files changed, 213 insertions, 270 deletions
diff --git a/lib/ansible/modules/windows/win_get_url.ps1 b/lib/ansible/modules/windows/win_get_url.ps1 index b94ef64881..90fdbbe2af 100644 --- a/lib/ansible/modules/windows/win_get_url.ps1 +++ b/lib/ansible/modules/windows/win_get_url.ps1 @@ -381,13 +381,13 @@ $request_params = @{ } if ($checksum) { - $checksum = $checksum.Trim().toLower() + $checksum = $checksum.Trim().ToLower() } if ($checksum_algorithm) { - $checksum_algorithm = $checksum_algorithm.Trim().toLower() + $checksum_algorithm = $checksum_algorithm.Trim().ToLower() } if ($checksum_url) { - $checksum_url = $checksum_url.Trim().toLower() + $checksum_url = $checksum_url.Trim() } # Check for case $checksum variable contain url. If yes, get file data from url and replace original value in $checksum diff --git a/test/integration/targets/win_get_url/aliases b/test/integration/targets/win_get_url/aliases index 4f4664b685..ca4f45531a 100644 --- a/test/integration/targets/win_get_url/aliases +++ b/test/integration/targets/win_get_url/aliases @@ -1 +1,3 @@ shippable/windows/group5 +needs/httptester +skip/windows/2008 # httptester requires SSH which doesn't work with 2008 diff --git a/test/integration/targets/win_get_url/defaults/main.yml b/test/integration/targets/win_get_url/defaults/main.yml deleted file mode 100644 index 54976cfc49..0000000000 --- a/test/integration/targets/win_get_url/defaults/main.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -test_win_get_url_path: '{{win_output_dir}}\win_get_url' -test_win_get_url_host: www.redhat.com -test_win_get_url_env_var: WIN_GET_URL - -remote_tmp_path: '{{win_output_dir}}\win_get_url_dest' -remote_http_path: '{{test_win_get_url_path}}\http' diff --git a/test/integration/targets/win_get_url/files/ftp/anon/sha1sum.txt b/test/integration/targets/win_get_url/files/ftp/anon/sha1sum.txt new file mode 100644 index 0000000000..c5cfcb4769 --- /dev/null +++ b/test/integration/targets/win_get_url/files/ftp/anon/sha1sum.txt @@ -0,0 +1,3 @@ +a97e6837f60cec6da4491bab387296bbcd72bdba cHR1eA== +3911340502960ca33aece01129234460bfeb2791 not_target1.txt +1b4b6adf30992cedb0f6edefd6478ff0a593b2e4 not_target2.txt diff --git a/test/integration/targets/win_get_url/files/ftp/anon/sha256sum.txt b/test/integration/targets/win_get_url/files/ftp/anon/sha256sum.txt new file mode 100644 index 0000000000..599e3626af --- /dev/null +++ b/test/integration/targets/win_get_url/files/ftp/anon/sha256sum.txt @@ -0,0 +1,3 @@ +b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006 cHR1eA== +30949cc401e30ac494d695ab8764a9f76aae17c5d73c67f65e9b558f47eff892 not_target1.txt +d0dbfc1945bc83bf6606b770e442035f2c4e15c886ee0c22fb3901ba19900b5b not_target2.txt diff --git a/test/integration/targets/win_get_url/files/ftp/anon/sha256sum_with_dot.txt b/test/integration/targets/win_get_url/files/ftp/anon/sha256sum_with_dot.txt new file mode 100644 index 0000000000..1e46b89d6b --- /dev/null +++ b/test/integration/targets/win_get_url/files/ftp/anon/sha256sum_with_dot.txt @@ -0,0 +1,3 @@ +b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006 ./cHR1eA== +30949cc401e30ac494d695ab8764a9f76aae17c5d73c67f65e9b558f47eff892 ./not_target1.txt +d0dbfc1945bc83bf6606b770e442035f2c4e15c886ee0c22fb3901ba19900b5b ./not_target2.txt diff --git a/test/integration/targets/win_get_url/meta/main.yml b/test/integration/targets/win_get_url/meta/main.yml new file mode 100644 index 0000000000..6baa762584 --- /dev/null +++ b/test/integration/targets/win_get_url/meta/main.yml @@ -0,0 +1,3 @@ +dependencies: +- setup_remote_tmp_dir +- prepare_http_tests diff --git a/test/integration/targets/win_get_url/tasks/main.yml b/test/integration/targets/win_get_url/tasks/main.yml index 9fa8f22870..b134f61a2a 100644 --- a/test/integration/targets/win_get_url/tasks/main.yml +++ b/test/integration/targets/win_get_url/tasks/main.yml @@ -1,69 +1,39 @@ --- -- name: ensure testing folder is present - win_file: - path: '{{ item }}' - state: directory - loop: - - '{{ test_win_get_url_path }}' - - '{{ remote_http_path }}' - - '{{ remote_tmp_path }}' - - name: copy across testing files win_copy: src: files/ - dest: '{{test_win_get_url_path}}\' + dest: '{{ remote_tmp_dir }}' - name: download SlimFTPd binary win_get_url: url: https://s3.amazonaws.com/ansible-ci-files/test/integration/roles/test_win_get_url/SlimFTPd.exe - dest: '{{test_win_get_url_path}}\SlimFTPd.exe' + dest: '{{ remote_tmp_dir }}\SlimFTPd.exe' - name: template SlimFTPd configuration file win_template: src: slimftpd.conf.tmpl - dest: '{{test_win_get_url_path}}\slimftpd.conf' + dest: '{{ remote_tmp_dir }}\slimftpd.conf' - name: create SlimFTPd service win_service: name: SlimFTPd - path: '"{{test_win_get_url_path}}\SlimFTPd.exe" -service' + path: '"{{ remote_tmp_dir }}\SlimFTPd.exe" -service' state: started dependencies: - tcpip -- name: create env var for win_get_url tests - win_environment: - name: '{{test_win_get_url_env_var}}' - level: machine - value: '{{test_win_get_url_path}}' - state: present - - block: - name: run URL tests - include_tasks: tests_url.yml + import_tasks: tests_url.yml - name: run FTP tests - include_tasks: tests_ftp.yml + import_tasks: tests_ftp.yml - name: run checksum tests - include_tasks: tests_checksum.yml + import_tasks: tests_checksum.yml always: - name: remove SlimFTPd service win_service: name: SlimFTPd state: absent - - - name: remove test env var for tests - win_environment: - name: '{{test_win_get_url_env_var}}' - level: machine - state: absent - - - name: remove testing folders - win_file: - path: '{{ item }}' - state: absent - loop: - - '{{ test_win_get_url_path }}' - - '{{ remote_tmp_path }}' diff --git a/test/integration/targets/win_get_url/tasks/tests_checksum.yml b/test/integration/targets/win_get_url/tasks/tests_checksum.yml index e53ca3057a..49b2f452ff 100644 --- a/test/integration/targets/win_get_url/tasks/tests_checksum.yml +++ b/test/integration/targets/win_get_url/tasks/tests_checksum.yml @@ -1,202 +1,91 @@ --- -- name: create src file - win_copy: - dest: '{{ remote_http_path }}\27617.txt' - content: 'ptux' - -- name: create sha1 checksum file of src - win_copy: - dest: '{{ remote_http_path }}\sha1sum.txt' - content: 'a97e6837f60cec6da4491bab387296bbcd72bdba 27617.txt' - -- name: add sha1 checksum not going to be downloaded - win_lineinfile: - dest: '{{ remote_http_path }}\sha1sum.txt' - line: '{{ item }}' - loop: - - '3911340502960ca33aece01129234460bfeb2791 not_target1.txt' - - '1b4b6adf30992cedb0f6edefd6478ff0a593b2e4 not_target2.txt' - -- name: create sha256 checksum file of src - win_copy: - dest: '{{ remote_http_path }}\sha256sum.txt' - content: 'b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006. 27617.txt' - -- name: add sha256 checksum not going to be downloaded - win_lineinfile: - dest: '{{ remote_http_path }}\sha256sum.txt' - line: '{{ item }}' - loop: - - '30949cc401e30ac494d695ab8764a9f76aae17c5d73c67f65e9b558f47eff892 not_target1.txt' - - 'd0dbfc1945bc83bf6606b770e442035f2c4e15c886ee0c22fb3901ba19900b5b not_target2.txt' - -- name: create sha256 checksum file of src with a dot leading path - win_copy: - dest: '{{ remote_http_path }}\sha256sum_with_dot.txt' - content: 'b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006. ./27617.txt' - -- name: add sha256 checksums with dot leading path not going to be downloaded - win_lineinfile: - dest: '{{ remote_http_path }}\sha256sum_with_dot.txt' - line: '{{ item }}' - loop: - - '30949cc401e30ac494d695ab8764a9f76aae17c5d73c67f65e9b558f47eff892 ./not_target1.txt' - - 'd0dbfc1945bc83bf6606b770e442035f2c4e15c886ee0c22fb3901ba19900b5b ./not_target2.txt' - -- name: copy files to ftp - win_copy: - src: '{{ remote_http_path }}\' - dest: '{{ test_win_get_url_path }}\ftp\{{ item }}\' - remote_src: yes - loop: '{{ dest_folders }}' - vars: - dest_folders: - - anon - - user - - user-pass - -- name: download src with sha1 checksum url +# These files are pre formatted and we want to get the base64 value so we can use it for httpbin +# dynamic content in checksum_url +- name: set base64 values for checksum files + set_fact: + sha1sum: '{{ lookup("file", "ftp/anon/sha1sum.txt") | b64encode }}' + sha256sum: '{{ lookup("file", "ftp/anon/sha256sum.txt") | b64encode }}' + sha256sum_dot: '{{ lookup("file", "ftp/anon/sha256sum_with_dot.txt") | b64encode }}' + +- name: download file with sha1 checksum url win_get_url: - url: 'ftp://localhost/anon/27617.txt' - dest: '{{ remote_tmp_path }}' - checksum_url: 'ftp://localhost/anon/sha1sum.txt' + url: https://{{ httpbin_host }}/base64/cHR1eA== + dest: '{{ remote_tmp_dir }}\sha1.txt' + checksum_url: https://{{ httpbin_host }}/base64/{{ sha1sum }} force: True - register: result_sha1 + register: download_sha1_url -- name: download src with sha1 checksum value +- name: download file with sha1 checksum value win_get_url: - url: 'ftp://localhost/anon/27617.txt' - dest: '{{ remote_tmp_path }}' - checksum: 'a97e6837f60cec6da4491bab387296bbcd72bdba' + url: https://{{ httpbin_host }}/base64/cHR1eA== + dest: '{{ remote_tmp_dir }}\sha1.txt' + checksum: a97e6837f60cec6da4491bab387296bbcd72bdba force: True - register: result_sha1_alt - -- win_stat: - path: '{{ remote_tmp_path }}\27617.txt' - register: stat_result_sha1 + register: download_sha1_value -- name: download src with sha256 checksum url +- name: assert download file with sha1 checksum + assert: + that: + - download_sha1_url is changed + - download_sha1_url.status_code == 200 + - download_sha1_url.checksum_dest == 'a97e6837f60cec6da4491bab387296bbcd72bdba' + - not download_sha1_value is changed + - download_sha1_value.status_code == 200 + - download_sha1_value.checksum_dest == 'a97e6837f60cec6da4491bab387296bbcd72bdba' + +- name: download file with sha256 checksum ftp win_get_url: - url: 'ftp://localhost/anon/27617.txt' - dest: '{{ remote_tmp_path }}\27617sha256.txt' - checksum_url: 'ftp://localhost/anon/sha256sum.txt' + url: https://{{ httpbin_host }}/base64/cHR1eA== + dest: '{{ remote_tmp_dir }}\sha256.txt' + checksum_url: ftp://localhost/anon/sha256sum.txt # tests that a checksum can be from an FTP URI checksum_algorithm: sha256 force: True - register: result_sha256 - -- win_stat: - path: '{{ remote_tmp_path }}\27617.txt' - register: stat_result_sha256 + register: download_sha256_ftp -- name: download src with sha256 checksum url with dot leading paths +- name: download file with sha256 checksum dot leading source as file win_get_url: - url: 'ftp://localhost/anon/27617.txt' - dest: '{{ remote_tmp_path }}\27617sha256_with_dot.txt' - checksum_url: 'ftp://localhost/anon/sha256sum_with_dot.txt' + url: https://{{ httpbin_host }}/base64/cHR1eA== + dest: '{{ remote_tmp_dir }}\sha256.txt' + checksum_url: '{{ remote_tmp_dir }}\ftp\anon\sha256sum_with_dot.txt' checksum_algorithm: sha256 force: True - register: result_sha256_with_dot + register: download_sha256_file -- win_stat: - path: '{{ remote_tmp_path }}\27617sha256_with_dot.txt' - register: stat_result_sha256_with_dot - -- name: Assert that the file was downloaded - assert: - that: - - result_sha1 is changed - - result_sha1.checksum_dest == 'a97e6837f60cec6da4491bab387296bbcd72bdba' - - result_sha1_alt is succeeded - - not result_sha1_alt is changed - - result_sha1_alt.checksum_dest == 'a97e6837f60cec6da4491bab387296bbcd72bdba' - - result_sha256 is changed - - result_sha256_with_dot is changed - - stat_result_sha1.stat.exists | bool - - stat_result_sha256.stat.exists | bool - - stat_result_sha256_with_dot.stat.exists | bool - -# Check download with force: False - -- name: download src with sha1 checksum url +- name: download file with sha256 checksum value win_get_url: - url: 'ftp://localhost/anon/27617.txt' - dest: '{{ remote_tmp_path }}' - checksum_url: 'ftp://localhost/anon/sha1sum.txt' - checksum_algorithm: sha1 - force: False - register: result_sha1_no_force - -- name: download src with sha256 checksum url - win_get_url: - url: 'ftp://localhost/anon/27617.txt' - dest: '{{ remote_tmp_path }}/27617sha256.txt' - checksum_url: 'ftp://localhost/anon/sha256sum.txt' + url: https://{{ httpbin_host }}/base64/cHR1eA== + dest: '{{ remote_tmp_dir }}\sha256.txt' + checksum: b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006 checksum_algorithm: sha256 - force: False - register: result_sha256_no_force + register: download_sha256_value -- name: assert download single file with force no +- name: assert download file with sha256 checksum assert: that: - - result_sha1_no_force is not changed - - result_sha256_no_force is not changed - -# Check download with check_mode: True - -- name: download src with sha1 checksum url | checkmode + - download_sha256_ftp is changed + - download_sha256_ftp.status_code == 200 + - download_sha256_ftp.checksum_dest == 'b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006' + - not download_sha256_file is changed + - download_sha256_file.status_code == 200 + - download_sha256_file.checksum_dest == 'b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006' + - not download_sha256_value is changed + - download_sha256_value.status_code == 200 + - download_sha256_value.checksum_dest == 'b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006' + +- name: fail download with invalid checksum and force=no win_get_url: - url: 'ftp://localhost/anon/27617.txt' - dest: '{{ remote_tmp_path }}' - checksum_url: 'ftp://localhost/anon/sha1sum.txt' - checksum_algorithm: sha1 - check_mode: True - register: result_sha1_check_mode - -- name: download src with sha256 checksum url | checkmode + url: https://{{ httpbin_host }}/base64/cHR1eA== + dest: '{{ remote_tmp_dir }}\fail.txt' + checksum: invalid + force: no + register: fail_checksum_force_no + failed_when: fail_checksum_force_no.msg != "The checksum for https://" + httpbin_host + "/base64/cHR1eA== did not match 'invalid', it was 'a97e6837f60cec6da4491bab387296bbcd72bdba'" + +- name: fail download with invalid checksum and force=yes win_get_url: - url: 'ftp://localhost/anon/27617.txt' - dest: '{{ remote_tmp_path }}\27617sha256.txt' - checksum_url: 'ftp://localhost/anon/sha256sum.txt' - checksum_algorithm: sha256 - check_mode: True - register: result_sha256_check_mode - -- name: assert download single file with force no - assert: - that: - - result_sha1_check_mode.checksum_dest == 'a97e6837f60cec6da4491bab387296bbcd72bdba' - - result_sha256_check_mode.checksum_dest == 'b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006' - - result_sha1_check_mode.checksum_src | length - - result_sha256_check_mode.checksum_src | length - -# Check download with wrong checksum - -- name: download src with sha1 checksum value | fail - win_get_url: - url: 'ftp://localhost/anon/27617.txt' - dest: '{{ remote_tmp_path }}' - checksum: 'redacted' - checksum_algorithm: sha1 - failed_when: - - '"did not match" not in result_sha1_failed.msg' - - '"The checksum" not in result_sha1_failed.msg' - - '"Unknown error downloading" not in result_sha1_failed.msg' - register: result_sha1_failed - -- name: download src with sha256 checksum value | fail - win_get_url: - url: 'ftp://localhost/anon/27617.txt' - dest: '{{ remote_tmp_path }}\27617sha256.txt' - checksum: 'redacted' - checksum_algorithm: sha256 - failed_when: - - '"did not match" not in result_sha256_failed.msg' - - '"The checksum" not in result_sha256_failed.msg' - - '"Unknown error downloading" not in result_sha256_failed.msg' - register: result_sha256_failed - -- name: assert failed downloads - assert: - that: - - result_sha1_failed is succeeded - - result_sha256_failed is succeeded + url: https://{{ httpbin_host }}/base64/cHR1eA== + dest: '{{ remote_tmp_dir }}\fail.txt' + checksum: invalid + force: yes + register: fail_checksum_force_yes + failed_when: fail_checksum_force_yes.msg != "The checksum for https://" + httpbin_host + "/base64/cHR1eA== did not match 'invalid', it was 'a97e6837f60cec6da4491bab387296bbcd72bdba'" diff --git a/test/integration/targets/win_get_url/tasks/tests_ftp.yml b/test/integration/targets/win_get_url/tasks/tests_ftp.yml index d7ae4ae8bf..e7faa96216 100644 --- a/test/integration/targets/win_get_url/tasks/tests_ftp.yml +++ b/test/integration/targets/win_get_url/tasks/tests_ftp.yml @@ -2,13 +2,13 @@ - name: download file from FTP source (check) win_get_url: url: ftp://localhost/anon/file.txt - dest: '{{test_win_get_url_path}}\ftp-anon.txt' + dest: '{{ remote_tmp_dir }}\ftp-anon.txt' check_mode: yes register: ftp_anon_check - name: get results of download file from FTP source (check) win_stat: - path: '{{test_win_get_url_path}}\ftp-anon.txt' + path: '{{ remote_tmp_dir }}\ftp-anon.txt' register: ftp_anon_result_check - name: assert download file from FTP source (check) @@ -20,12 +20,12 @@ - name: download file from FTP source win_get_url: url: ftp://localhost/anon/file.txt - dest: '{{test_win_get_url_path}}\ftp-anon.txt' + dest: '{{ remote_tmp_dir }}\ftp-anon.txt' register: ftp_anon - name: get results of download file from FTP source win_stat: - path: '{{test_win_get_url_path}}\ftp-anon.txt' + path: '{{ remote_tmp_dir }}\ftp-anon.txt' register: ftp_anon_result - name: assert download file from FTP source @@ -35,12 +35,21 @@ - ftp_anon_result.stat.exists - ftp_anon_result.stat.checksum == '67e0de92f29645cc30d8d147b767cceb81756651' -# TODO: Add check for idempotent with force: yes once tmp download and checksum verify are in +- name: download file from FTP source (idempotent) + win_get_url: + url: ftp://localhost/anon/file.txt + dest: '{{ remote_tmp_dir }}\ftp-anon.txt' + register: ftp_anon_again + +- name: assert download file from FTP source (idempotent) + assert: + that: + - not ftp_anon_again is changed - name: download file from FTP source with force no (check) win_get_url: url: ftp://localhost/anon/file.txt - dest: '{{test_win_get_url_path}}\ftp-anon.txt' + dest: '{{ remote_tmp_dir }}\ftp-anon.txt' force: no check_mode: yes register: ftp_anon_force_no_check @@ -53,7 +62,7 @@ - name: download file from FTP source with force no win_get_url: url: ftp://localhost/anon/file.txt - dest: '{{test_win_get_url_path}}\ftp-anon.txt' + dest: '{{ remote_tmp_dir }}\ftp-anon.txt' force: no register: ftp_anon_force_no @@ -63,19 +72,19 @@ - ftp_anon_force_no is not changed - name: set last modified time on FTP source to newer datetime - win_shell: (Get-Item -Path '{{test_win_get_url_path}}\ftp\anon\file2.txt').LastWriteTime = (Get-Date).AddHours(24) + win_shell: (Get-Item -Path '{{ remote_tmp_dir }}\ftp\anon\file2.txt').LastWriteTime = (Get-Date).AddHours(24) - name: download newer file from FTP source to same dest (check) win_get_url: url: ftp://localhost/anon/file2.txt - dest: '{{test_win_get_url_path}}\ftp-anon.txt' + dest: '{{ remote_tmp_dir }}\ftp-anon.txt' force: no check_mode: yes register: ftp_anon_force_no_different_check - name: get result of download newer file from FTP source to same dest (check) win_stat: - path: '{{test_win_get_url_path}}\ftp-anon.txt' + path: '{{ remote_tmp_dir }}\ftp-anon.txt' register: ftp_anon_force_no_different_result_check - name: assert download newer file from FTP source to same dest (check) @@ -87,13 +96,13 @@ - name: download newer file from FTP source to same dest win_get_url: url: ftp://localhost/anon/file2.txt - dest: '{{test_win_get_url_path}}\ftp-anon.txt' + dest: '{{ remote_tmp_dir }}\ftp-anon.txt' force: no register: ftp_anon_force_no_different - name: get result of download newer file from FTP source to same dest win_stat: - path: '{{test_win_get_url_path}}\ftp-anon.txt' + path: '{{ remote_tmp_dir }}\ftp-anon.txt' register: ftp_anon_force_no_different_result - name: assert download newer file from FTP source to same dest (check) @@ -105,7 +114,7 @@ - name: fail to download file from ftp protected by username win_get_url: url: ftp://localhost/user/file.txt - dest: '{{test_win_get_url_path}}\ftp-user.txt' + dest: '{{ remote_tmp_dir }}\ftp-user.txt' register: fail_ftp_no_user ignore_errors: yes @@ -120,13 +129,13 @@ - name: download FTP file protected by username win_get_url: url: ftp://localhost/user/file.txt - dest: '{{test_win_get_url_path}}\ftp-user.txt' + dest: '{{ remote_tmp_dir }}\ftp-user.txt' url_username: username register: ftp_user_file - name: get result of download FTP file protected by username win_stat: - path: '{{test_win_get_url_path}}\ftp-user.txt' + path: '{{ remote_tmp_dir }}\ftp-user.txt' register: ftp_user_file_result - name: assert download FTP file protected by username @@ -139,14 +148,14 @@ - name: download FTP file protected by username and password win_get_url: url: ftp://localhost/user-pass/file.txt - dest: '{{test_win_get_url_path}}\ftp-user-pass.txt' + dest: '{{ remote_tmp_dir }}\ftp-user-pass.txt' url_username: userpass url_password: password register: ftp_user_pass_file - name: get result of download FTP file protected by username and password win_stat: - path: '{{test_win_get_url_path}}\ftp-user-pass.txt' + path: '{{ remote_tmp_dir }}\ftp-user-pass.txt' register: ftp_user_pass_file_result - name: assert download FTP file protected by username and password diff --git a/test/integration/targets/win_get_url/tasks/tests_url.yml b/test/integration/targets/win_get_url/tasks/tests_url.yml index 539aba6a63..3dc6195716 100644 --- a/test/integration/targets/win_get_url/tasks/tests_url.yml +++ b/test/integration/targets/win_get_url/tasks/tests_url.yml @@ -1,13 +1,13 @@ - name: download single file (check) win_get_url: - url: https://{{test_win_get_url_host}} - dest: '{{test_win_get_url_path}}\web.html' + url: https://{{ httpbin_host }}/base64/SG93IG5vdyBicm93biBjb3c= + dest: '{{ remote_tmp_dir }}\output.txt' check_mode: yes register: http_download_check - name: get result of download single file (check) win_stat: - path: '{{test_win_get_url_path}}\web.html' + path: '{{ remote_tmp_dir }}\output.txt' register: http_download_result_check - name: assert download single file (check) @@ -21,13 +21,13 @@ - name: download single file win_get_url: - url: https://{{test_win_get_url_host}} - dest: '{{test_win_get_url_path}}\web.html' + url: https://{{ httpbin_host }}/base64/SG93IG5vdyBicm93biBjb3c= + dest: '{{ remote_tmp_dir }}\output.txt' register: http_download - name: get result of download single file win_stat: - path: '{{test_win_get_url_path}}\web.html' + path: '{{ remote_tmp_dir }}\output.txt' register: http_download_result - name: assert download single file @@ -41,8 +41,8 @@ - name: download single file (idempotent) win_get_url: - url: https://{{test_win_get_url_host}} - dest: '{{test_win_get_url_path}}\web.html' + url: https://{{ httpbin_host }}/base64/SG93IG5vdyBicm93biBjb3c= + dest: '{{ remote_tmp_dir }}\output.txt' register: http_download_again - name: assert download single file (idempotent) @@ -50,10 +50,16 @@ that: - not http_download_again is changed +# Cannot use httpbin as the Last-Modified date is generated dynamically +- name: download file for force=no tests + win_get_url: + url: https://s3.amazonaws.com/ansible-ci-files/test/integration/roles/test_win_get_url/SlimFTPd.exe + dest: '{{ remote_tmp_dir }}\output' + - name: download single file with force no win_get_url: - url: https://{{test_win_get_url_host}} - dest: '{{test_win_get_url_path}}\web.html' + url: https://s3.amazonaws.com/ansible-ci-files/test/integration/roles/test_win_get_url/SlimFTPd.exe + dest: '{{ remote_tmp_dir }}\output' force: no register: http_download_no_force @@ -64,13 +70,14 @@ - name: manually change the content and last modified time on FTP source to older datetime win_shell: | - Set-Content -Path '{{test_win_get_url_path}}\web.html' -Value 'abc' - (Get-Item -Path '{{test_win_get_url_path}}\web.html').LastWriteTime = (Get-Date -Date "01/01/1970") + $path = '{{ remote_tmp_dir }}\output' + Set-Content -Path $path -Value 'abc' + (Get-Item -Path $path).LastWriteTime = (Get-Date -Date "01/01/1970") - name: download newer file with force no win_get_url: - url: https://{{test_win_get_url_host}} - dest: '{{test_win_get_url_path}}\web.html' + url: https://s3.amazonaws.com/ansible-ci-files/test/integration/roles/test_win_get_url/SlimFTPd.exe + dest: '{{ remote_tmp_dir }}\output' force: no register: http_download_newer_no_force @@ -81,13 +88,13 @@ - name: download file to directory win_get_url: - url: https://{{test_win_get_url_host}} - dest: '{{test_win_get_url_path}}' + url: https://{{ httpbin_host }}/image/png + dest: '{{ remote_tmp_dir }}' register: http_download_to_directory - name: get result of download to directory win_stat: - path: '{{test_win_get_url_path}}\{{test_win_get_url_host}}' + path: '{{ remote_tmp_dir }}\png' register: http_download_to_directory_result - name: assert download file to directory @@ -98,13 +105,15 @@ - name: download to path with env var win_get_url: - url: https://{{test_win_get_url_host}} - dest: '%{{test_win_get_url_env_var}}%\http-env.html' + url: https://{{ httpbin_host }}/image/jpeg + dest: '%TEST_WIN_GET_URL%\jpeg.jpg' register: http_download_with_env + environment: + TEST_WIN_GET_URL: '{{ remote_tmp_dir }}' - name: get result of download to path with env var win_stat: - path: '{{test_win_get_url_path}}\http-env.html' + path: '{{ remote_tmp_dir }}\jpeg.jpg' register: http_download_with_env_result - name: assert download to path with env var @@ -115,8 +124,8 @@ - name: fail when link returns 404 win_get_url: - url: https://{{test_win_get_url_host}}/skynet_module.html - dest: '{{test_win_get_url_path}}\skynet_module.html' + url: https://{{ httpbin_host }}/status/404 + dest: '{{ remote_tmp_dir }}\skynet_module.html' ignore_errors: yes register: fail_download_404 @@ -129,7 +138,66 @@ - name: fail when dest is an invalid path win_get_url: - url: https://{{test_win_get_url_host}} + url: https://{{ httpbin_host }}/base64/YQ== dest: Q:\Filez\Cyberdyne.html register: fail_invalid_path failed_when: '"The path ''Q:\Filez'' does not exist for destination ''Q:\Filez\Cyberdyne.html''" not in fail_invalid_path.msg' + +- name: test basic authentication + win_get_url: + url: http://{{ httpbin_host }}/basic-auth/username/password + dest: '{{ remote_tmp_dir }}\basic.txt' + url_username: username + url_password: password + register: basic_auth + +- name: assert test basic authentication + assert: + that: + - basic_auth is changed + - basic_auth.status_code == 200 + +# httpbin hidden-basic-auth returns 404 not found on auth failure which stops the automatic auth handler from working. +# Setting force_basic_auth=yes means the Basic auth header is sent in the original request not after a 401 response +- name: test force basic authentication + win_get_url: + url: http://{{ httpbin_host }}/hidden-basic-auth/username/password + dest: '{{ remote_tmp_dir }}\force-basic.txt' + url_username: username + url_password: password + force_basic_auth: yes + register: force_basic_auth + +- name: assert test force basic auth + assert: + that: + - force_basic_auth is changed + - force_basic_auth.status_code == 200 + +- name: timeout request + win_get_url: + url: https://{{ httpbin_host }}/delay/7 + dest: '{{ remote_tmp_dir }}\timeout.txt' + timeout: 3 + register: timeout_req + failed_when: timeout_req.msg != "Error requesting 'https://" + httpbin_host + "/delay/7'. The operation has timed out" + +- name: send request with headers + win_get_url: + url: https://{{ httpbin_host }}/headers + dest: '{{ remote_tmp_dir }}\headers.txt' + headers: + testing: 123 + register: headers + +- name: get result of send request with headers + slurp: + path: '{{ remote_tmp_dir }}\headers.txt' + register: headers_actual + +- name: assert send request with headers + assert: + that: + - headers is changed + - headers.status_code == 200 + - (headers_actual.content | b64decode | from_json).headers.Testing == '123' diff --git a/test/integration/targets/win_get_url/templates/slimftpd.conf.tmpl b/test/integration/targets/win_get_url/templates/slimftpd.conf.tmpl index 2b8b2f8744..ff4dda9b06 100644 --- a/test/integration/targets/win_get_url/templates/slimftpd.conf.tmpl +++ b/test/integration/targets/win_get_url/templates/slimftpd.conf.tmpl @@ -8,14 +8,14 @@ LookupHosts On <User "anonymous"> Password "" - Mount / {{test_win_get_url_path}}\ftp + Mount / "{{ remote_tmp_dir | replace('\\', '\\\\') }}\\ftp" Allow /anon All Deny /user All Deny /user-pass All </User> <User "username"> - Mount / {{test_win_get_url_path}}\ftp + Mount / "{{ remote_tmp_dir | replace('\\', '\\\\') }}\\ftp" Allow /anon All Allow /user All Deny /user-pass All @@ -23,6 +23,6 @@ LookupHosts On <User "userpass"> Password "password" - Mount / {{test_win_get_url_path}}\ftp + Mount / "{{ remote_tmp_dir | replace('\\', '\\\\') }}\\ftp" Allow / All </User> |