Exemplo n.º 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)
Exemplo n.º 2
0
    def testParseFieldFoldersFromGoodFilesWithSubfieldUniverse(self):
        subfield_folders = parse.ParseSubfieldFoldersFromFiles(
            [self.global_subfields_file, self.local_subfields_file])
        subfield_universe = subfield_lib.SubfieldUniverse(subfield_folders)

        field_folders = parse.ParseFieldFoldersFromFiles(
            [self.global_fields_file, self.local_fields_file],
            subfield_universe=subfield_universe)
        # Should have two namespace objects
        self.assertLen(field_folders, 2)
        for folder in field_folders:
            self.assertEmpty(folder.GetFindings())
            if folder.parent_namespace is None:
                # check global namespace
                # Should have 4 fields in global namespace
                global_fields = folder.local_namespace.fields
                self.assertLen(global_fields, 4)
                self.assertIn(frozenset({'fan', 'run', 'status'}),
                              global_fields)
                self.assertIn(frozenset({'dryer', 'run', 'status'}),
                              global_fields)
                self.assertIn(frozenset({'command', 'fan', 'run'}),
                              global_fields)
                self.assertIn(frozenset({'current', 'sensor'}), global_fields)
            else:
                # check local namespace
                self.assertIn(
                    frozenset({'air', 'sensor', 'temperature', 'zone'}),
                    folder.local_namespace.fields)
Exemplo n.º 3
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())
Exemplo n.º 4
0
    def testParseUnitFoldersFromGoodFiles(self):
        subfield_folders = parse.ParseSubfieldFoldersFromFiles(
            [self.global_subfields_file, self.local_subfields_file])
        subfield_universe = subfield_lib.SubfieldUniverse(subfield_folders)

        unit_folders = parse.ParseUnitFoldersFromFiles(
            [self.global_units_file, self.local_units_file],
            subfield_universe=subfield_universe)
        self.assertLen(unit_folders, 2)
        for folder in unit_folders:
            self.assertEmpty(folder.GetFindings())
            units_map = folder.local_namespace.units
            if not folder.local_namespace.namespace:
                # global namespace
                self.assertEqual(units_map['amperes'],
                                 unit_lib.Unit('amperes', 'current', True))
                self.assertEqual(units_map['milliamperes'],
                                 unit_lib.Unit('milliamperes', 'current'))
            else:
                # local namespace
                self.assertEqual(folder.local_namespace.namespace, 'GOOD')
                self.assertEqual(units_map['kelvins'],
                                 unit_lib.Unit('kelvins', 'temperature', True))
                self.assertEqual(
                    units_map['degrees_celsius'],
                    unit_lib.Unit('degrees_celsius', 'temperature'))
                self.assertEqual(
                    units_map['degrees_fahrenheit'],
                    unit_lib.Unit('degrees_fahrenheit', 'temperature'))
