summaryrefslogtreecommitdiff
path: root/test/integration/targets/win_get_url
diff options
context:
space:
mode:
authorViktor Utkin <vutkin@users.noreply.github.com>2019-03-05 13:37:00 +0300
committerJordan Borean <jborean93@gmail.com>2019-03-05 20:37:00 +1000
commitb2a7561a7f7863f597c1a7653b9d1ff02d218676 (patch)
tree53399134ae9f0ac2aa3427403ac978a03669cc20 /test/integration/targets/win_get_url
parentaafc5538bcc4ab21713fa290ab8fb4ac20c63032 (diff)
downloadansible-b2a7561a7f7863f597c1a7653b9d1ff02d218676.tar.gz
[win_get_url] feature: Add support `checksum` to module win_get_url (#51986)
* set valid_until equal to current time + spot_wait_timeout * Add checksum check for downloaded file. * refactoring * fix typo * add fixes * mart try,catch handling * revert lib/ansible/modules/cloud/amazon/ec2.py from upstream * refactoring * remove empty lines * add checksum verification for existing file * fix current file check * refactoring destination file check * add handling exceptions * refactoring * Added download file hash data from url * fix string aligning * fix bug with uri * Added get hash from multy-string file * Added URI support for checksum file location * refactoing * Remove any non-alphanumeric characters for hash from url * fix discussions; add support for PS3 * refactoring * add size return value * checkout from upstream for lib/ansible/modules/cloud/amazon/ec2.py * add Ansible.ModuleUtils.Legacy support; refactoring * Copyright added * Checking files size before and after downloading added. * remove unused code * Corrected regexp for dotted slashed file name prefix in hash-file * hotfix typo error; add int tests * remove legacy module support; split checksum to checksum, checksum_algorithm, checksum_url * changed default hash algorithm * Fixed case for ContentLength = -1 * Old comment removed * fix typo * Remove file size check before downloading * add alias to ; fix tests * adjust tests; fix lint warnings from PSScritpAnalyzer * workaround for bug in win_chocolatey module on win2008 * remove win_get_url.ps1 from /test/sanity/pslint/ignore.txt * add checksum_algorithm as retuen value * first normalise before return Result * resolve discussions Signed-off-by: Viktor Utkin <viktor.utkin7@yandex.ru> * fix discussions fix http tests as discussed * fix last discussions * Reduce code duplication and add idempotency check * fix sanity issue and remove testing code * move back to using tmp file for checksum comparison
Diffstat (limited to 'test/integration/targets/win_get_url')
-rw-r--r--test/integration/targets/win_get_url/defaults/main.yml3
-rw-r--r--test/integration/targets/win_get_url/tasks/main.yml16
-rw-r--r--test/integration/targets/win_get_url/tasks/tests_checksum.yml202
-rw-r--r--test/integration/targets/win_get_url/tasks/tests_url.yml17
4 files changed, 232 insertions, 6 deletions
diff --git a/test/integration/targets/win_get_url/defaults/main.yml b/test/integration/targets/win_get_url/defaults/main.yml
index 4ee191003c..54976cfc49 100644
--- a/test/integration/targets/win_get_url/defaults/main.yml
+++ b/test/integration/targets/win_get_url/defaults/main.yml
@@ -2,3 +2,6 @@
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/tasks/main.yml b/test/integration/targets/win_get_url/tasks/main.yml
index 8ba5cc4533..9fa8f22870 100644
--- a/test/integration/targets/win_get_url/tasks/main.yml
+++ b/test/integration/targets/win_get_url/tasks/main.yml
@@ -1,8 +1,12 @@
---
- name: ensure testing folder is present
win_file:
- path: '{{test_win_get_url_path}}'
+ path: '{{ item }}'
state: directory
+ loop:
+ - '{{ test_win_get_url_path }}'
+ - '{{ remote_http_path }}'
+ - '{{ remote_tmp_path }}'
- name: copy across testing files
win_copy:
@@ -41,6 +45,9 @@
- name: run FTP tests
include_tasks: tests_ftp.yml
+ - name: run checksum tests
+ include_tasks: tests_checksum.yml
+
always:
- name: remove SlimFTPd service
win_service:
@@ -53,7 +60,10 @@
level: machine
state: absent
- - name: remove testing folder
+ - name: remove testing folders
win_file:
- path: '{{test_win_get_url_path}}'
+ 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
new file mode 100644
index 0000000000..e53ca3057a
--- /dev/null
+++ b/test/integration/targets/win_get_url/tasks/tests_checksum.yml
@@ -0,0 +1,202 @@
+---
+- 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
+ win_get_url:
+ url: 'ftp://localhost/anon/27617.txt'
+ dest: '{{ remote_tmp_path }}'
+ checksum_url: 'ftp://localhost/anon/sha1sum.txt'
+ force: True
+ register: result_sha1
+
+- name: download src with sha1 checksum value
+ win_get_url:
+ url: 'ftp://localhost/anon/27617.txt'
+ dest: '{{ remote_tmp_path }}'
+ checksum: 'a97e6837f60cec6da4491bab387296bbcd72bdba'
+ force: True
+ register: result_sha1_alt
+
+- win_stat:
+ path: '{{ remote_tmp_path }}\27617.txt'
+ register: stat_result_sha1
+
+- 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'
+ checksum_algorithm: sha256
+ force: True
+ register: result_sha256
+
+- win_stat:
+ path: '{{ remote_tmp_path }}\27617.txt'
+ register: stat_result_sha256
+
+- name: download src with sha256 checksum url with dot leading paths
+ 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'
+ checksum_algorithm: sha256
+ force: True
+ register: result_sha256_with_dot
+
+- 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
+ 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'
+ checksum_algorithm: sha256
+ force: False
+ register: result_sha256_no_force
+
+- name: assert download single file with force no
+ 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
+ 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
+ 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
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 d8706f633f..539aba6a63 100644
--- a/test/integration/targets/win_get_url/tasks/tests_url.yml
+++ b/test/integration/targets/win_get_url/tasks/tests_url.yml
@@ -39,7 +39,16 @@
- http_download.dest
- http_download_result.stat.exists
-# TODO: add check for idempotent run once it is added with force: yes
+- name: download single file (idempotent)
+ win_get_url:
+ url: https://{{test_win_get_url_host}}
+ dest: '{{test_win_get_url_path}}\web.html'
+ register: http_download_again
+
+- name: assert download single file (idempotent)
+ assert:
+ that:
+ - not http_download_again is changed
- name: download single file with force no
win_get_url:
@@ -53,8 +62,10 @@
that:
- http_download_no_force is not changed
-- name: manually change last modified time on FTP source to older datetime
- win_shell: (Get-Item -Path '{{test_win_get_url_path}}\web.html').LastWriteTime = (Get-Date -Date "01/01/1970")
+- 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")
- name: download newer file with force no
win_get_url: