Esempio n. 1
0
    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]))
Esempio n. 2
0
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)
Esempio n. 3
0
    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]))
Esempio n. 4
0
    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]))
Esempio n. 5
0
 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)
Esempio n. 6
0
    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)