Beispiel #1
0
    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)
Beispiel #2
0
    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())
Beispiel #3
0
    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)
Beispiel #4
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)
Beispiel #5
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]))
Beispiel #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)
Beispiel #7
0
    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())
Beispiel #8
0
# 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',