Adding more unittests for the v2 role class
This commit is contained in:
parent
fe0ab8e750
commit
bd203a44be
2 changed files with 58 additions and 16 deletions
|
@ -41,6 +41,7 @@ __all__ = ['Role']
|
||||||
# will be based on the repr() of the dictionary object)
|
# will be based on the repr() of the dictionary object)
|
||||||
_ROLE_CACHE = dict()
|
_ROLE_CACHE = dict()
|
||||||
|
|
||||||
|
# The valid metadata keys for meta/main.yml files
|
||||||
_VALID_METADATA_KEYS = [
|
_VALID_METADATA_KEYS = [
|
||||||
'dependencies',
|
'dependencies',
|
||||||
'allow_duplicates',
|
'allow_duplicates',
|
||||||
|
@ -369,20 +370,30 @@ class Role(Base):
|
||||||
if parent_role not in self._parents:
|
if parent_role not in self._parents:
|
||||||
self._parents.append(parent_role)
|
self._parents.append(parent_role)
|
||||||
|
|
||||||
def get_variables(self):
|
def get_parents(self):
|
||||||
# returns the merged variables for this role, including
|
return self._parents
|
||||||
# recursively merging those of all child roles
|
|
||||||
return dict()
|
|
||||||
|
|
||||||
def get_immediate_dependencies(self):
|
# FIXME: not yet used
|
||||||
return self._dependencies
|
#def get_variables(self):
|
||||||
|
# # returns the merged variables for this role, including
|
||||||
|
# # recursively merging those of all child roles
|
||||||
|
# return dict()
|
||||||
|
|
||||||
|
def get_direct_dependencies(self):
|
||||||
|
return self._attributes['dependencies'][:]
|
||||||
|
|
||||||
def get_all_dependencies(self):
|
def get_all_dependencies(self):
|
||||||
# returns a list built recursively, of all deps from
|
# returns a list built recursively, of all deps from
|
||||||
# all child dependencies
|
# all child dependencies
|
||||||
all_deps = []
|
|
||||||
for dep in self._dependencies:
|
child_deps = []
|
||||||
list_union(all_deps, dep.get_all_dependencies())
|
direct_deps = self.get_direct_dependencies()
|
||||||
all_deps = list_union(all_deps, self.dependencies)
|
|
||||||
return all_deps
|
for dep in direct_deps:
|
||||||
|
dep_deps = dep.get_all_dependencies()
|
||||||
|
for dep_dep in dep_deps:
|
||||||
|
if dep_dep not in child_deps:
|
||||||
|
child_deps.append(dep_dep)
|
||||||
|
|
||||||
|
return direct_deps + child_deps
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ __metaclass__ = type
|
||||||
from ansible.compat.tests import unittest
|
from ansible.compat.tests import unittest
|
||||||
from ansible.compat.tests.mock import patch, MagicMock
|
from ansible.compat.tests.mock import patch, MagicMock
|
||||||
|
|
||||||
from ansible.errors import AnsibleParserError
|
from ansible.errors import AnsibleError, AnsibleParserError
|
||||||
from ansible.playbook.block import Block
|
from ansible.playbook.block import Block
|
||||||
from ansible.playbook.role import Role
|
from ansible.playbook.role import Role
|
||||||
from ansible.playbook.task import Task
|
from ansible.playbook.task import Task
|
||||||
|
@ -124,16 +124,30 @@ class TestRole(unittest.TestCase):
|
||||||
return ('foo', '/etc/ansible/roles/foo')
|
return ('foo', '/etc/ansible/roles/foo')
|
||||||
elif role == 'bar':
|
elif role == 'bar':
|
||||||
return ('bar', '/etc/ansible/roles/bar')
|
return ('bar', '/etc/ansible/roles/bar')
|
||||||
|
elif role == 'baz':
|
||||||
|
return ('baz', '/etc/ansible/roles/baz')
|
||||||
|
elif role == 'bam':
|
||||||
|
return ('bam', '/etc/ansible/roles/bam')
|
||||||
elif role == 'bad1':
|
elif role == 'bad1':
|
||||||
return ('bad1', '/etc/ansible/roles/bad1')
|
return ('bad1', '/etc/ansible/roles/bad1')
|
||||||
elif role == 'bad2':
|
elif role == 'bad2':
|
||||||
return ('bad2', '/etc/ansible/roles/bad2')
|
return ('bad2', '/etc/ansible/roles/bad2')
|
||||||
|
elif role == 'recursive1':
|
||||||
|
return ('recursive1', '/etc/ansible/roles/recursive1')
|
||||||
|
elif role == 'recursive2':
|
||||||
|
return ('recursive2', '/etc/ansible/roles/recursive2')
|
||||||
|
|
||||||
def fake_load_role_yaml(role_path, subdir):
|
def fake_load_role_yaml(role_path, subdir):
|
||||||
if role_path == '/etc/ansible/roles/foo':
|
if role_path == '/etc/ansible/roles/foo':
|
||||||
if subdir == 'meta':
|
if subdir == 'meta':
|
||||||
return dict(dependencies=['bar'], allow_duplicates=True, galaxy_info=dict(a='1', b='2', c='3'))
|
return dict(dependencies=['bar'], allow_duplicates=True, galaxy_info=dict(a='1', b='2', c='3'))
|
||||||
elif role_path == '/etc/ansible/roles/bar':
|
elif role_path == '/etc/ansible/roles/bar':
|
||||||
|
if subdir == 'meta':
|
||||||
|
return dict(dependencies=['baz'])
|
||||||
|
elif role_path == '/etc/ansible/roles/baz':
|
||||||
|
if subdir == 'meta':
|
||||||
|
return dict(dependencies=['bam'])
|
||||||
|
elif role_path == '/etc/ansible/roles/bam':
|
||||||
if subdir == 'meta':
|
if subdir == 'meta':
|
||||||
return dict()
|
return dict()
|
||||||
elif role_path == '/etc/ansible/roles/bad1':
|
elif role_path == '/etc/ansible/roles/bad1':
|
||||||
|
@ -142,21 +156,36 @@ class TestRole(unittest.TestCase):
|
||||||
elif role_path == '/etc/ansible/roles/bad2':
|
elif role_path == '/etc/ansible/roles/bad2':
|
||||||
if subdir == 'meta':
|
if subdir == 'meta':
|
||||||
return dict(foo='bar')
|
return dict(foo='bar')
|
||||||
|
elif role_path == '/etc/ansible/roles/recursive1':
|
||||||
|
if subdir == 'meta':
|
||||||
|
return dict(dependencies=['recursive2'])
|
||||||
|
elif role_path == '/etc/ansible/roles/recursive2':
|
||||||
|
if subdir == 'meta':
|
||||||
|
return dict(dependencies=['recursive1'])
|
||||||
return None
|
return None
|
||||||
|
|
||||||
_get_role_path.side_effect = fake_get_role_path
|
_get_role_path.side_effect = fake_get_role_path
|
||||||
_load_role_yaml.side_effect = fake_load_role_yaml
|
_load_role_yaml.side_effect = fake_load_role_yaml
|
||||||
|
|
||||||
r = Role.load('foo')
|
r = Role.load('foo')
|
||||||
self.assertEqual(len(r.dependencies), 1)
|
role_deps = r.get_direct_dependencies()
|
||||||
self.assertEqual(type(r.dependencies[0]), Role)
|
|
||||||
self.assertEqual(len(r.dependencies[0]._parents), 1)
|
self.assertEqual(len(role_deps), 1)
|
||||||
self.assertEqual(r.dependencies[0]._parents[0], r)
|
self.assertEqual(type(role_deps[0]), Role)
|
||||||
|
self.assertEqual(len(role_deps[0].get_parents()), 1)
|
||||||
|
self.assertEqual(role_deps[0].get_parents()[0], r)
|
||||||
self.assertEqual(r.allow_duplicates, True)
|
self.assertEqual(r.allow_duplicates, True)
|
||||||
self.assertEqual(r.galaxy_info, dict(a='1', b='2', c='3'))
|
self.assertEqual(r.galaxy_info, dict(a='1', b='2', c='3'))
|
||||||
|
|
||||||
|
all_deps = r.get_all_dependencies()
|
||||||
|
self.assertEqual(len(all_deps), 3)
|
||||||
|
self.assertEqual(all_deps[0].role_name, 'bar')
|
||||||
|
self.assertEqual(all_deps[1].role_name, 'baz')
|
||||||
|
self.assertEqual(all_deps[2].role_name, 'bam')
|
||||||
|
|
||||||
self.assertRaises(AnsibleParserError, Role.load, 'bad1')
|
self.assertRaises(AnsibleParserError, Role.load, 'bad1')
|
||||||
self.assertRaises(AnsibleParserError, Role.load, 'bad2')
|
self.assertRaises(AnsibleParserError, Role.load, 'bad2')
|
||||||
|
self.assertRaises(AnsibleError, Role.load, 'recursive1')
|
||||||
|
|
||||||
@patch.object(Role, '_get_role_path')
|
@patch.object(Role, '_get_role_path')
|
||||||
@patch.object(Role, '_load_role_yaml')
|
@patch.object(Role, '_load_role_yaml')
|
||||||
|
@ -174,4 +203,6 @@ class TestRole(unittest.TestCase):
|
||||||
|
|
||||||
r = Role.load(dict(role='foo'))
|
r = Role.load(dict(role='foo'))
|
||||||
|
|
||||||
|
# FIXME: add tests for the more complex url-type
|
||||||
|
# constructions and tags/when statements
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue