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)
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 testStateUniverseGetStatesMap(self): folder = state_lib.StateFolder(_GOOD_PATH) namespace = folder.local_namespace namespace.InsertState(state_lib.State('STATE_ONE', 'one')) namespace.InsertState(state_lib.State('STATE_TWO', 'two')) state_universe = state_lib.StateUniverse([folder]) states = state_universe.GetStatesMap('mynamespace') self.assertIn('STATE_ONE', states) self.assertIn('STATE_TWO', states)
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 testParseFieldFoldersFromBadFileWithStateUniverse(self): state_folders = parse.ParseStateFoldersFromFiles( [self.global_states_file, self.local_states_file]) state_universe = state_lib.StateUniverse(state_folders) bad_fields = base_lib.PathParts( root=self.base_dir, relative_path='BAD/fields/bad_state_fields.yaml') field_folders = parse.ParseFieldFoldersFromFiles( [bad_fields], state_universe=state_universe) local_folder = field_folders[1] self.assertTrue( local_folder.HasFindingTypes( [findings_lib.InvalidStateFormatError])) self.assertTrue( local_folder.HasFindingTypes([findings_lib.DuplicateStateError])) self.assertTrue( local_folder.HasFindingTypes([findings_lib.MissingStateError]))
def testParseFieldFoldersFromGoodFilesWithStateUniverse(self): state_folders = parse.ParseStateFoldersFromFiles( [self.global_states_file, self.local_states_file]) state_universe = state_lib.StateUniverse(state_folders) field_folders = parse.ParseFieldFoldersFromFiles( [self.state_fields_file], state_universe=state_universe) self.assertLen(field_folders, 2) for folder in field_folders: self.assertEmpty(folder.GetFindings()) if folder.parent_namespace is not None: # field_two uses local states and isn't up-leveled self.assertSameElements([frozenset({'field', 'two'})], folder.local_namespace.fields) else: self.assertSameElements([ frozenset({'field', 'one'}), frozenset({'field', 'three'}) ], folder.local_namespace.fields)
def testStateUniverseGetFindings(self): context = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH)) folder = state_lib.StateFolder(_GOOD_PATH) folder.AddFinding( findings_lib.InconsistentFileLocationError('', context)) namespace = folder.local_namespace namespace.AddFinding( findings_lib.DuplicateStateDefinitionError( state_lib.State('STATE'), 'namespace')) state = state_lib.State('STATE', 'description') state.AddFinding(findings_lib.MissingStateDescriptionWarning(state)) namespace.InsertState(state) state_universe = state_lib.StateUniverse([folder]) findings = state_universe.GetFindings() self.assertLen(findings, 3) self.assertTrue( state_universe.HasFindingTypes([ findings_lib.InconsistentFileLocationError, findings_lib.DuplicateStateDefinitionError, findings_lib.MissingStateDescriptionWarning ])) self.assertFalse(state_universe.IsValid())
# you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an AS IS BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Sets up a minimal state universe required for testing.""" from yamlformat.validator import state_lib STATE_FOLDER = state_lib.StateFolder(folderpath='states') STATE_UNIVERSE = state_lib.StateUniverse(folders=[STATE_FOLDER]) STATE_FOLDER.AddFromConfig(config_filename='states/states.yaml', documents=[{ 'ON': 'foobar', 'OFF': 'foobar', 'AUTO': 'foobar', 'MANUAL': 'foobar', 'OPEN': 'foobar', 'CLOSED': 'foobar', 'LOW': 'foobar', 'MEDIUM': 'foobar', 'HIGH': 'foobar', 'OCCUPIED': 'foobar', 'UNOCCUPIED': 'foobar', 'COMMISSIONING': 'foobar',