From d29da4cba1d9406a337ec01de26b60627a324ebf Mon Sep 17 00:00:00 2001 From: James Tanner Date: Fri, 21 Feb 2014 14:26:34 -0500 Subject: [PATCH] Add iterator tests --- test/integration/non_destructive.yml | 1 + .../roles/test_iterators/meta/main.yml | 3 + .../roles/test_iterators/tasks/main.yml | 196 ++++++++++++++++++ .../roles/test_iterators/vars/main.yml | 9 + 4 files changed, 209 insertions(+) create mode 100644 test/integration/roles/test_iterators/meta/main.yml create mode 100644 test/integration/roles/test_iterators/tasks/main.yml create mode 100644 test/integration/roles/test_iterators/vars/main.yml diff --git a/test/integration/non_destructive.yml b/test/integration/non_destructive.yml index 91e86157d9..519879940b 100644 --- a/test/integration/non_destructive.yml +++ b/test/integration/non_destructive.yml @@ -31,4 +31,5 @@ - { role: test_async, tags: test_async } - { role: test_handlers, tags: test_handlers } - { role: test_lookups, tags: test_lookups } + - { role: test_iterators, tags: test_iterators } diff --git a/test/integration/roles/test_iterators/meta/main.yml b/test/integration/roles/test_iterators/meta/main.yml new file mode 100644 index 0000000000..1050c23ce3 --- /dev/null +++ b/test/integration/roles/test_iterators/meta/main.yml @@ -0,0 +1,3 @@ +dependencies: + - prepare_tests + diff --git a/test/integration/roles/test_iterators/tasks/main.yml b/test/integration/roles/test_iterators/tasks/main.yml new file mode 100644 index 0000000000..0352d3c1ae --- /dev/null +++ b/test/integration/roles/test_iterators/tasks/main.yml @@ -0,0 +1,196 @@ +# test code for iterating with lookup plugins +# (c) 2014, James Tanner + +# 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 . + +# WITH_ITEMS + +- name: test with_items + set_fact: "{{ item + '=moo' }}" + with_items: + - 'foo' + - 'bar' + +- debug: var=foo +- debug: var=bar + +- name: verify with_items results + assert: + that: + - "foo == 'moo'" + - "bar == 'moo'" + +# WITH_NESTED + +- name: test with_nested + set_fact: "{{ item.0 + item.1 + '=x' }}" + with_nested: + - [ 'a', 'b' ] + - [ 'c', 'd' ] + +- debug: var=ac +- debug: var=ad +- debug: var=bc +- debug: var=bd + +- name: verify with_nested results + assert: + that: + - "ac == 'x'" + - "ad == 'x'" + - "bc == 'x'" + - "bd == 'x'" + +# WITH_SEQUENCE + +- name: test with_sequence + set_fact: "{{ 'x' + item + '=' + item }}" + with_sequence: start=0 end=3 + +- name: verify with_sequence + assert: + that: + - "x0 == '0'" + - "x1 == '1'" + - "x2 == '2'" + - "x3 == '3'" + +# WITH_RANDOM_CHOICE + +- name: test with_random_choice + set_fact: "{{ 'random=' + item }}" + with_random_choice: + - "foo" + - "bar" + +- name: verify with_random_choice + assert: + that: + - "random in ['foo', 'bar']" + +# WITH_SUBELEMENTS + +- name: test with_subelements + set_fact: "{{ '_'+ item.0.id + item.1 + '=' + item.1 }}" + with_subelements: + - element_data + - the_list + +- name: verify with_subelements results + assert: + that: + - "_xf == 'f'" + - "_xd == 'd'" + - "_ye == 'e'" + - "_yf == 'f'" + +# WITH_TOGETHER + +- name: test with_together + #shell: echo {{ item }} + set_fact: "{{ item.0 + '=' + item.1 }}" + with_together: + - [ 'a', 'b', 'c', 'd' ] + - [ '1', '2', '3', '4' ] + +- name: verify with_together results + assert: + that: + - "a == '1'" + - "b == '2'" + - "c == '3'" + - "d == '4'" + +# WITH_FIRST_FOUND + +- name: create file for test + shell: echo "foo" > {{ output_dir }}/foo1 + +- name: create file for test + shell: echo "bar" > {{ output_dir }}/bar1 + +- name: test with_first_found + #shell: echo {{ item }} + set_fact: "{{ 'first_found=' + item }}" + with_first_found: + - "{{ output_dir + '/does_not_exist' }}" + - "{{ output_dir + '/foo1' }}" + - "{{ output_dir + '/bar1' }}" + +- name: set expected + set_fact: first_expected="{{ output_dir | expanduser + '/foo1' }}" + +- name: set unexpected + set_fact: first_unexpected="{{ output_dir | expanduser + '/bar1' }}" + +- name: verify with_first_found results + assert: + that: + - "first_found == first_expected" + - "first_found != first_unexpected" + +# WITH_LINES + +- name: test with_lines + #shell: echo "{{ item }}" + set_fact: "{{ item + '=set' }}" + with_lines: for i in $(seq 1 5); do echo "l$i" ; done; + +- name: verify with_lines results + assert: + that: + - "l1 == 'set'" + - "l2 == 'set'" + - "l3 == 'set'" + - "l4 == 'set'" + - "l5 == 'set'" + +# WITH_INDEX +- name: create unindexed list + shell: for i in $(seq 1 5); do echo "x" ; done; + register: list_data + +- name: create indexed list + set_fact: "{{ item[1] + item[0]|string + '=set' }}" + with_indexed_items: list_data.stdout_lines + +- name: verify with_indexed_items result + assert: + that: + - "x0 == 'set'" + - "x1 == 'set'" + - "x2 == 'set'" + - "x3 == 'set'" + - "x4 == 'set'" + +# WITH_FLATTENED + +- name: test with_flattened + #shell: echo {{ item + "test" }} + set_fact: "{{ item + '=flattened' }}" + with_flattened: + - [ 'a__' ] + - [ 'b__', ['c__', 'd__'] ] + +- name: verify with_flattened results + assert: + that: + - "a__ == 'flattened'" + - "b__ == 'flattened'" + - "c__ == 'flattened'" + - "d__ == 'flattened'" + + diff --git a/test/integration/roles/test_iterators/vars/main.yml b/test/integration/roles/test_iterators/vars/main.yml new file mode 100644 index 0000000000..cd0078c9a9 --- /dev/null +++ b/test/integration/roles/test_iterators/vars/main.yml @@ -0,0 +1,9 @@ +element_data: + - id: x + the_list: + - "f" + - "d" + - id: y + the_list: + - "e" + - "f"