Ejemplo n.º 1
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'))
Ejemplo n.º 2
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())
Ejemplo n.º 3
0
    def testAddFromConfigWithStateListInvalidFieldFormat(self):
        yaml = {'literals': [{'field_name': ['A', 'B'], 'bad': ['WHOOPS']}]}
        folder = field_lib.FieldFolder('/fields')
        rel_filepath = '/fields/f.yaml'
        folder.AddFromConfig([yaml], rel_filepath)

        self.assertIsInstance(folder.GetFindings()[0],
                              findings_lib.InvalidFieldFormatError)
Ejemplo n.º 4
0
    def testAddFromConfigIllegalCharactersInName(self):
        yaml = {'literals': ['field_!ame']}
        folder = field_lib.FieldFolder('/fields')
        rel_filepath = '/fields/f.yaml'
        folder.AddFromConfig([yaml], rel_filepath)

        self.assertNotIn('field_!ame', folder.local_namespace.fields)
        self.assertIsInstance(folder.GetFindings()[0],
                              findings_lib.InvalidFieldNameError)
Ejemplo n.º 5
0
    def testAddFromConfigIllegalKeyType(self):
        yaml = {'literals': [False]}
        folder = field_lib.FieldFolder('/fields')
        rel_filepath = '/fields/f.yaml'
        folder.AddFromConfig([yaml], rel_filepath)

        self.assertNotIn(False, folder.local_namespace.fields)
        self.assertIsInstance(folder.GetFindings()[0],
                              findings_lib.IllegalKeyTypeError)
Ejemplo n.º 6
0
  def testAddFromConfigWithStateList(self):
    yaml = {'literals': [{'field_name': ['A', 'B']}]}
    folder = field_lib.FieldFolder('/fields')
    rel_filepath = '/fields/f.yaml'
    folder.AddFromConfig([yaml], rel_filepath)

    self.assertEmpty(folder.GetFindings())
    self.assertCountEqual(['A', 'B'], folder.local_namespace.fields[frozenset(
        {'field', 'name'})].states)
Ejemplo n.º 7
0
  def testAddFromConfig(self):
    yaml = {'literals': ['field_name']}
    folder = field_lib.FieldFolder('/fields')
    rel_filepath = '/fields/f.yaml'
    folder.AddFromConfig([yaml], rel_filepath)

    self.assertIn(frozenset({'field', 'name'}), folder.local_namespace.fields)
    created_field = folder.local_namespace.fields[frozenset({'field', 'name'})]
    self.assertEqual(created_field.context.filepath, rel_filepath)
Ejemplo n.º 8
0
    def testAddFromConfigNameRegex(self):
        yaml = {'literals': ['f_n', '2n', 'n2', 'n', 'nN', '_n', 'n_', 'n_1']}
        folder = field_lib.FieldFolder('/fields')
        rel_filepath = '/fields/f.yaml'
        folder.AddFromConfig([yaml], rel_filepath)

        self.assertSameElements(
            [frozenset({'f', 'n'}),
             frozenset({'n2'}),
             frozenset({'n'})], folder.local_namespace.fields)
Ejemplo n.º 9
0
 def CreateFieldFolder(folderpath, parent_namespace):
     field_folder = field_lib.FieldFolder(folderpath, parent_namespace)
     namespace = field_folder.local_namespace.namespace
     if subfield_universe:
         field_folder.local_namespace.subfields = (
             subfield_universe.GetSubfieldsMap(namespace))
     if state_universe:
         field_folder.local_namespace.states = (
             state_universe.GetStatesMap(namespace))
     return field_folder
Ejemplo n.º 10
0
    def testAddFromConfigBadYamlFilename(self):
        yaml = {'literals': ['field_name']}
        folder = field_lib.FieldFolder('/fields')
        rel_filepath = '/fields/f.yaml'
        bad_filepath = 'something/' + rel_filepath
        folder.AddFromConfig([yaml], bad_filepath)

        self.assertNotIn(frozenset({'field', 'name'}),
                         folder.local_namespace.fields)
        self.assertIsInstance(folder.GetFindings()[0],
                              findings_lib.InconsistentFileLocationError)
Ejemplo n.º 11
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'))
Ejemplo n.º 12
0
  def testAddFromBadConfigFormat(self):
    yaml = {'literaaaals': ['field_one']}
    yaml2 = {'literals': ['field_two']}
    folder = field_lib.FieldFolder('/fields')
    rel_filepath = '/fields/f.yaml'
    folder.AddFromConfig([yaml, yaml2], rel_filepath)

    self.assertNotIn(frozenset({'field', 'one'}), folder.local_namespace.fields)
    self.assertIn(frozenset({'field', 'two'}), folder.local_namespace.fields)
    self.assertIsInstance(folder.GetFindings()[0],
                          findings_lib.UnrecognizedFormatError)
Ejemplo n.º 13
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)
Ejemplo n.º 14
0
    def testAddFieldRejectsDuplicateSubfields(self):
        folder = field_lib.FieldFolder('/fields')
        field = 'field_name'
        field_dup = 'field_field_name'
        rel_filepath = '/fields/f.yaml'
        context = findings_lib.FileContext(rel_filepath)

        folder.AddField(field_lib.Field(field, file_context=context))
        self.assertEmpty(folder.GetFindings())
        folder.AddField(field_lib.Field(field_dup, file_context=context))
        self.assertLen(folder.GetFindings(), 1)
        self.assertIsInstance(folder.GetFindings()[0],
                              findings_lib.DuplicateSubfieldError)
Ejemplo n.º 15
0
def _GetFieldFolder(yaml, namespace=''):
  folderpath = os.path.join(namespace, 'fields')
  field_folder = field_lib.FieldFolder(folderpath)
  good_filepath = os.path.join(folderpath, 'f.yaml')
  field_folder.AddFromConfig([yaml], good_filepath)
  return field_folder
Ejemplo n.º 16
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