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())
Beispiel #2
0
 def CreateUnitFolder(folderpath, parent_namespace):
     unit_folder = unit_lib.UnitFolder(folderpath, parent_namespace)
     if subfield_universe:
         unit_folder.local_namespace.subfields = (
             subfield_universe.GetSubfieldsMap(
                 unit_folder.local_namespace.namespace))
     return unit_folder
Beispiel #3
0
 def testUnitFolderAddInvalidUnitFails(self):
     folder = unit_lib.UnitFolder(_GOOD_PATH)
     folder.AddUnit('invalid', unit_lib.Unit('bad-unit'))
     self.assertIsNone(
         folder.local_namespace.GetUnitsForMeasurement('invalid'))
     self.assertIsInstance(folder.GetFindings()[0],
                           findings_lib.InvalidUnitNameError)
Beispiel #4
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)
Beispiel #5
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)
 def testUnitFolderAddFromConfigTooFewStandardUnits(self):
     doc = {
         'temperature': ['kelvins', 'degrees_celsius'],
     }
     folder = unit_lib.UnitFolder(_GOOD_PATH)
     folder.AddFromConfig([doc], '{0}/file.yaml'.format(_GOOD_PATH))
     self.assertIsInstance(folder.GetFindings()[0],
                           findings_lib.StandardUnitCountError)
 def testUnitFolderAddDuplicateUnitFails(self):
     folder = unit_lib.UnitFolder(_GOOD_PATH)
     folder.AddUnit(unit_lib.Unit('unit', 'measurement'))
     self.assertIn('unit', folder.local_namespace.units)
     self.assertEmpty(folder.local_namespace.GetFindings())
     folder.AddUnit(unit_lib.Unit('unit', 'duplicate'))
     self.assertIsInstance(folder.local_namespace.GetFindings()[0],
                           findings_lib.DuplicateUnitDefinitionError)
    def testUnitUniverseGetUnitsMap(self):
        folder = unit_lib.UnitFolder(_GOOD_PATH)
        namespace = folder.local_namespace
        namespace.InsertUnit(
            unit_lib.Unit('degrees_celsius', 'temperature', False))
        namespace.InsertUnit(unit_lib.Unit('kelvins', 'temperature', True))
        unit_universe = unit_lib.UnitUniverse([folder])

        units = unit_universe.GetUnitsMap('mynamespace')

        self.assertIn('degrees_celsius', units)
        self.assertIn('kelvins', units)
 def testUnitFolderAddFromConfigUnknownUnitTag(self):
     doc = {
         'temperature': [{
             'kelvins': 'STANDARD'
         }, {
             'wrong': 'BAD_TAG'
         }],
     }
     folder = unit_lib.UnitFolder(_GOOD_PATH)
     folder.AddFromConfig([doc], '{0}/file.yaml'.format(_GOOD_PATH))
     self.assertIsInstance(folder.GetFindings()[0],
                           findings_lib.UnknownUnitTagError)
 def testUnitFolderAddFromConfigInvalidUnitFormat(self):
     doc = {
         'temperature': [{
             'kelvins': 'STANDARD'
         }, {
             'something': 'oops',
             'huh': 'what'
         }],
     }
     folder = unit_lib.UnitFolder(_GOOD_PATH)
     folder.AddFromConfig([doc], '{0}/file.yaml'.format(_GOOD_PATH))
     self.assertIsInstance(folder.GetFindings()[0],
                           findings_lib.InvalidUnitFormatError)
Beispiel #11
0
    def testUnitUniverseGetUnitsForMeasurement(self):
        folder = unit_lib.UnitFolder(_GOOD_PATH)
        namespace = folder.local_namespace
        namespace.InsertUnit('temperature',
                             unit_lib.Unit('degrees_celsius', False))
        namespace.InsertUnit('temperature', unit_lib.Unit('kelvins', True))
        namespace.InsertUnit('percent', unit_lib.Unit('percent', True))
        unit_universe = unit_lib.UnitUniverse([folder])

        units = unit_universe.GetUnitsForMeasurement('temperature',
                                                     'mynamespace')

        self.assertCountEqual(['degrees_celsius', 'kelvins'], units)
Beispiel #12
0
    def testUnitFolderAddFromConfigAliasIsAlias(self):
        doc = {
            'distance': [{
                'meters': 'STANDARD'
            }, 'feet'],
            'length': 'distance',
            'level': 'length',
        }
        folder = unit_lib.UnitFolder(_GOOD_PATH)

        folder.AddFromConfig([doc], '{0}/file.yaml'.format(_GOOD_PATH))

        self.assertIsInstance(folder.local_namespace.GetFindings()[0],
                              findings_lib.MeasurementAliasIsAliasedError)
Beispiel #13
0
    def testUnitFolderAddFromConfigBadAliasBase(self):
        doc = {
            'length': 'invalid',
            'distance': [{
                'meters': 'STANDARD'
            }, 'feet'],
        }
        folder = unit_lib.UnitFolder(_GOOD_PATH)

        folder.AddFromConfig([doc], '{0}/file.yaml'.format(_GOOD_PATH))

        self.assertIsInstance(
            folder.local_namespace.GetFindings()[0],
            findings_lib.UnrecognizedMeasurementAliasBaseError)
