Fail if two elements provide the same thing
The current check only validates that an element that specifies "element-provides" doesn't conflict with a "real" element. We also want to check this against the provides of other elements. A real example is with a "block-device" element. There is no actual "block-device" element; we can have multiple elements provide it (block-device-[gpt,mbr,efi], say) but we only want one of them at a time. Update the unit test for this. Change-Id: I59d4aa5f6f09e2892b213e154befa10d85e95ca3
This commit is contained in:
parent
55b479b54f
commit
a32a8f1ce1
@ -151,9 +151,14 @@ def _expand_element_dependencies(user_elements, all_elements):
|
||||
|
||||
element_deps = element_obj.depends
|
||||
element_provides = element_obj.provides
|
||||
# save which elements provide another element for potential
|
||||
# error message
|
||||
# Check that we are not providing an element which has already
|
||||
# been provided by someone else, and additionally save which
|
||||
# elements provide another element
|
||||
for provide in element_provides:
|
||||
if provide in provided:
|
||||
raise AlreadyProvidedException(
|
||||
"%s: already provided by %s" %
|
||||
(provide, provided_by[provide]))
|
||||
provided_by[provide].append(element)
|
||||
provided.update(element_provides)
|
||||
check_queue.extend(element_deps - (final_elements | provided))
|
||||
|
@ -67,6 +67,10 @@ class TestElementDeps(testtools.TestCase):
|
||||
'provides_virtual',
|
||||
[],
|
||||
['virtual'])
|
||||
_populate_element(self.element_dir,
|
||||
'also_provides_virtual',
|
||||
[],
|
||||
['virtual'])
|
||||
_populate_element(self.element_dir,
|
||||
'requires_virtual',
|
||||
['virtual'],
|
||||
@ -168,6 +172,14 @@ class TestElementDeps(testtools.TestCase):
|
||||
[self._e('requires_new_virtual'),
|
||||
self._e('provides_new_virtual')], result)
|
||||
|
||||
def test_elements_provide_same(self):
|
||||
msg = "virtual: already provided by \['provides_virtual'\]"
|
||||
self.assertRaisesRegexp(element_dependencies.AlreadyProvidedException,
|
||||
msg,
|
||||
element_dependencies.get_elements,
|
||||
['provides_virtual', 'also_provides_virtual'],
|
||||
self.element_dirs)
|
||||
|
||||
def test_no_os_element(self):
|
||||
self.assertRaises(element_dependencies.MissingOSException,
|
||||
element_dependencies.get_elements,
|
||||
|
Loading…
Reference in New Issue
Block a user