Example #1
0
    def testConfigUniverseGetUnitsForMeasurementMultipleNoUnits(self):
        doc = {
            'powerfactor': [{
                'no_units': 'STANDARD'
            }, 'another_one'],
            'voltageratio': [{
                'no_units': 'STANDARD'
            }],
        }
        folder = unit_lib.UnitFolder('units/anyfolder')
        folder.AddFromConfig([doc], 'units/anyfolder/units.yaml')
        unit_universe = unit_lib.UnitUniverse([folder])

        config_universe = presubmit_validate_types_lib.ConfigUniverse(
            subfield_universe=None,
            field_universe=None,
            entity_type_universe=None,
            state_universe=None,
            connection_universe=None,
            unit_universe=unit_universe)
        units1 = config_universe.GetUnitsForMeasurement('powerfactor_sensor')
        units2 = config_universe.GetUnitsForMeasurement('voltageratio_sensor')

        self.assertSameElements(['no_units', 'another_one'], units1)
        self.assertSameElements(['no_units'], units2)
Example #2
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'))
Example #3
0
    def testConfigUniverseGetUnitsForMeasurement(self):
        folder = unit_lib.UnitFolder('units/anyfolder')
        namespace = folder.local_namespace
        namespace.InsertUnit(
            unit_lib.Unit('degrees_celsius', 'temperature', False))
        namespace.InsertUnit(unit_lib.Unit('kelvin', 'temperature', True))
        unit_universe = unit_lib.UnitUniverse([folder])

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

        units = config_universe.GetUnitsForMeasurement(
            'zone_temperature_sensor')
        self.assertSameElements(['degrees_celsius', 'kelvin'], units)
        units = config_universe.GetUnitsForMeasurement('temperature_sensor')
        self.assertSameElements(['degrees_celsius', 'kelvin'], units)
        units = config_universe.GetUnitsForMeasurement(
            '/zone_temperature_sensor')
        self.assertSameElements(['degrees_celsius', 'kelvin'], units)
        units = config_universe.GetUnitsForMeasurement('/temperature_sensor')
        self.assertSameElements(['degrees_celsius', 'kelvin'], units)
        units = config_universe.GetUnitsForMeasurement('pressure_sensor')
        self.assertIsNone(units)
        units = config_universe.GetUnitsForMeasurement(
            'discharge_fan_lost_power_alarm')
        self.assertIsNone(units)
Example #4
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)
Example #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())
Example #6
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))
Example #7
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