Beispiel #14
0
    def testUnitFolderAddFromConfig(self):
        doc = {
            'temperature': [{
                'kelvins': 'STANDARD'
            }, 'degrees_celsius'],
        }
        folder = unit_lib.UnitFolder(_GOOD_PATH)
        folder.AddFromConfig([doc], '{0}/file.yaml'.format(_GOOD_PATH))

        units = folder.local_namespace.GetUnitsForMeasurement('temperature')
        self.assertEmpty(folder.GetFindings())
        self.assertCountEqual(['kelvins', 'degrees_celsius'], units)
        self.assertEqual(units['kelvins'], unit_lib.Unit('kelvins', True))
        self.assertEqual(units['degrees_celsius'],
                         unit_lib.Unit('degrees_celsius', False))
Beispiel #15
0
    def testFindingAddedForInvalidNamespace(self):
        folder = unit_lib.UnitFolder(_GOOD_PATH)
        namespace = folder.local_namespace
        namespace.parent_namespace = unit_lib.UnitNamespace('fake_parent')

        namespace.InsertUnit('temperature',
                             unit_lib.Unit('degrees_celsius', False))
        unit_universe = unit_lib.UnitUniverse([folder])

        findings_universe = findings_lib.FindingsUniverse([folder])
        findings = findings_universe.GetFindings()

        self.assertLen(findings, 1)
        self.assertTrue(
            unit_universe.HasFindingTypes(
                [findings_lib.InvalidUnitNamespaceError]))
        self.assertFalse(unit_universe.IsValid())
    def testUnitFolderAddFromConfigMultipleNoUnits(self):
        doc = {
            'powerfactor': [{
                'no_units': 'STANDARD'
            }, 'another_one'],
            'voltageratio': [{
                'no_units': 'STANDARD'
            }],
        }
        folder = unit_lib.UnitFolder(_GOOD_PATH)
        folder.AddFromConfig([doc], '{0}/file.yaml'.format(_GOOD_PATH))
        units = folder.local_namespace.units

        self.assertEmpty(folder.GetFindings())
        expected = [
            'no_units_powerfactor', 'another_one', 'no_units_voltageratio'
        ]
        self.assertCountEqual(expected, units)
Beispiel #17
0
    def testUnitFolderAddFromConfigMeasurementAlias(self):
        doc = {
            'length': 'distance',
            'distance': [{
                'meters': 'STANDARD'
            }, 'feet'],
        }
        folder = unit_lib.UnitFolder(_GOOD_PATH)
        expected_units = ['meters', 'feet']

        folder.AddFromConfig([doc], '{0}/file.yaml'.format(_GOOD_PATH))
        distance_units = folder.local_namespace.GetUnitsForMeasurement(
            'distance')
        length_units = folder.local_namespace.GetUnitsForMeasurement('length')

        self.assertEmpty(folder.local_namespace.GetFindings())
        self.assertCountEqual(expected_units, distance_units)
        self.assertCountEqual(expected_units, length_units)
Beispiel #18
0
    def testUnitFolderAddFromConfigMultipleNoUnits(self):
        doc = {
            'powerfactor': [{
                'no_units': 'STANDARD'
            }, 'another_one'],
            'voltageratio': [{
                'no_units': 'STANDARD'
            }],
        }
        folder = unit_lib.UnitFolder(_GOOD_PATH)
        folder.AddFromConfig([doc], '{0}/file.yaml'.format(_GOOD_PATH))
        pf_units = folder.local_namespace.GetUnitsForMeasurement('powerfactor')
        vr_units = folder.local_namespace.GetUnitsForMeasurement(
            'voltageratio')

        self.assertEmpty(folder.GetFindings())
        self.assertCountEqual(['no_units', 'another_one'], pf_units)
        self.assertCountEqual(['no_units'], vr_units)
Beispiel #19
0
    def testUnitFolderAddFromConfigDuplicateAlias(self):
        doc_1 = {
            'distance': [{
                'yards': 'STANDARD'
            }, 'inches'],
            'level': 'distance',
        }
        doc_2 = {
            'length': [{
                'meters': 'STANDARD'
            }, 'feet'],
            'level': 'length',
        }
        folder = unit_lib.UnitFolder(_GOOD_PATH)

        folder.AddFromConfig([doc_1, doc_2],
                             '{0}/file.yaml'.format(_GOOD_PATH))

        self.assertIsInstance(folder.local_namespace.GetFindings()[0],
                              findings_lib.DuplicateMeasurementAliasError)
 def testUnitFolderAddInvalidUnitFails(self):
     folder = unit_lib.UnitFolder(_GOOD_PATH)
     folder.AddUnit(unit_lib.Unit('bad-unit', 'invalid'))
     self.assertNotIn('bad-unit', folder.local_namespace.units)
     self.assertIsInstance(folder.GetFindings()[0],
                           findings_lib.IllegalCharacterError)
 def testUnitFolderAddValidUnit(self):
     folder = unit_lib.UnitFolder(_GOOD_PATH)
     folder.AddUnit(unit_lib.Unit('unit', 'measurement'))
     self.assertIn('unit', folder.local_namespace.units)
     self.assertEmpty(folder.GetFindings())
Beispiel #22
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