예제 #1
0
    def testCombinedEtagRequirements(self, mock_universe):
        validator = entity_instance.CombinationValidator(
            mock_universe, _UPDATE_CFG, {})
        no_tag = entity_instance.EntityInstance(_UPDATE, 'VAV-123')
        no_tag_delete = entity_instance.EntityInstance(_DELETE, 'VAV-123')

        self.assertFalse(validator.Validate(no_tag))
        self.assertTrue(validator.Validate(no_tag_delete))
예제 #2
0
    def testValidate_requiresEtagOnUpdate(self):
        valid_instance = entity_instance.EntityInstance(
            _UPDATE,
            'FACILITIES/123456',
            etag='a12345',
            update_mask=['connections'])
        invalid_instance = entity_instance.EntityInstance(
            _UPDATE, 'FACILITIES/123456', update_mask=['connections'])

        self.assertTrue(self.update_validator.Validate(valid_instance))
        self.assertFalse(self.update_validator.Validate(invalid_instance))
    def testInstanceEtagNotRequiredForDelete(self):
        no_tag = entity_instance.EntityInstance(_UPDATE,
                                                entity_id='CDM/123456',
                                                guid='VAV-123-guid',
                                                code='VAV-123')
        no_tag_delete = entity_instance.EntityInstance(_DELETE,
                                                       entity_id='CDM/123456',
                                                       guid='VAV-123-guid',
                                                       code='VAV-123')

        self.assertFalse(self.update_validator.Validate(no_tag))
        self.assertTrue(self.update_validator.Validate(no_tag_delete))
예제 #4
0
    def testInstanceLinkSourceFieldMustExist(self):
        src_ok = entity_instance.EntityInstance(
            _UPDATE,
            'AHU-1',
            links=[link.Link('CTRL-1', {'run_status': 'run_status'})],
            etag='123')
        bad_src_field = entity_instance.EntityInstance(
            _UPDATE,
            'AHU-1',
            links=[link.Link('CTRL-1', {'nonexistent_status': 'run_status'})],
            etag='123')

        self.assertFalse(self.update_validator.Validate(bad_src_field))
        self.assertTrue(self.update_validator.Validate(src_ok))
예제 #5
0
    def testGraphGoodConnection(self, mock_universe):
        target = entity_instance.EntityInstance(
            _ADD,
            'VAV-123',
            connections=[connection.Connection('FEEDS', 'AHU-1')])
        source = entity_instance.EntityInstance(
            _ADD,
            'AHU-1',
            connections=[connection.Connection('FEEDS', 'AHU-1')])
        instances = {'VAV-123': target, 'AHU-1': source}
        validator = entity_instance.GraphValidator(mock_universe, _INIT_CFG,
                                                   instances)

        self.assertTrue(validator.Validate(target))
예제 #6
0
def _CreateEntityInstances(yaml_filename):
    parsed_yaml = instance_parser.ParseYaml(
        path.join(_INSTANCES_PATH, yaml_filename))
    entities = {}
    for entity_name, entity_yaml in parsed_yaml.items():
        entities[entity_name] = entity_instance.EntityInstance(entity_yaml)
    return entities
    def testValidate_EmptyGuid_ReturnsFalse(self):
        entity = entity_instance.EntityInstance(_ADD,
                                                entity_id='CDM/123456',
                                                guid='',
                                                code='VAV-123')

        self.assertFalse(self.init_validator.Validate(entity))
예제 #8
0
    def testInstanceBadOperationOnInit(self, mock_universe):
        entity = entity_instance.EntityInstance(_UPDATE,
                                                'VAV-123',
                                                etag='1234')
        validator = entity_instance.InstanceValidator(mock_universe, _INIT_CFG)

        self.assertFalse(validator.Validate(entity))
    def testInstanceOperationRequiredOnUpdate(self):
        entity = entity_instance.EntityInstance(_UPDATE,
                                                entity_id='CDM/123456',
                                                guid='VAV-123-guid',
                                                code='VAV-123',
                                                etag='1234')

        self.assertFalse(self.init_validator.Validate(entity))
    def testGraphGoodConnection(self):
        target = entity_instance.EntityInstance(
            _ADD,
            entity_id='CDM/123456',
            guid='VAV-123-guid',
            code='VAV-123',
            connections=[connection.Connection('FEEDS', 'AHU-1-guid')])
        source = entity_instance.EntityInstance(
            _ADD,
            entity_id='CDM/987654',
            guid='AHU-1-guid',
            code='AHU-1',
            connections=[connection.Connection('FEEDS', 'AHU-1-guid')])
        instances = {'VAV-123-guid': target, 'AHU-1-guid': source}
        validator = entity_instance.GraphValidator(self.config_universe,
                                                   _INIT_CFG, instances)

        self.assertTrue(validator.Validate(target))
