def testAddDuplicateTypes(self):
        fields_universe = field_lib.FieldUniverse([])
        fields_universe._namespace_map = {'': ('animal'), 'ANIMAL': ('meow')}
        folderpath = 'ANIMAL/entity_types'
        type_folder = entity_type_lib.EntityTypeFolder(folderpath,
                                                       fields_universe)
        self.assertFalse(type_folder.GetFindings())

        rel_typepath = os.path.join(folderpath, 'mammal')
        # entity type
        entity_type = entity_type_lib.EntityType(
            filepath=rel_typepath,
            typename='kitty',
            description='feline animal',
            local_field_tuples=_FS(['ANIMAL/meow', '/animal']))
        # duplicate type
        dup_type = entity_type_lib.EntityType(filepath=rel_typepath,
                                              typename='kitty',
                                              description='feline animal',
                                              local_field_tuples=_FS(
                                                  ['ANIMAL/meow', '/animal']))

        type_folder._AddType(entity_type)
        type_folder._AddType(dup_type)

        self.assertTrue(
            type_folder.local_namespace.HasFindingTypes(
                [findings_lib.DuplicateTypesError]))
        self.assertLen(type_folder.local_namespace.valid_types_map, 1)
        self.assertIn(entity_type.typename,
                      type_folder.local_namespace.valid_types_map)
        self.assertEqual(
            type_folder.local_namespace.valid_types_map.get(
                entity_type.typename), entity_type)
示例#2
0
  def testAnalyzeIgnoresAutogeneratedTypes(self):
    yaml = {'literals': ['field1', 'field2', 'field3', 'field4']}
    field_universe = field_lib.FieldUniverse(
        [_GetFieldFolder(yaml)])
    yaml = {
        'parent': {
            'description': 'parent',
            'uses': ['field1', 'field2', 'field3']
        },
        'AUTOGENERATED_NETWORK_DEVICE': {
            'description': 'AUTOGENERATED_NETWORK_DEVICE',
        },
        'child2': {
            'implements': ['AUTOGENERATED_NETWORK_DEVICE'],
            'description': 'child2',
            'uses': ['field1', 'field2', 'field3', 'field4']
        },
    }
    type_folder = _GetEntityTypeFolder(
        field_universe, yaml)
    universe = _GetEntityTypeUniverse([type_folder])
    manager = entity_type_manager.EntityTypeManager(universe)

    findings = manager.Analyze()

    self.assertEmpty(findings)
示例#3
0
    def testConfigUniverseGetStatesByField(self):
        meow_states = ['HUNGRY', 'SNUGGLY']
        meow_cat = field_lib.Field('meow_cat')
        meow_cat.states = meow_states
        claw_states = ['HISSY', 'BITEY']
        claws_cat = field_lib.Field('claws_cat')
        claws_cat.states = claw_states

        global_folder = field_lib.FieldFolder('fields/anyfolder')
        folder = field_lib.FieldFolder('localnamespace/fields/anyfolder',
                                       global_folder.local_namespace)
        folder.local_namespace.PutIfAbsent(meow_cat)
        global_folder.local_namespace.PutIfAbsent(claws_cat)

        field_universe = field_lib.FieldUniverse([folder, global_folder])

        config_universe = presubmit_validate_types_lib.ConfigUniverse(
            subfield_universe=None,
            field_universe=field_universe,
            entity_type_universe=None,
            state_universe=None,
            connection_universe=None,
            unit_universe=None)

        self.assertSameElements(claw_states,
                                config_universe.GetStatesByField('/claws_cat'))
        self.assertSameElements(
            meow_states,
            config_universe.GetStatesByField('localnamespace/meow_cat'))
