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))
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))
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))
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))
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))
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))
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))
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')
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))
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))
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')
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))
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))
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')
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')
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')
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')