summaryrefslogtreecommitdiff
path: root/test/integration/targets/unarchive
diff options
context:
space:
mode:
authorMatt Clay <matt@mystile.com>2016-10-13 09:09:25 -0700
committerGitHub <noreply@github.com>2016-10-13 09:09:25 -0700
commit75e4645ee70434e2706845ca9fe96d5823616eea (patch)
tree360f27f11eeb33ba993ae3f30764589b3981e99c /test/integration/targets/unarchive
parent374e4348e4d76cff7c0e6e41cb2368799c0ae443 (diff)
downloadansible-75e4645ee70434e2706845ca9fe96d5823616eea.tar.gz
Migrate Linux CI roles to test targets. (#17997)
Diffstat (limited to 'test/integration/targets/unarchive')
-rw-r--r--test/integration/targets/unarchive/files/foo.txt1
-rw-r--r--test/integration/targets/unarchive/files/test-unarchive-nonascii-くらとみ.tar.gzbin0 -> 4947 bytes
-rw-r--r--test/integration/targets/unarchive/meta/main.yml3
-rw-r--r--test/integration/targets/unarchive/tasks/main.yml427
4 files changed, 431 insertions, 0 deletions
diff --git a/test/integration/targets/unarchive/files/foo.txt b/test/integration/targets/unarchive/files/foo.txt
new file mode 100644
index 0000000000..7c6ded14ec
--- /dev/null
+++ b/test/integration/targets/unarchive/files/foo.txt
@@ -0,0 +1 @@
+foo.txt
diff --git a/test/integration/targets/unarchive/files/test-unarchive-nonascii-くらとみ.tar.gz b/test/integration/targets/unarchive/files/test-unarchive-nonascii-くらとみ.tar.gz
new file mode 100644
index 0000000000..4882b9207a
--- /dev/null
+++ b/test/integration/targets/unarchive/files/test-unarchive-nonascii-くらとみ.tar.gz
Binary files differ
diff --git a/test/integration/targets/unarchive/meta/main.yml b/test/integration/targets/unarchive/meta/main.yml
new file mode 100644
index 0000000000..1050c23ce3
--- /dev/null
+++ b/test/integration/targets/unarchive/meta/main.yml
@@ -0,0 +1,3 @@
+dependencies:
+ - prepare_tests
+
diff --git a/test/integration/targets/unarchive/tasks/main.yml b/test/integration/targets/unarchive/tasks/main.yml
new file mode 100644
index 0000000000..e17e5b2ccb
--- /dev/null
+++ b/test/integration/targets/unarchive/tasks/main.yml
@@ -0,0 +1,427 @@
+# Test code for the unarchive module.
+# (c) 2014, Richard Isaacson <richard.c.isaacson@gmail.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/>.
+# Make sure we start fresh
+
+- name: Ensure zip is present to create test archive (yum)
+ yum: name=zip state=latest
+ when: ansible_pkg_mgr == 'yum'
+
+ #- name: Ensure zip is present to create test archive (dnf)
+ # dnf: name=zip state=latest
+ # when: ansible_pkg_mgr == 'dnf'
+
+- name: Ensure zip is present to create test archive (apt)
+ apt: name=zip state=latest
+ when: ansible_pkg_mgr == 'apt'
+
+- name: prep our file
+ copy: src=foo.txt dest={{output_dir}}/foo-unarchive.txt
+
+- name: prep a tar file
+ shell: tar cvf test-unarchive.tar foo-unarchive.txt chdir={{output_dir}}
+
+- name: prep a tar.gz file
+ shell: tar czvf test-unarchive.tar.gz foo-unarchive.txt chdir={{output_dir}}
+
+- name: prep a zip file
+ shell: zip test-unarchive.zip foo-unarchive.txt chdir={{output_dir}}
+
+- name: prep a subdirectory
+ file: path={{output_dir}}/unarchive-dir state=directory
+
+- name: prep our file
+ copy: src=foo.txt dest={{output_dir}}/unarchive-dir/foo-unarchive.txt
+
+- name: prep a tar.gz file with directory
+ shell: tar czvf test-unarchive-dir.tar.gz unarchive-dir chdir={{output_dir}}
+
+- name: create our tar unarchive destination
+ file: path={{output_dir}}/test-unarchive-tar state=directory
+
+- name: unarchive a tar file
+ unarchive: src={{output_dir}}/test-unarchive.tar dest="{{output_dir | expanduser}}/test-unarchive-tar" remote_src=yes
+ register: unarchive01
+
+- name: verify that the file was marked as changed
+ assert:
+ that:
+ - "unarchive01.changed == true"
+
+- name: verify that the file was unarchived
+ file: path={{output_dir}}/test-unarchive-tar/foo-unarchive.txt state=file
+
+- name: remove our tar unarchive destination
+ file: path={{output_dir}}/test-unarchive-tar state=absent
+
+- name: create our tar.gz unarchive destination
+ file: path={{output_dir}}/test-unarchive-tar-gz state=directory
+
+- name: unarchive a tar.gz file
+ unarchive: src={{output_dir}}/test-unarchive.tar.gz dest={{output_dir | expanduser}}/test-unarchive-tar-gz remote_src=yes
+ register: unarchive02
+
+- name: verify that the file was marked as changed
+ assert:
+ that:
+ - "unarchive02.changed == true"
+ # Verify that no file list is generated
+ - "'files' not in unarchive02"
+
+- name: verify that the file was unarchived
+ file: path={{output_dir}}/test-unarchive-tar-gz/foo-unarchive.txt state=file
+
+- name: remove our tar.gz unarchive destination
+ file: path={{output_dir}}/test-unarchive-tar-gz state=absent
+
+- name: create our tar.gz unarchive destination for creates
+ file: path={{output_dir}}/test-unarchive-tar-gz state=directory
+
+- name: unarchive a tar.gz file with creates set
+ unarchive: src={{output_dir}}/test-unarchive.tar.gz dest={{output_dir | expanduser}}/test-unarchive-tar-gz remote_src=yes creates={{output_dir}}/test-unarchive-tar-gz/foo-unarchive.txt
+ register: unarchive02b
+
+- name: verify that the file was marked as changed
+ assert:
+ that:
+ - "unarchive02b.changed == true"
+
+- name: verify that the file was unarchived
+ file: path={{output_dir}}/test-unarchive-tar-gz/foo-unarchive.txt state=file
+
+- name: unarchive a tar.gz file with creates over an existing file
+ unarchive: src={{output_dir}}/test-unarchive.tar.gz dest={{output_dir | expanduser}}/test-unarchive-tar-gz remote_src=yes creates={{output_dir}}/test-unarchive-tar-gz/foo-unarchive.txt
+ register: unarchive02c
+
+- name: verify that the file was not marked as changed
+ assert:
+ that:
+ - "unarchive02c.changed == false"
+
+- name: unarchive a tar.gz file with creates over an existing file using complex_args
+ unarchive:
+ src: "{{output_dir}}/test-unarchive.tar.gz"
+ dest: "{{output_dir | expanduser}}/test-unarchive-tar-gz"
+ remote_src: yes
+ creates: "{{output_dir}}/test-unarchive-tar-gz/foo-unarchive.txt"
+ register: unarchive02d
+
+- name: verify that the file was not marked as changed
+ assert:
+ that:
+ - "unarchive02d.changed == false"
+
+- name: remove our tar.gz unarchive destination
+ file: path={{output_dir}}/test-unarchive-tar-gz state=absent
+
+- name: create our zip unarchive destination
+ file: path={{output_dir}}/test-unarchive-zip state=directory
+
+- name: unarchive a zip file
+ unarchive: src={{output_dir}}/test-unarchive.zip dest={{output_dir | expanduser}}/test-unarchive-zip remote_src=yes list_files=True
+ register: unarchive03
+
+- name: verify that the file was marked as changed
+ assert:
+ that:
+ - "unarchive03.changed == true"
+ # Verify that file list is generated
+ - "'files' in unarchive03"
+ - "{{unarchive03['files']| length}} == 1"
+ - "'foo-unarchive.txt' in unarchive03['files']"
+
+- name: verify that the file was unarchived
+ file: path={{output_dir}}/test-unarchive-zip/foo-unarchive.txt state=file
+
+- name: remove our zip unarchive destination
+ file: path={{output_dir}}/test-unarchive-zip state=absent
+
+- name: remove our test file for the archive
+ file: path={{output_dir}}/foo-unarchive.txt state=absent
+
+- name: check if /tmp/foo-unarchive.text exists
+ stat: path=/tmp/foo-unarchive.txt
+ ignore_errors: True
+ register: unarchive04
+
+- name: fail if the proposed destination file exists for safey
+ fail: msg="/tmp/foo-unarchive.txt already exists, aborting"
+ when: unarchive04.stat.exists
+
+- name: try unarchiving to /tmp
+ unarchive: src={{output_dir}}/test-unarchive.tar.gz dest=/tmp remote_src=yes
+ register: unarchive05
+
+- name: verify that the file was marked as changed
+ assert:
+ that:
+ - "unarchive05.changed == true"
+
+- name: verify that the file was unarchived
+ file: path=/tmp/foo-unarchive.txt state=file
+
+- name: remove our unarchive destination
+ file: path=/tmp/foo-unarchive.txt state=absent
+
+- name: create our unarchive destination
+ file: path={{output_dir}}/test-unarchive-tar-gz state=directory
+
+- name: unarchive and set mode to 0600
+ unarchive:
+ src: "{{ output_dir }}/test-unarchive.tar.gz"
+ dest: "{{ output_dir | expanduser }}/test-unarchive-tar-gz"
+ remote_src: yes
+ mode: "u+rwX,g-rwx,o-rwx"
+ list_files: True
+ register: unarchive06
+
+- name: Test that the file modes were changed
+ stat:
+ path: "{{ output_dir | expanduser }}/test-unarchive-tar-gz/foo-unarchive.txt"
+ register: unarchive06_stat
+
+- name: Test that the file modes were changed
+ assert:
+ that:
+ - "unarchive06.changed == true"
+ - "unarchive06_stat.stat.mode == '0600'"
+ # Verify that file list is generated
+ - "'files' in unarchive06"
+ - "{{unarchive06['files']| length}} == 1"
+ - "'foo-unarchive.txt' in unarchive06['files']"
+
+- name: remove our tar.gz unarchive destination
+ file: path={{ output_dir }}/test-unarchive-tar-gz state=absent
+
+- name: create our unarchive destination
+ file: path={{output_dir}}/test-unarchive-tar-gz state=directory
+
+
+- name: unarchive over existing extraction and set mode to 0644
+ unarchive:
+ src: "{{ output_dir }}/test-unarchive.tar.gz"
+ dest: "{{ output_dir | expanduser }}/test-unarchive-tar-gz"
+ remote_src: yes
+ mode: "u+rwX,g-wx,o-wx,g+r,o+r"
+ register: unarchive06_2
+
+- name: Test that the file modes were changed
+ stat:
+ path: "{{ output_dir | expanduser }}/test-unarchive-tar-gz/foo-unarchive.txt"
+ register: unarchive06_2_stat
+
+- debug: var=unarchive06_2_stat.stat.mode
+- name: Test that the files were changed
+ assert:
+ that:
+ - "unarchive06_2.changed == true"
+ - "unarchive06_2_stat.stat.mode == '0644'"
+
+- name: Repeat the last request to verify no changes
+ unarchive:
+ src: "{{ output_dir }}/test-unarchive.tar.gz"
+ dest: "{{ output_dir | expanduser }}/test-unarchive-tar-gz"
+ remote_src: yes
+ mode: "u+rwX,g-wx,o-wx,g+r,o+r"
+ list_files: True
+ register: unarchive07
+
+- name: Test that the files were not changed
+ assert:
+ that:
+ - "unarchive07.changed == false"
+ # Verify that file list is generated
+ - "'files' in unarchive07"
+ - "{{unarchive07['files']| length}} == 1"
+ - "'foo-unarchive.txt' in unarchive07['files']"
+
+- name: remove our tar.gz unarchive destination
+ file: path={{ output_dir }}/test-unarchive-tar-gz state=absent
+
+
+- name: create our unarchive destination
+ file: path={{output_dir}}/test-unarchive-tar-gz state=directory
+
+
+- name: create a directory with quotable chars
+ file: path="{{ output_dir }}/test-quotes~root" state=directory
+
+- name: unarchive into directory with quotable chars
+ unarchive:
+ src: "{{ output_dir }}/test-unarchive.tar.gz"
+ dest: "{{ output_dir | expanduser }}/test-quotes~root"
+ remote_src: yes
+ register: unarchive08
+
+- name: Test that unarchive succeeded
+ assert:
+ that:
+ - "unarchive08.changed == true"
+
+- name: unarchive into directory with quotable chars a second time
+ unarchive:
+ src: "{{ output_dir }}/test-unarchive.tar.gz"
+ dest: "{{ output_dir | expanduser }}/test-quotes~root"
+ remote_src: yes
+ register: unarchive09
+
+- name: Test that unarchive did nothing
+ assert:
+ that:
+ - "unarchive09.changed == false"
+
+- name: remove quotable chars test
+ file: path="{{ output_dir }}/test-quotes~root" state=absent
+
+- name: create our unarchive destination
+ file:
+ path: "{{ output_dir }}/test-unarchive-nonascii-くらとみ-tar-gz"
+ state: directory
+
+- name: test that unarchive works with an archive that contains non-ascii filenames
+ unarchive:
+ # Both the filename of the tarball and the filename inside the tarball have
+ # nonascii chars
+ src: "test-unarchive-nonascii-くらとみ.tar.gz"
+ dest: "{{ output_dir }}/test-unarchive-nonascii-くらとみ-tar-gz"
+ mode: "u+rwX,go+rX"
+ remote_src: no
+ register: nonascii_result0
+
+- name: Check that file is really there
+ stat:
+ path: "{{ output_dir | expanduser }}/test-unarchive-nonascii-くらとみ-tar-gz/storage/àâæçéèïîôœ(copy)!@#$%^&-().jpg"
+ register: nonascii_stat0
+
+- name: Assert that nonascii tests succeeded
+ assert:
+ that:
+ - "nonascii_result0.changed == true"
+ - "nonascii_stat0.stat.exists == true"
+
+- name: remove nonascii test
+ file: path="{{ output_dir }}/test-unarchive-nonascii-くらとみ-tar-gz" state=absent
+
+# Test that unarchiving is performed if files are missing
+# https://github.com/ansible/ansible-modules-core/issues/1064
+- name: create our unarchive destination
+ file: path={{output_dir}}/test-unarchive-tar-gz state=directory
+
+- name: unarchive a tar that has directories
+ unarchive:
+ src: "{{ output_dir }}/test-unarchive-dir.tar.gz"
+ dest: "{{ output_dir }}/test-unarchive-tar-gz"
+ mode: "0700"
+ remote_src: yes
+ register: unarchive10
+
+- name: Test that unarchive succeeded
+ assert:
+ that:
+ - "unarchive10.changed == true"
+
+- name: Change the mode of the toplevel dir
+ file:
+ path: "{{ output_dir }}/test-unarchive-tar-gz/unarchive-dir"
+ mode: 0701
+
+- name: Remove a file from the extraction point
+ file:
+ path: "{{ output_dir }}/test-unarchive-tar-gz/unarchive-dir/foo-unarchive.txt"
+ state: absent
+
+- name: unarchive a tar that has directories
+ unarchive:
+ src: "{{ output_dir }}/test-unarchive-dir.tar.gz"
+ dest: "{{ output_dir }}/test-unarchive-tar-gz"
+ mode: "0700"
+ remote_src: yes
+ register: unarchive10_1
+
+- name: Test that unarchive succeeded
+ assert:
+ that:
+ - "unarchive10_1.changed == true"
+
+- name: remove our tar.gz unarchive destination
+ file: path={{ output_dir }}/test-unarchive-tar-gz state=absent
+
+#
+# Symlink tests
+#
+
+- name: Create a destination dir
+ file:
+ path: "{{ output_dir }}/test-unarchive-tar-gz"
+ state: directory
+
+- name: Create a symlink to the detination dir
+ file:
+ path: "{{ output_dir }}/link-to-unarchive-dir"
+ src: "{{ output_dir }}/test-unarchive-tar-gz"
+ state: "link"
+
+- name: test that unarchive works when dest is a symlink to a dir
+ unarchive:
+ src: "{{ output_dir }}/test-unarchive.tar.gz"
+ dest: "{{ output_dir | expanduser }}/link-to-unarchive-dir"
+ mode: "u+rwX,go+rX"
+ remote_src: yes
+ register: unarchive_11
+
+- name: Check that file is really there
+ stat:
+ path: "{{ output_dir | expanduser }}/test-unarchive-tar-gz/foo-unarchive.txt"
+ register: unarchive11_stat0
+
+- name: Assert that unarchive when dest is a symlink to a dir worked
+ assert:
+ that:
+ - "unarchive_11.changed == true"
+ - "unarchive11_stat0.stat.exists == true"
+
+- name: remove our tar.gz unarchive destination
+ file: path={{ output_dir }}/test-unarchive-tar-gz state=absent
+
+
+- name: Create a file
+ file:
+ path: "{{ output_dir }}/test-unarchive-tar-gz"
+ state: touch
+
+- name: Create a symlink to the file
+ file:
+ path: "{{ output_dir }}/link-to-unarchive-file"
+ src: "{{ output_dir }}/test-unarchive-tar-gz"
+ state: "link"
+
+- name: test that unarchive fails when dest is a link to a file
+ unarchive:
+ src: "{{ output_dir }}/test-unarchive.tar.gz"
+ dest: "{{ output_dir | expanduser }}/link-to-unarchive-file"
+ mode: "u+rwX,go+rX"
+ remote_src: yes
+ ignore_errors: True
+ register: unarchive_12
+
+- name: Assert that unarchive when dest is a file failed
+ assert:
+ that:
+ - "unarchive_12.failed == true"
+
+- name: remove our tar.gz unarchive destination
+ file: path={{ output_dir }}/test-unarchive-tar-gz state=absent