示例#4
0
  def testGetTypenamesBySubsetOI(self):
    #build test universe
    yaml = {'literals': ['field1', 'field2', 'field3', 'field4']}
    field_universe = field_lib.FieldUniverse(
        [_GetFieldFolder(yaml)])
    yaml = {
        'VAV_child1': {
            'description': 'child1',
            'uses': ['field1', 'field4'],
            'opt_uses': ['field2']
        },
        'VAV_child2': {
            'description': 'child2',
            'uses': ['field1', 'field3', 'field4']
        },
    }
    type_folder = _GetEntityTypeFolder(field_universe, yaml)
    universe = _GetEntityTypeUniverse([type_folder])
    manager = entity_type_manager.EntityTypeManager(universe)
    #expected output for GetTypenamesBySubsetOI() once Analyze() is called
    expected_output = {
        frozenset({
            FieldParts(namespace='', field='field4', increment=''),
            FieldParts(namespace='', field='field1', increment='')
        }): {'/VAV_child2', '/VAV_child1'}
    }

    #test field sets have not been instantiated
    self.assertRaises(Exception, manager.GetTypenamesBySubsetOI)

    #instantiate and build field sets
    manager.Analyze()
    function_output = manager.GetTypenamesBySubsetOI()

    self.assertEqual(expected_output, function_output)
示例#5
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())
    def testAddTypeWithNamespacedField(self):
        fields_universe = field_lib.FieldUniverse([])
        fields_universe._namespace_map = {
            '': [field_lib.Field('animal')],
            'ANIMAL': [field_lib.Field('meow')],
            'ATTACK': [field_lib.Field('claws')]
        }
        folderpath = 'ANIMAL/entity_types'
        type_folder = entity_type_lib.EntityTypeFolder(folderpath,
                                                       fields_universe)
        self.assertFalse(type_folder.GetFindings())

        rel_typepath = os.path.join(folderpath, 'mammal')

        # field 'claws' is undefined.
        entity_type = entity_type_lib.EntityType(
            filepath=rel_typepath,
            typename='cat',
            description='feline animal',
            local_field_tuples=_FS(['ANIMAL/meow', 'ATTACK/claws', '/animal']))
        type_folder._AddType(entity_type)

        self.assertFalse(type_folder.local_namespace.GetFindings())
        self.assertLen(type_folder.local_namespace.valid_types_map, 1)
        self.assertIn(entity_type.typename,
                      type_folder.local_namespace.valid_types_map)
        self.assertEqual(
            type_folder.local_namespace.valid_types_map.get(
                entity_type.typename), entity_type)
示例#7
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())
示例#8
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)
示例#9
0
  def testAddMultipleTypes(self):
    fields_universe = field_lib.FieldUniverse([])
    fields_universe._namespace_map = {
        '': [field_lib.Field('animal')],
        'ANIMAL': [field_lib.Field('meow')]
    }
    folderpath = 'ANIMAL/entity_types'
    type_folder = entity_type_lib.EntityTypeFolder(folderpath, fields_universe)
    self.assertFalse(type_folder.GetFindings())

    rel_typepath = os.path.join(folderpath, 'mammal')
    # bad entity type, field 'claws' is undefined.
    bad_type = entity_type_lib.EntityType(
        filepath=rel_typepath,
        typename='cat',
        description='feline animal',
        local_field_tuples=_FS(['ANIMAL/meow', 'ANIMAL/claws', '/animal']))
    # good entity type
    good_type = entity_type_lib.EntityType(
        filepath=rel_typepath,
        typename='kitty',
        description='feline animal',
        local_field_tuples=_FS(['ANIMAL/meow', '/animal']))
    type_folder._AddType(good_type)
    type_folder._AddType(bad_type)

    self.assertTrue(
        type_folder.local_namespace.HasFindingTypes(
            [findings_lib.UndefinedFieldError]))
    self.assertLen(type_folder.local_namespace.valid_types_map, 1)
    self.assertIn(good_type.typename,
                  type_folder.local_namespace.valid_types_map)
    self.assertEqual(
        type_folder.local_namespace.valid_types_map.get(good_type.typename),
        good_type)