예제 #11
0
    def testGraphOrphanConnection(self, mock_universe):
        target = entity_instance.EntityInstance(
            _ADD,
            'VAV-123',
            connections=[connection.Connection('FEEDS', 'AHU-1')])
        validator = entity_instance.GraphValidator(mock_universe, _INIT_CFG,
                                                   {'VAV-123': target})

        self.assertFalse(validator.Validate(target))
예제 #12
0
    def testValidate_verifiesTypeAgainstNamespace(self):
        instance = entity_instance.EntityInstance(_UPDATE,
                                                  'FACILITIES/123456',
                                                  namespace='FACILITIES',
                                                  type_name='BUILDING',
                                                  etag='a12345',
                                                  update_mask=['connections'])

        self.assertTrue(self.update_validator.Validate(instance))
 def testValidateStates(self):
     parsed = instance_parser.ParseYaml(
         path.join(_TESTCASE_PATH, 'GOOD', 'good_translation_states.yaml'))
     parsed = dict(parsed)
     for raw_entity in list(parsed.keys()):
         entity_parsed = dict(parsed[raw_entity])
         entity = entity_instance.EntityInstance(entity_parsed)
         if not entity.IsValidEntityInstance(self._universe):
             self.fail('exception incorrectly raised')
예제 #14
0
    def testInstanceRequiresEntityTypeToExist(self):
        instance = entity_instance.EntityInstance(
            _UPDATE,
            'FACILITIES/123456',
            namespace='FACILITIES',
            type_name='LIGHTING/NOT_A_LAMP',
            etag='a12345',
            update_mask=['connections'])

        self.assertFalse(self.update_validator.Validate(instance))
예제 #15
0
    def testGraphOrphanLinkOkOnUpdate(self, mock_universe):
        target = entity_instance.EntityInstance(
            _UPDATE,
            'AHU-1',
            links=[link.Link('CTRL-1', {'run_status_1': 'run_status'})],
            etag='123')
        validator = entity_instance.GraphValidator(mock_universe, _UPDATE_CFG,
                                                   {'CTRL-1': target})

        self.assertTrue(validator.Validate(target))
예제 #16
0
    def testGraphOrphanConnectionOkOnUpdate(self, mock_universe):
        target = entity_instance.EntityInstance(
            _UPDATE,
            'VAV-123',
            connections=[connection.Connection('FEEDS', 'AHU-1')],
            etag='123')
        validator = entity_instance.GraphValidator(mock_universe, _UPDATE_CFG,
                                                   {'VAV-123': target})

        self.assertTrue(validator.Validate(target))
    def testValidateMultipleCompliantTranslationWithIdenticalTypes(self):
        parsed = instance_parser.ParseYaml(
            path.join(_TESTCASE_PATH, 'GOOD',
                      'good_translation_identical.yaml'))
        parsed = dict(parsed)
        for entity_name in list(parsed.keys()):
            entity = dict(parsed[entity_name])
            instance = entity_instance.EntityInstance(entity)

            if not instance.IsValidEntityInstance(self._universe):
                self.fail('exception incorrectly raised')
예제 #18
0
    def testGraphAllowsOrphanConnectionOnInit(self):
        target = entity_instance.EntityInstance(
            _UPDATE,
            'VAV-123',
            connections=[connection.Connection('FEEDS', 'AHU-1')],
            etag='123')
        validator = entity_instance.GraphValidator(self.config_universe,
                                                   _UPDATE_CFG,
                                                   {'VAV-123': target})

        self.assertTrue(validator.Validate(target))
예제 #19
0
    def testInstanceLinkSourceFieldValidation(self, mock_fn):
        field_u = field_lib.FieldUniverse([])
        config_u = presubmit_validate_types_lib.ConfigUniverse(
            None, field_u, None, None, None, None)
        mock_fn.side_effect = lambda f, ns: f == 'run_status'

        validator = entity_instance.InstanceValidator(config_u, _UPDATE_CFG)
        src_ok = entity_instance.EntityInstance(
            _UPDATE,
            'AHU-1',
            links=[link.Link('CTRL-1', {'run_status': 'run_status'})],
            etag='123')
        bad_src_field = entity_instance.EntityInstance(
            _UPDATE,
            'AHU-1',
            links=[link.Link('CTRL-1', {'nonexistent_status': 'run_status'})],
            etag='123')

        self.assertFalse(validator.Validate(bad_src_field))
        self.assertTrue(validator.Validate(src_ok))