Exemplo n.º 5
0
    def testSubfieldUniverseGetFindings(self):
        context = findings_lib.FileContext(_GOOD_PATH + '/file.yaml')
        folder = subfield_lib.SubfieldFolder(_GOOD_PATH)
        folder.AddFinding(
            findings_lib.InconsistentFileLocationError('', context))
        namespace = folder.local_namespace
        namespace.AddFinding(
            findings_lib.DuplicateSubfieldDefinitionError(
                namespace,
                subfield_lib.Subfield(
                    'two', subfield_lib.SubfieldCategory.POINT_TYPE), context))
        subfield_one = subfield_lib.Subfield(
            'one', subfield_lib.SubfieldCategory.POINT_TYPE, 'thing')
        subfield_one.AddFinding(
            findings_lib.MissingSubfieldDescriptionWarning('one', context))
        namespace.InsertSubfield(subfield_one)

        subfields_universe = subfield_lib.SubfieldUniverse([folder])

        findings = subfields_universe.GetFindings()
        self.assertLen(findings, 3)
        self.assertTrue(
            subfields_universe.HasFindingTypes([
                findings_lib.InconsistentFileLocationError,
                findings_lib.DuplicateSubfieldDefinitionError,
                findings_lib.MissingSubfieldDescriptionWarning
            ]))
        self.assertFalse(subfields_universe.IsValid())
    def testParseUnitFoldersFromGoodFiles(self):
        subfield_folders = parse.ParseSubfieldFoldersFromFiles(
            [self.global_subfields_file, self.local_subfields_file])
        subfield_universe = subfield_lib.SubfieldUniverse(subfield_folders)

        unit_folders = parse.ParseUnitFoldersFromFiles(
            [self.global_units_file], subfield_universe=subfield_universe)
        self.assertTrue(unit_folders)
        for folder in unit_folders:
            self.assertEmpty(folder.GetFindings())
            current_units = folder.local_namespace.GetUnitsForMeasurement(
                'current')
            temperature_units = folder.local_namespace.GetUnitsForMeasurement(
                'temperature')
            if not folder.local_namespace.namespace:
                # global namespace
                self.assertEqual(current_units['amperes'],
                                 unit_lib.Unit('amperes', True))
                self.assertEqual(current_units['milliamperes'],
                                 unit_lib.Unit('milliamperes'))
                self.assertEqual(temperature_units['kelvins'],
                                 unit_lib.Unit('kelvins', True))
                self.assertEqual(temperature_units['degrees_celsius'],
                                 unit_lib.Unit('degrees_celsius'))
                self.assertEqual(temperature_units['degrees_fahrenheit'],
                                 unit_lib.Unit('degrees_fahrenheit'))
Exemplo n.º 7
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)
Exemplo n.º 8
0
    def testParseUnitFoldersFromBadFileWithSubfieldUniverse(self):
        subfield_folders = parse.ParseSubfieldFoldersFromFiles(
            [self.global_subfields_file, self.local_subfields_file])
        subfield_universe = subfield_lib.SubfieldUniverse(subfield_folders)

        bad_units = base_lib.PathParts(
            root=self.base_dir, relative_path='BAD/units/bad_units.yaml')
        unit_folders = parse.ParseUnitFoldersFromFiles(
            [bad_units], subfield_universe=subfield_universe)
        local_folder = unit_folders[0]
        self.assertTrue(
            local_folder.HasFindingTypes(
                [findings_lib.UnknownMeasurementTypeError]))
Exemplo n.º 9
0
  def testSubfieldUniverseGetSubfieldsMap(self):
    # Create field folders
    folder = subfield_lib.SubfieldFolder(_GOOD_PATH)
    namespace = folder.local_namespace
    namespace.InsertSubfield(subfield_lib.Subfield(
        'one', subfield_lib.SubfieldCategory.POINT_TYPE))
    namespace.InsertSubfield(subfield_lib.Subfield(
        'two', subfield_lib.SubfieldCategory.POINT_TYPE))
    subfields_universe = subfield_lib.SubfieldUniverse([folder])

    subfields_map = subfields_universe.GetSubfieldsMap('mynamespace')

    self.assertIn('one', subfields_map)
    self.assertIn('two', subfields_map)
Exemplo n.º 10
0
#    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 subfield universe required for testing."""

from yamlformat.validator import subfield_lib

SUBFIELD_FOLDER = subfield_lib.SubfieldFolder(folderpath='subfields')
SUBFIELD_UNIVERSE = subfield_lib.SubfieldUniverse(folders=[SUBFIELD_FOLDER])

SUBFIELD_FOLDER.AddFromConfig(config_filename='subfields/subfields.yaml',
                              documents=[{
                                  'aggregation': {
                                      'average': 'foobar',
                                      'max': 'foobar',
                                      'min': 'foobar',
                                      'total': 'foobar',
                                  },
                                  'component': {
                                      'battery': 'foobar',
                                      'cable': 'foobar',
                                      'coil': 'foobar',
                                      'compressor': 'foobar',
                                      'condenser': 'foobar',