示例#10
0
  def testAnalyzeFindsDuplicates(self):
    yaml = {'literals': ['field1', 'field2', 'field3', 'field4', 'field5']}
    field_universe = field_lib.FieldUniverse(
        [_GetFieldFolder(yaml)])
    yaml = {
        'parent': {
            'description': 'parent',
            'uses': ['field1', 'field2', 'field3']
        },
        'child1': {
            'description': 'child1',
            'implements': ['parent'],
            'uses': ['field4']
        },
        'child2': {
            'description': 'child2',
            'uses': ['field1', 'field2', 'field3', 'field4']
        },
    }
    type_folder = _GetEntityTypeFolder(field_universe, yaml)
    universe = _GetEntityTypeUniverse([type_folder])
    manager = entity_type_manager.EntityTypeManager(universe)

    manager.Analyze()

    child1 = universe.GetEntityType('', 'child1')
    child2 = universe.GetEntityType('', 'child2')
    parent = universe.GetEntityType('', 'parent')

    self.assertTrue(child2.HasFindingTypes(
        [findings_lib.DuplicateExpandedFieldSetsWarning]))
    self.assertTrue(child1.HasFindingTypes(
        [findings_lib.DuplicateExpandedFieldSetsWarning]))
    self.assertFalse(parent.HasFindingTypes(
        [findings_lib.DuplicateExpandedFieldSetsWarning]))
示例#11
0
  def testAnalyzeIgnoresNonCanonicalFlexibleParents(self):
    yaml = {'literals': ['field1', 'field2', 'field3', 'field4']}
    field_universe = field_lib.FieldUniverse(
        [_GetFieldFolder(yaml)])
    yaml = {
        'VAV_parent': {
            'description': 'parent',
            'uses': ['field1', 'field4'],
            'opt_uses': ['field2', 'field3']
        },
        'VAV_child1': {
            'description': 'child1',
            'uses': ['field1', 'field4'],
            'opt_uses': ['field2']
        },
    }
    type_folder = _GetEntityTypeFolder(field_universe, yaml)
    universe = _GetEntityTypeUniverse([type_folder])
    manager = entity_type_manager.EntityTypeManager(universe)

    manager.Analyze()

    parent = universe.GetEntityType('', 'VAV_parent')

    self.assertFalse(parent.HasFindingTypes(
        [findings_lib.OverlappingFlexTypeChildWarning,
         findings_lib.OverlappingFlexTypeParentWarning]))
示例#12
0
  def testFieldUniverse(self):
    # Create field folders
    folder = field_lib.FieldFolder(_GOOD_PATH)
    namespace = folder.local_namespace
    namespace.InsertField(field_lib.Field('meow'))
    namespace.InsertField(field_lib.Field('claws'))
    fields_universe = field_lib.FieldUniverse([folder])

    self.assertTrue(fields_universe.IsFieldDefined('meow', 'mynamespace'))
    self.assertTrue(fields_universe.IsFieldDefined('claws', 'mynamespace'))
    self.assertFalse(fields_universe.IsFieldDefined('clawsss', 'mynamespace'))
