Example #1
0
    def test_dedupe_preserves_order(self):
        """
        Order of dedup'd lists is preserved. This too is a bit hairy to test
        with properties

        """
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'dedup': True,
            'expected_type': 'list',
        }

        list1 = [1, 2, 3]
        list2 = [3, 4, 5]
        list3 = [5, 6, 7]
        task_vars = {
            'var1_whatever__to_merge': list1,
            'var2_whatever__to_merge': list2,
            'var3_whatever__to_merge': list3,
        }

        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)
        merged_var = result['ansible_facts']['merged_var']
        self.assertEqual(merged_var, [1, 2, 3, 4, 5, 6, 7])
Example #2
0
    def test_merge_rec_with_list_dicts(self, dict1, dict2, dict3):
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'expected_type': 'dict',
            'recursive_dict_merge': True,
        }
        task_vars = {
            'var1_whatever__to_merge': dict1,
            'var2_whatever__to_merge': dict2,
            'var3_whatever__to_merge': dict3,
        }

        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)
        merged_var = result['ansible_facts']['merged_var']

        # check all keys are present
        self.assertTrue(
            all([k in merged_var.keys() for k in dict1.keys()+dict2.keys()+dict3.keys()])
        )

        # check all list values are present from all input dicts
        self.assertTrue(
            all(
                [set(dict1[k]).issubset(set(merged_var[k])) for k in dict1.keys()] +
                [set(dict2[k]).issubset(set(merged_var[k])) for k in dict2.keys()] +
                [set(dict3[k]).issubset(set(merged_var[k])) for k in dict3.keys()]
            )
        )
    def test_dedup_unhashable(self):
        """
        Lists with unhashable elements get deduped. This is too hairy to test
        with properties, because... it's inneficient to dup-check lists of
        unhashable things :)

        """
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'dedup': True,
            'expected_type': 'list',
        }
        task_vars = {
            'var1_whatever__to_merge': [
                {'subvar_b': 2},
                {'subvar_c': 3},
            ],
            'var2_whatever__to_merge': [
                {'subvar_a': 1},
                {'subvar_b': 2},
            ],
        }

        possibles = [
            [{'subvar_b': 2}, {'subvar_c': 3}, {'subvar_a': 1}],
            [{'subvar_a': 1}, {'subvar_b': 2}, {'subvar_c': 3}],
        ]

        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)
        merged_var = result['ansible_facts']['merged_var']
        self.assertTrue(
            any([merged_var == x for x in possibles])
        )
Example #4
0
 def test_returns_unchanged(self):
     """Execution returns 'unchanged' status in ansible"""
     task_args = {
         'suffix_to_merge': 'whatever__to_merge',
         'merged_var_name': 'merged_var',
         'expected_type': 'list',
     }
     result = make_and_run_plugin(task_args=task_args, task_vars={})
     self.assertFalse(result['changed'])
Example #5
0
 def test_list_returns_empty_list(self):
     task_args = {
         'suffix_to_merge': 'whatever__to_merge',
         'merged_var_name': 'merged_var',
         'expected_type': 'list',
     }
     expected = {'merged_var': []}
     result = make_and_run_plugin(task_args=task_args, task_vars={})
     self.assertEqual(result['ansible_facts'], expected)
Example #6
0
    def test_dedup_dedups(self, list1, list2, list3):
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'expected_type': 'list',
        }
        task_vars = {
            'var1_whatever__to_merge': list1,
            'var2_whatever__to_merge': list2,
            'var3_whatever__to_merge': list3,
        }

        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)
        merged_var = result['ansible_facts']['merged_var']
        self.assertTrue(len(merged_var) == len(set(merged_var)))
Example #7
0
    def test_render_jinja(self):
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'expected_type': 'list',
        }
        task_vars = {
            'some_var': 'woohoo',
            'some_other_var': 'bar',
            'var1_whatever__to_merge': ['{{ some_var }}'],
            'var2_whatever__to_merge': ['foo{{ some_other_var }}']
        }
        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)
        merged_var = result['ansible_facts']['merged_var']

        self.assertEqual(merged_var, [u'woohoo', u'foobar'])
