def testConfigUniverse(self): context = findings_lib.FileContext('') type_universe = entity_type_lib.EntityTypeUniverse([]) type_universe.AddFinding( findings_lib.IllegalCharacterError('stuff', context)) field_universe = field_lib.FieldUniverse([]) field_universe.AddFinding( findings_lib.InconsistentFileLocationError('', context)) subfield_universe = subfield_lib.SubfieldUniverse([]) subfield_universe.AddFinding( findings_lib.CapitalizationError('Hi', context)) state_universe = state_lib.StateUniverse([]) connection_universe = connection_lib.ConnectionUniverse([]) connection_universe.AddFinding( findings_lib.InvalidConnectionNamespaceError('notglobal', context)) unit_universe = unit_lib.UnitUniverse([]) config_universe = presubmit_validate_types_lib.ConfigUniverse( subfield_universe=subfield_universe, field_universe=field_universe, entity_type_universe=type_universe, state_universe=state_universe, connection_universe=connection_universe, unit_universe=unit_universe) findings = config_universe.GetFindings() self.assertLen(findings, 4) self.assertTrue( config_universe.HasFindingTypes([ findings_lib.InconsistentFileLocationError, findings_lib.IllegalCharacterError, findings_lib.CapitalizationError, findings_lib.InvalidConnectionNamespaceError ])) self.assertFalse(config_universe.IsValid())
def testConfigUniverseGetEntityType(self): context = findings_lib.FileContext('') type_universe = entity_type_lib.EntityTypeUniverse([]) type_universe.AddFinding( findings_lib.IllegalCharacterError('stuff', context)) field_universe = field_lib.FieldUniverse([]) field_universe.AddFinding( findings_lib.InconsistentFileLocationError('', context)) subfield_universe = subfield_lib.SubfieldUniverse([]) subfield_universe.AddFinding( findings_lib.CapitalizationError('Hi', context)) state_universe = state_lib.StateUniverse([]) connection_universe = connection_lib.ConnectionUniverse([]) unit_universe = unit_lib.UnitUniverse([]) config_universe = presubmit_validate_types_lib.ConfigUniverse( subfield_universe=subfield_universe, field_universe=field_universe, entity_type_universe=type_universe, state_universe=state_universe, connection_universe=connection_universe, unit_universe=unit_universe) entity_type = config_universe.GetEntityType('NONEXISTENT', 'NONEXISTENT') self.assertIsNone(entity_type)
def testSubfieldUniverseGetFindings(self): context = findings_lib.FileContext(_GOOD_PATH + '/file.yaml') folder = subfield_lib.SubfieldFolder(_GOOD_PATH) folder.AddFinding( findings_lib.InconsistentFileLocationError('', context)) namespace = folder.local_namespace namespace.AddFinding( findings_lib.DuplicateSubfieldDefinitionError( namespace, subfield_lib.Subfield( 'two', subfield_lib.SubfieldCategory.POINT_TYPE), context)) subfield_one = subfield_lib.Subfield( 'one', subfield_lib.SubfieldCategory.POINT_TYPE, 'thing') subfield_one.AddFinding( findings_lib.MissingSubfieldDescriptionWarning('one', context)) namespace.InsertSubfield(subfield_one) subfields_universe = subfield_lib.SubfieldUniverse([folder]) findings = subfields_universe.GetFindings() self.assertLen(findings, 3) self.assertTrue( subfields_universe.HasFindingTypes([ findings_lib.InconsistentFileLocationError, findings_lib.DuplicateSubfieldDefinitionError, findings_lib.MissingSubfieldDescriptionWarning ])) self.assertFalse(subfields_universe.IsValid())
def testEntityTypeUniverseGetFindings(self): filepath = _GOOD_PATH + '/file.yaml' context = findings_lib.FileContext(filepath) folder = entity_type_lib.EntityTypeFolder(_GOOD_PATH) folder.AddFinding( findings_lib.InconsistentFileLocationError('', context)) namespace = folder.local_namespace namespace.AddFinding(findings_lib.IllegalCharacterError( 'two', context)) # This will generate a MissingDescriptionWarning on itself entity_type = entity_type_lib.EntityType(typename='one', filepath=filepath) namespace.InsertType(entity_type) types_universe = entity_type_lib.EntityTypeUniverse([folder]) findings = types_universe.GetFindings() self.assertLen(findings, 3) self.assertTrue( types_universe.HasFindingTypes([ findings_lib.InconsistentFileLocationError, findings_lib.IllegalCharacterError, findings_lib.MissingDescriptionWarning ])) self.assertFalse(types_universe.IsValid())
def testFieldsUniverseGetFindings(self): context = findings_lib.FileContext(_GOOD_PATH + '/file.yaml') folder = field_lib.FieldFolder(_GOOD_PATH) folder.AddFinding( findings_lib.InconsistentFileLocationError('', context)) namespace = folder.local_namespace namespace.AddFinding( findings_lib.UnrecognizedSubfieldError(['any'], field_lib.Field( 'two', file_context=context))) field = field_lib.Field('one', file_context=context) # Currently there are no warnings for fields, so using a subfield warning field.AddFinding( findings_lib.MissingSubfieldDescriptionWarning('one', context)) namespace.InsertField(field) fields_universe = field_lib.FieldUniverse([folder]) findings = fields_universe.GetFindings() self.assertLen(findings, 3) self.assertTrue( fields_universe.HasFindingTypes([ findings_lib.InconsistentFileLocationError, findings_lib.UnrecognizedSubfieldError, findings_lib.MissingSubfieldDescriptionWarning ])) self.assertFalse(fields_universe.IsValid())
def AddFromConfig(self, documents, config_filename): """Reads the list of extracted yaml documents and adds all ontology items found. Method checks that config_filename is a path in the correct folder. Valid items are added to the appropriate namespace objects. Findings are saved on objects if found. Errors do not halt processing. Args: documents: output of a yaml safe_load_all() config_filename: relative path to the yaml file from config root Raises: RuntimeError: if the path is not valid for the component type """ context = findings_lib.FileContext(config_filename) if documents is None: self.AddFinding(findings_lib.EmptyFileWarning(context)) return # Validate that the ontology item is from the correct folder if not self._IsYamlUnderThisFolder(config_filename): self.AddFinding( findings_lib.InconsistentFileLocationError( self._folderpath + r'/*.yaml', context)) return for document in documents: self._AddFromConfigHelper(document, context)
def testUnitUniverseGetFindings(self): context = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH)) folder = unit_lib.UnitFolder(_GOOD_PATH) folder.AddFinding( findings_lib.InconsistentFileLocationError('', context)) namespace = folder.local_namespace namespace.AddFinding( findings_lib.DuplicateUnitDefinitionError( unit_lib.Unit('unit', 'measurement'), 'namespace')) unit = unit_lib.Unit('unit', 'measurement') unit.AddFinding( findings_lib.UnknownUnitTagError(unit.name, 'tag', context)) namespace.InsertUnit(unit) unit_universe = unit_lib.UnitUniverse([folder]) findings = unit_universe.GetFindings() self.assertLen(findings, 3) self.assertTrue( unit_universe.HasFindingTypes([ findings_lib.InconsistentFileLocationError, findings_lib.DuplicateUnitDefinitionError, findings_lib.UnknownUnitTagError, ])) self.assertFalse(unit_universe.IsValid())
def testConnectionUniverseGetFindings(self): context = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH)) folder = connection_lib.ConnectionFolder(_GOOD_PATH) folder.AddFinding( findings_lib.InconsistentFileLocationError('', context)) namespace = folder.local_namespace namespace.AddFinding( findings_lib.DuplicateConnectionDefinitionError( connection_lib.Connection('FEEDS'), base_lib.GLOBAL_NAMESPACE)) connection = connection_lib.Connection('FEEDS', 'description') connection.AddFinding( findings_lib.MissingConnectionDescriptionWarning(connection)) namespace.InsertConnection(connection) connection_universe = connection_lib.ConnectionUniverse([folder]) findings = connection_universe.GetFindings() self.assertLen(findings, 3) self.assertTrue( connection_universe.HasFindingTypes([ findings_lib.InconsistentFileLocationError, findings_lib.DuplicateConnectionDefinitionError, findings_lib.MissingConnectionDescriptionWarning ])) self.assertFalse(connection_universe.IsValid())
def testStateUniverseGetFindings(self): context = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH)) folder = state_lib.StateFolder(_GOOD_PATH) folder.AddFinding( findings_lib.InconsistentFileLocationError('', context)) namespace = folder.local_namespace namespace.AddFinding( findings_lib.DuplicateStateDefinitionError( state_lib.State('STATE'), 'namespace')) state = state_lib.State('STATE', 'description') state.AddFinding(findings_lib.MissingStateDescriptionWarning(state)) namespace.InsertState(state) state_universe = state_lib.StateUniverse([folder]) findings = state_universe.GetFindings() self.assertLen(findings, 3) self.assertTrue( state_universe.HasFindingTypes([ findings_lib.InconsistentFileLocationError, findings_lib.DuplicateStateDefinitionError, findings_lib.MissingStateDescriptionWarning ])) self.assertFalse(state_universe.IsValid())