示例#13
0
def BuildUniverse(config):
    """Verifies that the ontology config is consistent and valid.

  Args:
    config: a Config namedtuple containing lists of localpaths to config files.

  Returns:
     A ConfigUniverse that is fully populated with all content specified in the
     config.
  """
    # Parse state files
    state_universe = None
    if config.states:
        state_folders = parse.ParseStateFoldersFromFiles(config.states)
        state_universe = state_lib.StateUniverse(state_folders)

    connections_universe = None
    if config.connections:
        connection_folders = parse.ParseConnectionFoldersFromFiles(
            config.connections)
        connections_universe = connection_lib.ConnectionUniverse(
            connection_folders)

    # Parse subfield files
    subfields_universe = None
    if config.subfields:
        subfield_folders = parse.ParseSubfieldFoldersFromFiles(
            config.subfields)
        subfields_universe = subfield_lib.SubfieldUniverse(subfield_folders)

    # Parse unit files
    unit_universe = None
    if config.units:
        unit_folders = parse.ParseUnitFoldersFromFiles(config.units,
                                                       subfields_universe)
        unit_universe = unit_lib.UnitUniverse(unit_folders)
        if subfields_universe:
            subfields_universe.ValidateUnits(unit_universe)

    # Parse fields files
    fields_universe = None
    if config.fields:
        field_folders = parse.ParseFieldFoldersFromFiles(
            config.fields, subfields_universe, state_universe)
        fields_universe = field_lib.FieldUniverse(field_folders)

    # Parse typedef files
    type_folders = parse.ParseTypeFoldersFromFiles(config.type_defs,
                                                   fields_universe)
    types_universe = entity_type_lib.EntityTypeUniverse(type_folders)

    # return findings_list, result_namespaces
    return ConfigUniverse(types_universe, fields_universe, subfields_universe,
                          state_universe, connections_universe, unit_universe)
 def testParseTypeFoldersFromFilesWithFieldsUniverse(self):
     fields_universe = field_lib.FieldUniverse([])
     fields_universe._namespace_map = {
         '': ('current_sensor', 'fan_run_status', 'dryer_run_status',
              'fan_run_command'),
         'GOOD': ('zone_air_temperature_sensor')
     }
     type_folders = parse.ParseTypeFoldersFromFiles(
         [self.good_types_file, self.good_types_file_2], fields_universe)
     # should have 1 folder for GOOD namespace
     self.assertLen(type_folders, 1)
     # folder should have 4 types
     valid_types = list(
         type_folders[0].local_namespace.valid_types_map.values())
     self.assertLen(valid_types, 4)
    def testParseTypeFoldersFromFileUndefinedFields(self):
        bad_type_file = base_lib.PathParts(
            root=self.base_dir, relative_path='BAD/entity_types/bad3.yaml')
        fields_universe = field_lib.FieldUniverse([])
        fields_universe._namespace_map = {
            '': ('current_sensor', 'fan_run_command')
        }
        type_folders = parse.ParseTypeFoldersFromFiles([bad_type_file],
                                                       fields_universe)
        # should have 1 folder
        self.assertLen(type_folders, 1)

        self.assertTrue(type_folders[0].local_namespace.HasFindingTypes(
            [findings_lib.UndefinedFieldError]))
        valid_types = list(
            type_folders[0].local_namespace.valid_types_map.values())
        self.assertFalse(valid_types)
    def testAnalyzeHandlesNamespaces(self):
        yaml1 = {'literals': ['field1']}
        yaml2 = {
            'literals': ['field1', 'field2', 'field3', 'field4', 'field5']
        }
        field_folder1 = _GetFieldFolder(yaml1, 'HVAC')
        field_folder2 = _GetFieldFolder(yaml2)

        field_universe = field_lib.FieldUniverse(
            [field_folder1, field_folder2])
        yaml1 = {
            'parent': {
                'description': 'parent',
                'uses': ['HVAC/field1', 'field2', 'field3']
            },
        }
        yaml2 = {
            'child1': {
                'description': 'child1',
                'uses': ['field1', 'field2', 'field3']
            },
        }
        type_folder1 = _GetEntityTypeFolder(field_universe, yaml1,
                                            'other_namespace')
        type_folder2 = _GetEntityTypeFolder(field_universe, yaml2, 'HVAC')
        universe = _GetEntityTypeUniverse([type_folder1, type_folder2])
        manager = entity_type_manager.EntityTypeManager(universe)

        findings = manager.Analyze()

        child1 = universe.GetEntityType('HVAC', 'child1')
        parent = universe.GetEntityType('other_namespace', 'parent')

        self.assertLen(findings, 2)
        self.assertLen(child1.GetFindings(), 1)
        self.assertTrue(
            child1.HasFindingTypes(
                [findings_lib.DuplicateExpandedFieldSetsWarning]))
        self.assertLen(parent.GetFindings(), 1)
        self.assertTrue(
            parent.HasFindingTypes(
                [findings_lib.DuplicateExpandedFieldSetsWarning]))
