summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/fetch/roles/fetch_tests/tasks
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/targets/fetch/roles/fetch_tests/tasks')
-rw-r--r--test/integration/targets/fetch/roles/fetch_tests/tasks/fail_on_missing.yml53
-rw-r--r--test/integration/targets/fetch/roles/fetch_tests/tasks/failures.yml41
-rw-r--r--test/integration/targets/fetch/roles/fetch_tests/tasks/main.yml5
-rw-r--r--test/integration/targets/fetch/roles/fetch_tests/tasks/normal.yml38
-rw-r--r--test/integration/targets/fetch/roles/fetch_tests/tasks/setup.yml46
-rw-r--r--test/integration/targets/fetch/roles/fetch_tests/tasks/symlink.yml13
6 files changed, 196 insertions, 0 deletions
diff --git a/test/integration/targets/fetch/roles/fetch_tests/tasks/fail_on_missing.yml b/test/integration/targets/fetch/roles/fetch_tests/tasks/fail_on_missing.yml
new file mode 100644
index 0000000..d918aae
--- /dev/null
+++ b/test/integration/targets/fetch/roles/fetch_tests/tasks/fail_on_missing.yml
@@ -0,0 +1,53 @@
+- name: Attempt to fetch a non-existent file - do not fail on missing
+ fetch:
+ src: "{{ remote_tmp_dir }}/doesnotexist"
+ dest: "{{ output_dir }}/fetched"
+ fail_on_missing: no
+ register: fetch_missing_nofail
+
+- name: Attempt to fetch a non-existent file - fail on missing
+ fetch:
+ src: "{{ remote_tmp_dir }}/doesnotexist"
+ dest: "{{ output_dir }}/fetched"
+ fail_on_missing: yes
+ register: fetch_missing
+ ignore_errors: yes
+
+- name: Attempt to fetch a non-existent file - fail on missing implicit
+ fetch:
+ src: "{{ remote_tmp_dir }}/doesnotexist"
+ dest: "{{ output_dir }}/fetched"
+ register: fetch_missing_implicit
+ ignore_errors: yes
+
+- name: Attempt to fetch a directory - should not fail but return a message
+ fetch:
+ src: "{{ remote_tmp_dir }}"
+ dest: "{{ output_dir }}/somedir"
+ fail_on_missing: no
+ register: fetch_dir
+
+- name: Attempt to fetch a directory - should fail
+ fetch:
+ src: "{{ remote_tmp_dir }}"
+ dest: "{{ output_dir }}/somedir"
+ fail_on_missing: yes
+ register: failed_fetch_dir
+ ignore_errors: yes
+
+- name: Check fetch missing with failure with implicit fail
+ assert:
+ that:
+ - fetch_missing_nofail.msg is search('ignored')
+ - fetch_missing_nofail is not changed
+ - fetch_missing is failed
+ - fetch_missing is not changed
+ - fetch_missing.msg is search ('remote file does not exist')
+ - fetch_missing_implicit is failed
+ - fetch_missing_implicit is not changed
+ - fetch_missing_implicit.msg is search ('remote file does not exist')
+ - fetch_dir is not changed
+ - fetch_dir.msg is search('is a directory')
+ - failed_fetch_dir is failed
+ - failed_fetch_dir is not changed
+ - failed_fetch_dir.msg is search('is a directory')
diff --git a/test/integration/targets/fetch/roles/fetch_tests/tasks/failures.yml b/test/integration/targets/fetch/roles/fetch_tests/tasks/failures.yml
new file mode 100644
index 0000000..8a6b5b7
--- /dev/null
+++ b/test/integration/targets/fetch/roles/fetch_tests/tasks/failures.yml
@@ -0,0 +1,41 @@
+- name: Fetch with no parameters
+ fetch:
+ register: fetch_no_params
+ ignore_errors: yes
+
+- name: Fetch with incorrect source type
+ fetch:
+ src: [1, 2]
+ dest: "{{ output_dir }}/fetched"
+ register: fetch_incorrect_src
+ ignore_errors: yes
+
+- name: Try to fetch a file inside an inaccessible directory
+ fetch:
+ src: "{{ remote_tmp_dir }}/noaccess/file1"
+ dest: "{{ output_dir }}"
+ register: failed_fetch_no_access
+ become: yes
+ become_user: fetcher
+ become_method: su
+ ignore_errors: yes
+
+- name: Dest is an existing directory name without trailing slash and flat=yes, should fail
+ fetch:
+ src: "{{ remote_tmp_dir }}/orig"
+ dest: "{{ output_dir }}"
+ flat: yes
+ register: failed_fetch_dest_dir
+ ignore_errors: true
+
+- name: Ensure fetch failed
+ assert:
+ that:
+ - fetch_no_params is failed
+ - fetch_no_params.msg is search('src and dest are required')
+ - fetch_incorrect_src is failed
+ - fetch_incorrect_src.msg is search('Invalid type supplied for source')
+ - failed_fetch_no_access is failed
+ - failed_fetch_no_access.msg is search('file is not readable')
+ - failed_fetch_dest_dir is failed
+ - failed_fetch_dest_dir.msg is search('dest is an existing directory')
diff --git a/test/integration/targets/fetch/roles/fetch_tests/tasks/main.yml b/test/integration/targets/fetch/roles/fetch_tests/tasks/main.yml
new file mode 100644
index 0000000..eefe95c
--- /dev/null
+++ b/test/integration/targets/fetch/roles/fetch_tests/tasks/main.yml
@@ -0,0 +1,5 @@
+- import_tasks: setup.yml
+- import_tasks: normal.yml
+- import_tasks: symlink.yml
+- import_tasks: fail_on_missing.yml
+- import_tasks: failures.yml
diff --git a/test/integration/targets/fetch/roles/fetch_tests/tasks/normal.yml b/test/integration/targets/fetch/roles/fetch_tests/tasks/normal.yml
new file mode 100644
index 0000000..6f3ab62
--- /dev/null
+++ b/test/integration/targets/fetch/roles/fetch_tests/tasks/normal.yml
@@ -0,0 +1,38 @@
+- name: Fetch the test file
+ fetch: src={{ remote_tmp_dir }}/orig dest={{ output_dir }}/fetched
+ register: fetched
+
+- name: Fetch a second time to show no changes
+ fetch: src={{ remote_tmp_dir }}/orig dest={{ output_dir }}/fetched
+ register: fetched_again
+
+- name: Fetch the test file in check mode
+ fetch:
+ src: "{{ remote_tmp_dir }}/orig"
+ dest: "{{ output_dir }}/fetched"
+ check_mode: yes
+ register: fetch_check_mode
+
+- name: Fetch with dest ending in path sep
+ fetch:
+ src: "{{ remote_tmp_dir }}/orig"
+ dest: "{{ output_dir }}/"
+ flat: yes
+
+- name: Fetch with dest with relative path
+ fetch:
+ src: "{{ remote_tmp_dir }}/orig"
+ dest: "{{ output_dir[1:] }}"
+ flat: yes
+
+- name: Assert that we fetched correctly
+ assert:
+ that:
+ - fetched is changed
+ - fetched.checksum == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
+ - fetched_again is not changed
+ - fetched_again.checksum == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
+ - fetched.remote_checksum == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
+ - lookup("file", output_dir + "/fetched/" + inventory_hostname + remote_tmp_dir + "/orig") == "test"
+ - fetch_check_mode is skipped
+ - fetch_check_mode.msg is search('not \(yet\) supported')
diff --git a/test/integration/targets/fetch/roles/fetch_tests/tasks/setup.yml b/test/integration/targets/fetch/roles/fetch_tests/tasks/setup.yml
new file mode 100644
index 0000000..83b6093
--- /dev/null
+++ b/test/integration/targets/fetch/roles/fetch_tests/tasks/setup.yml
@@ -0,0 +1,46 @@
+- name: Include system specific variables
+ include_vars: "{{ lookup('first_found', params) }}"
+ vars:
+ params:
+ files:
+ - "{{ ansible_facts.system }}.yml"
+ - default.yml
+ paths:
+ - "{{ role_path }}/vars"
+
+- name: Work-around for locked users on Alpine
+ # see https://github.com/ansible/ansible/issues/68676
+ set_fact:
+ password: '*'
+ when: ansible_distribution == 'Alpine'
+
+- name: Create test user
+ user:
+ name: fetcher
+ create_home: yes
+ group: "{{ _fetch_group | default(omit) }}"
+ groups: "{{ _fetch_additional_groups | default(omit) }}"
+ append: "{{ True if _fetch_additional_groups else False }}"
+ password: "{{ password | default(omit) }}"
+ become: yes
+ notify:
+ - remove test user
+
+- name: Create a file that we can use to fetch
+ copy:
+ content: "test"
+ dest: "{{ remote_tmp_dir }}/orig"
+
+- name: Create symlink to a file that we can fetch
+ file:
+ path: "{{ remote_tmp_dir }}/link"
+ src: "{{ remote_tmp_dir }}/orig"
+ state: "link"
+
+- name: Create an inaccessible directory
+ file:
+ path: "{{ remote_tmp_dir }}/noaccess"
+ state: directory
+ mode: '0600'
+ owner: root
+ become: yes
diff --git a/test/integration/targets/fetch/roles/fetch_tests/tasks/symlink.yml b/test/integration/targets/fetch/roles/fetch_tests/tasks/symlink.yml
new file mode 100644
index 0000000..41d7b35
--- /dev/null
+++ b/test/integration/targets/fetch/roles/fetch_tests/tasks/symlink.yml
@@ -0,0 +1,13 @@
+- name: Fetch the file via a symlink
+ fetch:
+ src: "{{ remote_tmp_dir }}/link"
+ dest: "{{ output_dir }}/fetched-link"
+ register: fetched_symlink
+
+- name: Assert that we fetched correctly
+ assert:
+ that:
+ - fetched_symlink is changed
+ - fetched_symlink.checksum == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
+ - fetched_symlink.remote_checksum == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
+ - 'lookup("file", output_dir + "/fetched-link/" + inventory_hostname + remote_tmp_dir + "/link") == "test"'