diff options
author | Matt Clay <matt@mystile.com> | 2016-10-13 09:09:25 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-13 09:09:25 -0700 |
commit | 75e4645ee70434e2706845ca9fe96d5823616eea (patch) | |
tree | 360f27f11eeb33ba993ae3f30764589b3981e99c /test/integration/targets/unarchive | |
parent | 374e4348e4d76cff7c0e6e41cb2368799c0ae443 (diff) | |
download | ansible-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.txt | 1 | ||||
-rw-r--r-- | test/integration/targets/unarchive/files/test-unarchive-nonascii-くらとみ.tar.gz | bin | 0 -> 4947 bytes | |||
-rw-r--r-- | test/integration/targets/unarchive/meta/main.yml | 3 | ||||
-rw-r--r-- | test/integration/targets/unarchive/tasks/main.yml | 427 |
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 Binary files differnew file mode 100644 index 0000000000..4882b9207a --- /dev/null +++ b/test/integration/targets/unarchive/files/test-unarchive-nonascii-くらとみ.tar.gz 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 |