예제 #20
0
    def testValidateBadEntityTypeFormat(self):
        parsed = dict(
            instance_parser.parse_yaml(
                os.path.join(_TESTCASE_PATH, 'BAD', 'bad_building_type.yaml')))
        entity_name = list(parsed.keys())[0]

        entity = dict(parsed[entity_name])
        instance = entity_instance.EntityInstance(entity, self.universe)

        if instance.IsValidEntityInstance():
            self.fail('exception not raised')
    def testValidateBadEntityType(self):
        parsed = instance_parser.ParseYaml(
            path.join(_TESTCASE_PATH, 'BAD', 'bad_building_type_entity.yaml'))
        parsed = dict(parsed)
        entity_name = list(parsed.keys())[0]

        entity = dict(parsed[entity_name])
        instance = entity_instance.EntityInstance(entity)

        if instance.IsValidEntityInstance(self._universe):
            self.fail('exception not raised')
    def testValidateGoodExample(self):
        parsed = instance_parser.ParseYaml(
            path.join(_TESTCASE_PATH, 'GOOD', 'good_building_type.yaml'))
        parsed = dict(parsed)
        entity_name = list(parsed.keys())[0]

        entity = dict(parsed[entity_name])
        instance = entity_instance.EntityInstance(entity)

        if not instance.IsValidEntityInstance(self._universe):
            self.fail('exception incorrectly raised')
    def testValidateMultipleCompliantTranslationWithRequiredFieldMissing(self):
        parsed = instance_parser.ParseYaml(
            path.join(_TESTCASE_PATH, 'BAD',
                      'bad_translation_with_required_field_missing.yaml'))
        parsed = dict(parsed)
        entity_name = list(parsed.keys())[0]

        entity = dict(parsed[entity_name])
        instance = entity_instance.EntityInstance(entity)

        if instance.IsValidEntityInstance(self._universe):
            self.fail('exception not raised')
예제 #24
0
    def testValidateBadTranslationStates(self):
        parsed = instance_parser.parse_yaml(
            os.path.join(_TESTCASE_PATH, 'BAD', 'bad_translation_states.yaml'))
        parsed = dict(parsed)
        entity_name = list(parsed.keys())[0]

        entity = dict(parsed[entity_name])
        instance = entity_instance.EntityInstance(entity, self.universe,
                                                  parsed.keys())

        if instance.IsValidEntityInstance():
            self.fail('exception not raised')
예제 #25
0
    def testValidateLinks(self):
        parsed = instance_parser.parse_yaml(
            os.path.join(_TESTCASE_PATH, 'GOOD', 'good_building_links.yaml'))
        parsed = dict(parsed)
        entity_name = list(parsed.keys())[0]

        entity = dict(parsed[entity_name])
        instance = entity_instance.EntityInstance(entity, self.universe,
                                                  parsed.keys())

        if not instance.IsValidEntityInstance():
            self.fail('exception incorrectly raised')
예제 #26
0
    def testValidate_verifiesTypeAgainstNamespace_badlyConfiguredUniverseFails(
            self):
        instance = entity_instance.EntityInstance(_UPDATE,
                                                  'FACILITIES/123456',
                                                  namespace='FOO',
                                                  type_name='BUILDING',
                                                  etag='a12345',
                                                  update_mask=['connections'])

        is_valid = self.update_validator.Validate(instance)

        self.assertFalse(is_valid)
    def testValidateMultipleCompliantTranslationWithFields(self):
        parsed = instance_parser.ParseYaml(
            path.join(_TESTCASE_PATH, 'GOOD',
                      'good_building_translation_fields.yaml'))
        parsed = dict(parsed)
        entity_name = list(parsed.keys())[0]

        entity = dict(parsed[entity_name])
        instance = entity_instance.EntityInstance(entity)

        if not instance.IsValidEntityInstance(self._universe):
            self.fail('exception incorrectly raised')
    def testValidateMultipleCompliantTranslationWithNamespaceOther(self):
        parsed = instance_parser.ParseYaml(
            path.join(_TESTCASE_PATH, 'GOOD', 'good_translation.yaml'))

        parsed = dict(parsed)
        entity_name_lighting = list(parsed.keys())[0]

        entity_lighting = dict(parsed[entity_name_lighting])
        instance = entity_instance.EntityInstance(entity_lighting)

        if not instance.IsValidEntityInstance(self._universe):
            self.fail('exception incorrectly raised')
    def testValidateBadTranslationUnitValues(self):
        parsed = instance_parser.ParseYaml(
            path.join(_TESTCASE_PATH, 'BAD',
                      'bad_translation_unit_values.yaml'))
        parsed = dict(parsed)
        entity_name = list(parsed.keys())[0]

        entity = dict(parsed[entity_name])
        instance = entity_instance.EntityInstance(entity)

        if instance.IsValidEntityInstance(self._universe):
            self.fail('exception not raised')
    def testValidateTranslationUnitsAndStates(self):
        parsed = instance_parser.ParseYaml(
            path.join(_TESTCASE_PATH, 'GOOD',
                      'good_translation_units_and_states.yaml'))
        parsed = dict(parsed)
        entity_name = list(parsed.keys())[0]

        entity = dict(parsed[entity_name])
        instance = entity_instance.EntityInstance(entity)

        if not instance.IsValidEntityInstance(self._universe):
            self.fail('exception incorrectly raised')