def testParseStateFoldersFromBadFileDuplicateKeys(self): bad_states = base_lib.PathParts( root=self.base_dir, relative_path='BAD/states/duplicate_states.yaml') state_folders = parse.ParseStateFoldersFromFiles([bad_states]) self.assertLen(state_folders, 1) state_folder = state_folders[0] self.assertTrue( state_folder.HasFindingTypes([findings_lib.DuplicateKeyError]))
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 testParseStateFoldersFromBadFile(self): bad_states = base_lib.PathParts( root=self.base_dir, relative_path='BAD/states/bad_states.yaml') state_folders = parse.ParseStateFoldersFromFiles([bad_states]) self.assertLen(state_folders, 1) state_folder = state_folders[0] self.assertTrue( state_folder.HasFindingTypes( [findings_lib.MissingStateDescriptionWarning])) self.assertTrue( state_folder.HasFindingTypes([findings_lib.IllegalCharacterError])) self.assertTrue( state_folder.HasFindingTypes([findings_lib.IllegalKeyTypeError]))
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 testParseStateFoldersFromGoodFiles(self): state_folders = parse.ParseStateFoldersFromFiles( [self.global_states_file, self.local_states_file]) # Should have two folder objects self.assertLen(state_folders, 2) for folder in state_folders: self.assertEmpty(folder.GetFindings()) states_map = folder.local_namespace.states if not folder.local_namespace.namespace: # check global namespace self.assertIn('ON', states_map) self.assertIn('OFF', states_map) self.assertIn('AUTO', states_map) else: # check local namespace self.assertEqual(folder.local_namespace.namespace, 'GOOD') self.assertIn('GOOD', states_map) self.assertIn('BETTER', states_map) self.assertIn('BEST', states_map)
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)