示例#17
0
    def testInstanceLinkSourceFieldValidation(self, mock_fn):
        field_u = field_lib.FieldUniverse([])
        config_u = presubmit_validate_types_lib.ConfigUniverse(
            None, field_u, None, None, None, None)
        mock_fn.side_effect = lambda f, ns: f == 'run_status'

        validator = entity_instance.InstanceValidator(config_u, _UPDATE_CFG)
        src_ok = entity_instance.EntityInstance(
            _UPDATE,
            'AHU-1',
            links=[link.Link('CTRL-1', {'run_status': 'run_status'})],
            etag='123')
        bad_src_field = entity_instance.EntityInstance(
            _UPDATE,
            'AHU-1',
            links=[link.Link('CTRL-1', {'nonexistent_status': 'run_status'})],
            etag='123')

        self.assertFalse(validator.Validate(bad_src_field))
        self.assertTrue(validator.Validate(src_ok))
示例#18
0
 def testParseTypeFoldersFromFileBadFormat(self):
     bad_types_file = base_lib.PathParts(
         root=self.base_dir, relative_path='BAD/entity_types/bad1.yaml')
     fields_universe = field_lib.FieldUniverse([])
     fields_universe._namespace_map = {
         '': ('dryer_run_status', 'fan_run_command')
     }
     type_folders = parse.ParseTypeFoldersFromFiles([bad_types_file],
                                                    fields_universe)
     # should have 1 folder
     self.assertLen(type_folders, 1)
     type_folder = type_folders[0]
     # Should find 4 errors
     self.assertLen(type_folder.GetFindings(), 3)
     self.assertTrue(
         type_folder.HasFindingTypes([findings_lib.DuplicateFieldError]))
     self.assertTrue(
         type_folder.HasFindingTypes(
             [findings_lib.UnrecognizedFieldFormatError]))
     self.assertTrue(
         type_folder.HasFindingTypes([findings_lib.DuplicateParentError]))
    def testAddTypeUndefinedFields(self):
        fields_universe = field_lib.FieldUniverse([])
        fields_universe._namespace_map = {'': ('animal'), 'ANIMAL': ('meow')}
        folderpath = 'ANIMAL/entity_types'
        type_folder = entity_type_lib.EntityTypeFolder(folderpath,
                                                       fields_universe)
        self.assertFalse(type_folder.GetFindings())

        rel_typepath = os.path.join(folderpath, 'mammal')

        # field 'claws' is undefined.
        entity_type = entity_type_lib.EntityType(
            filepath=rel_typepath,
            typename='cat',
            description='feline animal',
            local_field_tuples=_FS(['ANIMAL/meow', 'ANIMAL/claws', '/animal']))
        type_folder._AddType(entity_type)
        self.assertTrue(
            type_folder.local_namespace.HasFindingTypes(
                [findings_lib.UndefinedFieldError]))
        self.assertFalse(type_folder.local_namespace.valid_types_map)
示例#20
0
    def testFieldUniverseGetFieldMap(self):
        meow_cat = field_lib.Field('meow_cat')
        claws_cat = field_lib.Field('claws_cat')
        global_folder = field_lib.FieldFolder(_GOOD_GLOBAL_PATH)
        folder = field_lib.FieldFolder(_GOOD_PATH,
                                       global_folder.local_namespace)
        folder.local_namespace.PutIfAbsent(meow_cat)
        global_folder.local_namespace.PutIfAbsent(claws_cat)

        universe = field_lib.FieldUniverse([folder, global_folder])

        local_fields = universe.GetFieldsMap(_GOOD_NAMESPACE)
        global_fields = universe.GetFieldsMap('')
        all_fields = universe.GetFieldsMap()

        expected_local = {_GOOD_NAMESPACE + '/meow_cat': meow_cat}
        expected_global = {'/claws_cat': claws_cat}
        expected_all = {**expected_local, **expected_global}

        self.assertDictEqual(local_fields, expected_local)
        self.assertDictEqual(global_fields, expected_global)
        self.assertDictEqual(all_fields, expected_all)
  def testAnalyzeIgnoresPassthroughTypes(self):
    yaml = {'literals': ['field1', 'field2', 'field3', 'field4']}
    field_universe = field_lib.FieldUniverse(
        [_GetFieldFolder(yaml)])
    yaml = {
        'parent': {
            'description': 'parent',
            'uses': ['field1', 'field2', 'field3']
        },
        'PASSTHROUGH': {
            'description': 'PASSTHROUGH',
            'allow_undefined_fields': True,
            'uses': ['field1', 'field2', 'field3', 'field4']
        },
    }
    type_folder = _GetEntityTypeFolder(
        field_universe, yaml)
    universe = _GetEntityTypeUniverse([type_folder])
    manager = entity_type_manager.EntityTypeManager(universe)

    findings = manager.Analyze()

    self.assertEmpty(findings)
