Skip to content

Commit

Permalink
Fix include_role unit tests (ansible#31920)
Browse files Browse the repository at this point in the history
* Ensure include_role unit tests check something

This is not the case: get_tasks_vars doesn't yield

* Fix include_role unit tests

Since e609618, include_role are not
static anymore.
  • Loading branch information
pilou- authored and jimi-c committed Nov 2, 2017
1 parent 6b6df43 commit 43914b3
Showing 1 changed file with 31 additions and 10 deletions.
41 changes: 31 additions & 10 deletions test/units/playbook/role/test_include_role.py
Expand Up @@ -23,22 +23,14 @@
from ansible.compat.tests.mock import patch

from ansible.playbook import Play
from ansible.playbook.role_include import IncludeRole
from ansible.playbook.task import Task
from ansible.vars.manager import VariableManager

from units.mock.loader import DictDataLoader
from units.mock.path import mock_unfrackpath_noop


def flatten_tasks(tasks):
for task in tasks:
if isinstance(task, Task):
yield task
else:
for t in flatten_tasks(task.block):
yield t


class TestIncludeRole(unittest.TestCase):

def setUp(self):
Expand Down Expand Up @@ -97,8 +89,21 @@ def setUp(self):
def tearDown(self):
pass

def flatten_tasks(self, tasks):
for task in tasks:
if isinstance(task, IncludeRole):
blocks, handlers = task.get_block_list(loader=self.loader)
for block in blocks:
for t in self.flatten_tasks(block.block):
yield t
elif isinstance(task, Task):
yield task
else:
for t in self.flatten_tasks(task.block):
yield t

def get_tasks_vars(self, play, tasks):
for task in flatten_tasks(tasks):
for task in self.flatten_tasks(tasks):
role = task._role
if not role:
continue
Expand All @@ -122,9 +127,12 @@ def test_simple(self):
), loader=self.loader, variable_manager=self.var_manager)

tasks = play.compile()
tested = False
for role, task_vars in self.get_tasks_vars(play, tasks):
tested = True
self.assertEqual(task_vars.get('l3_variable'), 'l3-main')
self.assertEqual(task_vars.get('test_variable'), 'l3-main')
self.assertTrue(tested)

@patch('ansible.playbook.role.definition.unfrackpath',
mock_unfrackpath_noop)
Expand All @@ -140,9 +148,12 @@ def test_simple_alt_files(self):
loader=self.loader, variable_manager=self.var_manager)

tasks = play.compile()
tested = False
for role, task_vars in self.get_tasks_vars(play, tasks):
tested = True
self.assertEqual(task_vars.get('l3_variable'), 'l3-alt')
self.assertEqual(task_vars.get('test_variable'), 'l3-alt')
self.assertTrue(tested)

@patch('ansible.playbook.role.definition.unfrackpath',
mock_unfrackpath_noop)
Expand All @@ -165,7 +176,9 @@ def test_nested(self):
), loader=self.loader, variable_manager=self.var_manager)

tasks = play.compile()
expected_roles = ['l1', 'l2', 'l3']
for role, task_vars in self.get_tasks_vars(play, tasks):
expected_roles.remove(role)
# Outer-most role must not have variables from inner roles yet
if role == 'l1':
self.assertEqual(task_vars.get('l1_variable'), 'l1-main')
Expand All @@ -184,6 +197,9 @@ def test_nested(self):
self.assertEqual(task_vars.get('l2_variable'), 'l2-main')
self.assertEqual(task_vars.get('l3_variable'), 'l3-main')
self.assertEqual(task_vars.get('test_variable'), 'l3-main')
else:
self.fail()
self.assertFalse(expected_roles)

@patch('ansible.playbook.role.definition.unfrackpath',
mock_unfrackpath_noop)
Expand All @@ -206,7 +222,9 @@ def test_nested_alt_files(self):
), loader=self.loader, variable_manager=self.var_manager)

tasks = play.compile()
expected_roles = ['l1', 'l2', 'l3']
for role, task_vars in self.get_tasks_vars(play, tasks):
expected_roles.remove(role)
# Outer-most role must not have variables from inner roles yet
if role == 'l1':
self.assertEqual(task_vars.get('l1_variable'), 'l1-alt')
Expand All @@ -225,3 +243,6 @@ def test_nested_alt_files(self):
self.assertEqual(task_vars.get('l2_variable'), 'l2-alt')
self.assertEqual(task_vars.get('l3_variable'), 'l3-alt')
self.assertEqual(task_vars.get('test_variable'), 'l3-alt')
else:
self.fail()
self.assertFalse(expected_roles)

0 comments on commit 43914b3

Please sign in to comment.