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'))
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())
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)
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)
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)
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)
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)
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)
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
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)
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'))
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)
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 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)
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
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