示例#22
0
  def testAnalyzeFindsFlexibleParents(self):
    yaml = {'literals': ['field1', 'field2', 'field3', 'field4']}
    field_universe = field_lib.FieldUniverse(
        [_GetFieldFolder(yaml)])
    yaml = {
        'VAV_parent': {
            'description': 'parent',
            'is_canonical': True,
            'uses': ['field1', 'field4'],
            'opt_uses': ['field2', 'field3']
        },
        'VAV_child1': {
            'description': 'child1',
            'uses': ['field1', 'field4'],
            'opt_uses': ['field2']
        },
        'VAV_child2': {
            'description': 'child2',
            'uses': ['field1', 'field3', 'field4']
        },
        'different_equip_type': {
            'description': 'different',
            'uses': ['field1', 'field3', 'field4']
        },
        'VAV_nomatch': {
            'description': 'nomatch',
            'uses': ['field1', 'field2', 'field3']
        },
    }
    type_folder = _GetEntityTypeFolder(field_universe, yaml)
    universe = _GetEntityTypeUniverse([type_folder])
    manager = entity_type_manager.EntityTypeManager(universe)

    manager.Analyze()

    child1 = universe.GetEntityType('', 'VAV_child1')
    child2 = universe.GetEntityType('', 'VAV_child2')
    child2_nm = universe.GetEntityType('', 'different_equip_type')
    parent = universe.GetEntityType('', 'VAV_parent')
    nomatch = universe.GetEntityType('', 'VAV_nomatch')

    self.assertTrue(parent.HasFindingTypes(
        [findings_lib.OverlappingFlexTypeParentWarning]))
    self.assertFalse(parent.HasFindingTypes(
        [findings_lib.OverlappingFlexTypeChildWarning]))

    self.assertTrue(child1.HasFindingTypes(
        [findings_lib.OverlappingFlexTypeChildWarning]))
    self.assertFalse(child1.HasFindingTypes(
        [findings_lib.OverlappingFlexTypeParentWarning]))

    self.assertTrue(child2.HasFindingTypes(
        [findings_lib.OverlappingFlexTypeChildWarning]))
    self.assertFalse(child2.HasFindingTypes(
        [findings_lib.OverlappingFlexTypeParentWarning]))

    self.assertFalse(child2_nm.HasFindingTypes(
        [findings_lib.OverlappingFlexTypeChildWarning,
         findings_lib.OverlappingFlexTypeParentWarning]))
    self.assertFalse(nomatch.HasFindingTypes(
        [findings_lib.OverlappingFlexTypeChildWarning,
         findings_lib.OverlappingFlexTypeParentWarning]))
