def test_requires_all_of_predicate(self): self.components_metadata.append({ 'name': 'additional_service:test_service', 'requires': [{ 'all_of': { 'items': [ 'network:core:test_network_2', 'storage:*', 'hypervisor:test_hypervisor' ] } }] }) selected_components_list = [ 'additional_service:test_service', 'network:core:test_network_2', 'storage:test_storage_2', 'hypervisor:test_hypervisor' ] self._validate_with_expected_errors( selected_components_list, "Requirements was not satisfied for component " "'additional_service:test_service': all_of([" "'hypervisor:test_hypervisor', 'network:core:test_network_2', " "'storage:*'])") selected_components_list.append('storage:test_storage') ComponentsRestrictions.validate_components( selected_components_list, self.components_metadata, self.required_components_types)
def _validate_components(cls, release_id, components_list): release = objects.Release.get_by_uid(release_id) release_components = objects.Release.get_all_components(release) ComponentsRestrictions.validate_components( components_list, release_components, release.required_component_types)
def test_requires_all_of_predicate(self): self.components_metadata.append({ 'name': 'additional_service:test_service', 'requires': [{ 'all_of': { 'items': [ 'network:core:test_network_2', 'storage:*', 'hypervisor:test_hypervisor' ] } }] }) selected_components_list = ['additional_service:test_service', 'network:core:test_network_2', 'storage:test_storage_2', 'hypervisor:test_hypervisor'] self._validate_with_expected_errors( selected_components_list, "Requirements was not satisfied for component " "'additional_service:test_service': all_of([" "'hypervisor:test_hypervisor', 'network:core:test_network_2', " "'storage:*'])" ) selected_components_list.append('storage:test_storage') ComponentsRestrictions.validate_components( selected_components_list, self.components_metadata, self.required_components_types)
def test_requires_all_of_predicate(self): self.components_metadata.append( { "name": "additional_service:test_service", "requires": [ {"all_of": {"items": ["network:core:test_network_2", "storage:*", "hypervisor:test_hypervisor"]}} ], } ) selected_components_list = [ "additional_service:test_service", "network:core:test_network_2", "storage:test_storage_2", "hypervisor:test_hypervisor", ] self._validate_with_expected_errors( selected_components_list, "Requirements was not satisfied for component " "'additional_service:test_service': all_of([" "'hypervisor:test_hypervisor', 'network:core:test_network_2', " "'storage:*'])", ) selected_components_list.append("storage:test_storage") ComponentsRestrictions.validate_components( selected_components_list, self.components_metadata, self.required_components_types )
def test_requires_any_of_predicate(self): self.components_metadata.append( { "name": "additional_service:test_service", "requires": [ {"any_of": {"items": ["network:core:*"]}}, {"any_of": {"items": ["storage:test_storage_2", "hypervisor:test_hypervisor"]}}, ], } ) self._validate_with_expected_errors( ["additional_service:test_service", "network:ml2:test_network_3"], "Requirements was not satisfied for component " "'additional_service:test_service': any_of(['network:core:*'])", ) self._validate_with_expected_errors( ["additional_service:test_service", "network:core:test_network_2"], "Requirements was not satisfied for component " "'additional_service:test_service': " "any_of(['hypervisor:test_hypervisor', 'storage:test_storage_2'])", ) ComponentsRestrictions.validate_components( [ "additional_service:test_service", "network:core:test_network_2", "hypervisor:test_hypervisor", "storage:test_storage_2", ], self.components_metadata, self.required_components_types, )
def _validate_components(cls, release_id, components_list): #取出此release包含的组件 release = objects.Release.get_by_uid(release_id) release_components = objects.Release.get_all_components(release) #检查组件间兼容问题,依赖问题是否满足 ComponentsRestrictions.validate_components( components_list, release_components, release.required_component_types)
def test_not_all_required_types_components(self): selected_components_list = [ 'hypervisor:test_hypervisor', 'network:core:test_network_2', 'storage:test_storage_2' ] ComponentsRestrictions.validate_components( selected_components_list, self.components_metadata, self.required_components_types) while selected_components_list: selected_components_list.pop() self._validate_with_expected_errors( selected_components_list, "Components with {0} types are required but wasn't found " "in data.".format( sorted( set(self.required_components_types) - set([ x.split(':')[0] for x in selected_components_list ]))))
def test_not_all_required_types_components(self): selected_components_list = [ 'hypervisor:test_hypervisor', 'network:core:test_network_2', 'storage:test_storage_2' ] ComponentsRestrictions.validate_components( selected_components_list, self.components_metadata, self.required_components_types) while selected_components_list: selected_components_list.pop() self._validate_with_expected_errors( selected_components_list, "Components with {0} types are required but wasn't found " "in data.".format(sorted( set(self.required_components_types) - set( [x.split(':')[0] for x in selected_components_list]) )) )
def _validate_with_expected_errors(self, components_list, error_msg): with self.assertRaises(errors.InvalidData) as exc_cm: ComponentsRestrictions.validate_components( components_list, self.components_metadata, self.required_components_types) self.assertEqual(exc_cm.exception.message, error_msg)