Example #8
0
    def test_merge_dicts(self, dict1, dict2, dict3):
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'expected_type': 'dict',
        }
        task_vars = {
            'var1_whatever__to_merge': dict1,
            'var2_whatever__to_merge': dict2,
            'var3_whatever__to_merge': dict3,
        }

        expected = merge_dicts([dict1, dict2, dict3])
        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)
        merged_var = result['ansible_facts']['merged_var']
        self.assertEqual(merged_var, expected)
    def test_render_complex_jinja(self):
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'expected_type': 'dict',
            'recursive_dict_merge': True,
        }
        task_vars = {
            'some_var': '{{ {1: 1, 2: 2} }}',
            'some_other_var': '{{ {3:3} }}',
            'var1_whatever__to_merge': {'foo': '{{ some_var }}'},
            'var2_whatever__to_merge': {'foo': '{{ some_other_var }}'},
        }

        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)
        merged_var = result['ansible_facts']['merged_var']
        expected = {'foo': {1: 1, 2: 2, 3: 3}}
        self.assertEqual(expected, merged_var)
Example #10
0
    def test_dedup_includes_all_vals(self, list1, list2, list3):
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'expected_type': 'list',
        }
        task_vars = {
            'var1_whatever__to_merge': list1,
            'var2_whatever__to_merge': list2,
            'var3_whatever__to_merge': list3,
        }

        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)

        merged_var_set = set(result['ansible_facts']['merged_var'])
        list_set = set(list1 + list2 + list3)

        self.assertEqual(merged_var_set, list_set)
Example #11
0
    def test_merge_lists_no_dedup(self, list1, list2, list3):
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'dedup': False,
            'expected_type': 'list',
        }
        task_vars = {
            'var1_whatever__to_merge': list1,
            'var2_whatever__to_merge': list2,
            'var3_whatever__to_merge': list3,
        }

        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)

        merged_var = result['ansible_facts']['merged_var']
        self.assertEqual(
            merged_var, list1 + list2 + list3
        )
    def test_merge_dicts(self, dict1, dict2, dict3):
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'expected_type': 'dict',
        }
        task_vars = {
            'var1_whatever__to_merge': dict1,
            'var2_whatever__to_merge': dict2,
            'var3_whatever__to_merge': dict3,
        }

        possibles = [
            merge_dicts([x, y, z])
            for x, y, z in permutations([dict1, dict2, dict3])
        ]

        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)
        merged_var = result['ansible_facts']['merged_var']
        self.assertTrue(any([merged_var == x for x in possibles]))
    def test_render_nested_jinja(self):
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'expected_type': 'list',
        }
        task_vars = {
            'some_var': 'woohoo',
            'some_other_var': 'bar',
            'yet_another_var': '{{ some_var }}-{{ some_other_var }}',
            'var1_whatever__to_merge': ['{{ some_var }}'],
            'var2_whatever__to_merge': [{'some_key': '{{ yet_another_var }}'}]
        }

        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)
        merged_var = result['ansible_facts']['merged_var']
        self.assertEqual(len(merged_var), 2)

        self.assertIn('woohoo', merged_var)
        self.assertIn({'some_key': u'woohoo-bar'}, merged_var)
    def test_merge_lists_no_dedup(self, list1, list2, list3):
        task_args = {
            'suffix_to_merge': 'whatever__to_merge',
            'merged_var_name': 'merged_var',
            'dedup': False,
            'expected_type': 'list',
        }
        task_vars = {
            'var1_whatever__to_merge': list1,
            'var2_whatever__to_merge': list2,
            'var3_whatever__to_merge': list3,
        }

        result = make_and_run_plugin(task_args=task_args, task_vars=task_vars)

        merged_var = result['ansible_facts']['merged_var']
        possibles = [
            x + y + z for x, y, z in permutations([list1, list2, list3])
        ]

        self.assertTrue(any([merged_var == x for x in possibles]))