diff --git a/test/TestPlayBook.py b/test/TestPlayBook.py index 8a4ceb95843..fcee39db4fd 100644 --- a/test/TestPlayBook.py +++ b/test/TestPlayBook.py @@ -393,6 +393,23 @@ class TestPlaybook(unittest.TestCase): assert utils.jsonify(expected, format=True) == utils.jsonify(actual,format=True) + def test_recursive_copy(self): + pb = 'test/playbook-recursive-copy.yml' + actual = self._run(pb) + + expected = { + "localhost": { + "changed": 65, + "failures": 0, + "ok": 73, + "skipped": 0, + "unreachable": 0 + } + } + + assert utils.jsonify(expected, format=True) == utils.jsonify(actual,format=True) + + def _compare_file_output(self, filename, expected_lines): actual_lines = [] with open(filename) as f: diff --git a/test/playbook-recursive-copy.yml b/test/playbook-recursive-copy.yml new file mode 100644 index 00000000000..a4c6b948d84 --- /dev/null +++ b/test/playbook-recursive-copy.yml @@ -0,0 +1,133 @@ +--- +# To run me manually, use: -i "localhost," +- hosts: localhost + connection: local + gather_facts: no + vars: + - testdir: /tmp/ansible-rcopy + - filesdir: test_recursive_copy/files + tasks: + + # + # First, regression tests for single-file behavior + # + + - name: "src single file, dest file" + command: rm -rf {{testdir}} + - file: state=directory dest={{testdir}} + - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}}/file1 + register: res + - command: test -f {{testdir}}/file1 + - command: test "{{res.changed}}" == "True" + - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}}/file1 + register: res + - command: test "{{res.changed}}" == "False" + + - name: "src single file, dest dir w/trailing slash" + command: rm -rf {{testdir}} + - file: state=directory dest={{testdir}} + - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}}/ + register: res + - command: test -f {{testdir}}/test1 + - command: test "{{res.changed}}" == "True" + - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}}/ + register: res + - command: test "{{res.changed}}" == "False" + + - name: "src single file, dest dir wo/trailing slash - doesn't behave in sane way" + command: rm -rf {{testdir}} + - file: state=directory dest={{testdir}} + - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}} + register: res + - shell: test -f {{testdir}}/test1 + - command: test "{{res.changed}}" == "True" + - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}} + register: res + - command: test "{{res.changed}}" == "False" + + # + # Now, test recursive behavior + # + + - name: "src dir w/trailing slash, dest w/trailing slash" + command: rm -rf {{testdir}} + - file: state=directory dest={{testdir}} + - copy: src={{filesdir}}/subdir/ dest={{testdir}}/ + register: res + - command: test -d {{testdir}}/subdir2 + - command: test -d {{testdir}}/subdir2/subdir3 + - command: test -d {{testdir}}/subdir2/subdir3 + - command: test -f {{testdir}}/subdir2/subdir3/test1 + - command: test -f {{testdir}}/subdir2/subdir3/test2 + - command: test "{{res.changed}}" == "True" + - copy: src={{filesdir}}/subdir/ dest={{testdir}}/ + register: res + - command: test "{{res.changed}}" == "False" + + # Expecting the same behavior + - name: "src dir w/trailing slash, dest wo/trailing slash" + command: rm -rf {{testdir}} + - file: state=directory dest={{testdir}} + - copy: src={{filesdir}}/subdir/ dest={{testdir}} + register: res + - command: test -d {{testdir}}/subdir2 + - command: test -d {{testdir}}/subdir2/subdir3 + - command: test -d {{testdir}}/subdir2/subdir3 + - command: test -f {{testdir}}/subdir2/subdir3/test1 + - command: test -f {{testdir}}/subdir2/subdir3/test2 + - command: test "{{res.changed}}" == "True" + - copy: src={{filesdir}}/subdir/ dest={{testdir}} + register: res + - command: test "{{res.changed}}" == "False" + + - name: "src dir wo/trailing slash, dest w/trailing slash" + command: rm -rf {{testdir}} + - file: state=directory dest={{testdir}} + - copy: src={{filesdir}}/subdir dest={{testdir}}/ + register: res + - command: test -d {{testdir}}/subdir/subdir2 + - command: test -d {{testdir}}/subdir/subdir2/subdir3 + - command: test -d {{testdir}}/subdir/subdir2/subdir3 + - command: test -f {{testdir}}/subdir/subdir2/subdir3/test1 + - command: test -f {{testdir}}/subdir/subdir2/subdir3/test2 + - command: test "{{res.changed}}" == "True" + - copy: src={{filesdir}}/subdir dest={{testdir}}/ + register: res + - command: test "{{res.changed}}" == "False" + + # Expecting the same behavior + - name: "src dir wo/trailing slash, dest wo/trailing slash" + command: rm -rf {{testdir}} + - file: state=directory dest={{testdir}} + - copy: src={{filesdir}}/subdir dest={{testdir}} + register: res + - command: test -d {{testdir}}/subdir/subdir2 + - command: test -d {{testdir}}/subdir/subdir2/subdir3 + - command: test -d {{testdir}}/subdir/subdir2/subdir3 + - command: test -f {{testdir}}/subdir/subdir2/subdir3/test1 + - command: test -f {{testdir}}/subdir/subdir2/subdir3/test2 + - command: test "{{res.changed}}" == "True" + - copy: src={{filesdir}}/subdir dest={{testdir}} + register: res + - command: test "{{res.changed}}" == "False" + + + - name: "Verifying notify handling for recursive files" + command: rm -rf {{testdir}} + - file: state=directory dest={{testdir}} + - copy: src={{filesdir}}/subdir dest={{testdir}} + notify: + - files changed + - meta: flush_handlers + - command: test -f {{testdir}}/notify_fired + + - command: rm {{testdir}}/notify_fired + - copy: src={{filesdir}}/subdir dest={{testdir}} + notify: + - files changed + - meta: flush_handlers + - command: test ! -f {{testdir}}/notify_fired + + handlers: + - name: files changed + command: touch {{testdir}}/notify_fired diff --git a/test/test_recursive_copy/files/subdir/subdir2/subdir3/test1 b/test/test_recursive_copy/files/subdir/subdir2/subdir3/test1 new file mode 100644 index 00000000000..9f71d140ff7 --- /dev/null +++ b/test/test_recursive_copy/files/subdir/subdir2/subdir3/test1 @@ -0,0 +1,2 @@ +test1 + diff --git a/test/test_recursive_copy/files/subdir/subdir2/subdir3/test2 b/test/test_recursive_copy/files/subdir/subdir2/subdir3/test2 new file mode 100644 index 00000000000..4a19b05426d --- /dev/null +++ b/test/test_recursive_copy/files/subdir/subdir2/subdir3/test2 @@ -0,0 +1,2 @@ +test2 +