コード例 #1
0
    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())
コード例 #2
0
    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)
コード例 #3
0
    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())
コード例 #4
0
    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())
コード例 #5
0
    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())
コード例 #6
0
    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)
コード例 #7
0
    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())
コード例 #8
0
    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())
コード例 #9
0
    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())