Fix include_role unit tests (#31920)

* Ensure include_role unit tests check something

This is not the case: get_tasks_vars doesn't yield

* Fix include_role unit tests

Since e609618274, include_role are not
static anymore.
This commit is contained in:
Pilou 2017-11-02 16:36:15 +01:00 committed by James Cammarata
parent 6b6df43eae
commit 43914b3837

View file

@ -23,6 +23,7 @@ from ansible.compat.tests import unittest
from ansible.compat.tests.mock import patch from ansible.compat.tests.mock import patch
from ansible.playbook import Play from ansible.playbook import Play
from ansible.playbook.role_include import IncludeRole
from ansible.playbook.task import Task from ansible.playbook.task import Task
from ansible.vars.manager import VariableManager from ansible.vars.manager import VariableManager
@ -30,15 +31,6 @@ from units.mock.loader import DictDataLoader
from units.mock.path import mock_unfrackpath_noop 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): class TestIncludeRole(unittest.TestCase):
def setUp(self): def setUp(self):
@ -97,8 +89,21 @@ class TestIncludeRole(unittest.TestCase):
def tearDown(self): def tearDown(self):
pass 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): def get_tasks_vars(self, play, tasks):
for task in flatten_tasks(tasks): for task in self.flatten_tasks(tasks):
role = task._role role = task._role
if not role: if not role:
continue continue
@ -122,9 +127,12 @@ class TestIncludeRole(unittest.TestCase):
), loader=self.loader, variable_manager=self.var_manager) ), loader=self.loader, variable_manager=self.var_manager)
tasks = play.compile() tasks = play.compile()
tested = False
for role, task_vars in self.get_tasks_vars(play, tasks): 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('l3_variable'), 'l3-main')
self.assertEqual(task_vars.get('test_variable'), 'l3-main') self.assertEqual(task_vars.get('test_variable'), 'l3-main')
self.assertTrue(tested)
@patch('ansible.playbook.role.definition.unfrackpath', @patch('ansible.playbook.role.definition.unfrackpath',
mock_unfrackpath_noop) mock_unfrackpath_noop)
@ -140,9 +148,12 @@ class TestIncludeRole(unittest.TestCase):
loader=self.loader, variable_manager=self.var_manager) loader=self.loader, variable_manager=self.var_manager)
tasks = play.compile() tasks = play.compile()
tested = False
for role, task_vars in self.get_tasks_vars(play, tasks): 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('l3_variable'), 'l3-alt')
self.assertEqual(task_vars.get('test_variable'), 'l3-alt') self.assertEqual(task_vars.get('test_variable'), 'l3-alt')
self.assertTrue(tested)
@patch('ansible.playbook.role.definition.unfrackpath', @patch('ansible.playbook.role.definition.unfrackpath',
mock_unfrackpath_noop) mock_unfrackpath_noop)
@ -165,7 +176,9 @@ class TestIncludeRole(unittest.TestCase):
), loader=self.loader, variable_manager=self.var_manager) ), loader=self.loader, variable_manager=self.var_manager)
tasks = play.compile() tasks = play.compile()
expected_roles = ['l1', 'l2', 'l3']
for role, task_vars in self.get_tasks_vars(play, tasks): 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 # Outer-most role must not have variables from inner roles yet
if role == 'l1': if role == 'l1':
self.assertEqual(task_vars.get('l1_variable'), 'l1-main') self.assertEqual(task_vars.get('l1_variable'), 'l1-main')
@ -184,6 +197,9 @@ class TestIncludeRole(unittest.TestCase):
self.assertEqual(task_vars.get('l2_variable'), 'l2-main') self.assertEqual(task_vars.get('l2_variable'), 'l2-main')
self.assertEqual(task_vars.get('l3_variable'), 'l3-main') self.assertEqual(task_vars.get('l3_variable'), 'l3-main')
self.assertEqual(task_vars.get('test_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', @patch('ansible.playbook.role.definition.unfrackpath',
mock_unfrackpath_noop) mock_unfrackpath_noop)
@ -206,7 +222,9 @@ class TestIncludeRole(unittest.TestCase):
), loader=self.loader, variable_manager=self.var_manager) ), loader=self.loader, variable_manager=self.var_manager)
tasks = play.compile() tasks = play.compile()
expected_roles = ['l1', 'l2', 'l3']
for role, task_vars in self.get_tasks_vars(play, tasks): 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 # Outer-most role must not have variables from inner roles yet
if role == 'l1': if role == 'l1':
self.assertEqual(task_vars.get('l1_variable'), 'l1-alt') self.assertEqual(task_vars.get('l1_variable'), 'l1-alt')
@ -225,3 +243,6 @@ class TestIncludeRole(unittest.TestCase):
self.assertEqual(task_vars.get('l2_variable'), 'l2-alt') self.assertEqual(task_vars.get('l2_variable'), 'l2-alt')
self.assertEqual(task_vars.get('l3_variable'), 'l3-alt') self.assertEqual(task_vars.get('l3_variable'), 'l3-alt')
self.assertEqual(task_vars.get('test_variable'), 'l3-alt') self.assertEqual(task_vars.get('test_variable'), 'l3-alt')
else:
self.fail()
self.assertFalse(expected_roles)