示例#23
0
def create_simplified_universe(
) -> presubmit_validate_types_lib.ConfigUniverse:
    """Creates a simplified test universe with minimal configuration for testing.

  Returns:
    config_universe a partially defined ConfigUniverse
  """

    # constant universes
    state_universe = states.STATE_UNIVERSE
    connection_universe = connections.CONNECTION_UNIVERSE
    subfield_universe = subfields.SUBFIELD_UNIVERSE

    # update unit folder with subfield_universe
    unit_folder = unit_lib.UnitFolder(folderpath='units')
    unit_folder.local_namespace.subfields = subfield_universe.GetSubfieldsMap(
        unit_folder.local_namespace.namespace)
    unit_folder.AddFromConfig(config_filename='units/units.yaml',
                              documents=[units.UNIT_DOCUMENT])

    unit_universe = unit_lib.UnitUniverse(folders=[unit_folder])

    # subfield universe has to validate unit universe
    subfield_universe.ValidateUnits(unit_universe)

    # field universe depends on subfield and state universes
    field_folder = field_lib.FieldFolder(folderpath='fields')
    field_folder.local_namespace.subfields = subfield_universe.GetSubfieldsMap(
        field_folder.local_namespace.namespace)
    field_folder.local_namespace.states = state_universe.GetStatesMap(
        field_folder.local_namespace.namespace)

    field_folder.AddFromConfig(config_filename='fields/telemetry_fields.yaml',
                               documents=[fields.TELEMETRY_FIELDS_DOCUMENT])
    field_folder.AddFromConfig(config_filename='fields/metadata_fields.yaml',
                               documents=[fields.METADATA_FIELDS_DOCUMENT])

    field_universe = field_lib.FieldUniverse(folders=[field_folder])

    # entity type universe depends on field universe
    global_type_folder = entity_type_lib.EntityTypeFolder(
        folderpath='entity_types', field_universe=field_universe)
    facilities_type_folder = entity_type_lib.EntityTypeFolder(
        folderpath='FACILITIES/entity_types', field_universe=field_universe)
    hvac_type_folder = entity_type_lib.EntityTypeFolder(
        folderpath='HVAC/entity_types', field_universe=field_universe)

    global_type_folder.AddFromConfig(
        config_filename='entity_types/global.yaml',
        documents=[types.GLOBAL_TYPES_DOCUMENT])
    facilities_type_folder.AddFromConfig(
        config_filename='FACILITIES/entity_types/Facilities.yaml',
        documents=[types.FACILITIES_TYPES_DOCUMENT])
    hvac_type_folder.AddFromConfig(
        config_filename='HVAC/entity_types/ANALYSIS.yaml',
        documents=[types.HVAC_ANALYSIS_TYPES_DOCUMENT])
    hvac_type_folder.AddFromConfig(
        config_filename='HVAC/entity_types/ABSTRACT.yaml',
        documents=[types.HVAC_ABSTRACT_TYPES_DOCUMENT])
    hvac_type_folder.AddFromConfig(
        config_filename='HVAC/entity_types/CHWS.yaml',
        documents=[types.HVAC_CHWS_TYPES_DOCUMENT])
    hvac_type_folder.AddFromConfig(
        config_filename='HVAC/entity_types/GENERALTYPES.yaml',
        documents=[types.HVAC_GENERAL_TYPES_DOCUMENT])
    hvac_type_folder.AddFromConfig(
        config_filename='HVAC/entity_types/SDC.yaml',
        documents=[types.HVAC_SDC_TYPES_DOCUMENT])
    hvac_type_folder.AddFromConfig(
        config_filename='HVAC/entity_types/DMP.yaml',
        documents=[types.HVAC_DMP_TYPES_DOCUMENT])

    entity_type_universe = entity_type_lib.EntityTypeUniverse(
        entity_type_folders=[
            global_type_folder, facilities_type_folder, hvac_type_folder
        ])

    config_universe = presubmit_validate_types_lib.ConfigUniverse(
        entity_type_universe=entity_type_universe,
        field_universe=field_universe,
        subfield_universe=subfield_universe,
        state_universe=state_universe,
        connection_universe=connection_universe,
        unit_universe=unit_universe)

    # call this to expand inherited fields
    namespace_validator.NamespaceValidator(
        config_universe.GetEntityTypeNamespaces())

    return config_universe