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 testCombinedChecksInstanceAndGraph(self, mock_entity, mock_gv, mock_iv, mock_universe): validator = entity_instance.CombinationValidator( mock_universe, _UPDATE_CFG, {}) self.assertTrue(validator.Validate(mock_entity)) mock_iv.assert_called_once_with(mock_entity) mock_gv.assert_called_once_with(mock_entity)
def testValidateGoodGuidFormat(self): parsed = _Helper( [path.join(_TESTCASE_PATH, 'GOOD', 'good_guid_format.yaml')]) entity_instances = {} for entity_guid, entity in parsed.items(): instance = entity_instance.EntityInstance.FromYaml( entity_guid, entity, code_to_guid_map={}) entity_instances[instance.guid] = instance combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) for _, instance in entity_instances.items(): self.assertTrue(combination_validator.Validate(instance))
def testValidateGoodLinkToPassthroughEntity(self): parsed = _Helper( [path.join(_TESTCASE_PATH, 'GOOD', 'good_links_passthrough.yaml')]) entity_instances = {} parsed = dict(parsed) for raw_entity in list(parsed): entity_parsed = dict(parsed[raw_entity]) entity = entity_instance.EntityInstance.FromYaml(entity_parsed) entity_instances[raw_entity] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) for _, instance in entity_instances.items(): self.assertTrue(combination_validator.Validate(instance))
def testValidateGoodLinkWithIncrementEntityName(self): parsed = _Helper( # KW: this one is a entity_franken-type it definitely won't make sense [path.join(_TESTCASE_PATH, 'GOOD', 'good_links_increment.yaml')]) entity_instances = {} parsed = dict(parsed) for raw_entity in list(parsed): entity_parsed = dict(parsed[raw_entity]) entity = entity_instance.EntityInstance.FromYaml(entity_parsed) entity_instances[raw_entity] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) for _, instance in entity_instances.items(): self.assertTrue(combination_validator.Validate(instance))
def testValidateBadLinkMissingField(self): parsed = _Helper( [path.join(_TESTCASE_PATH, 'BAD', 'bad_links_missing_field.yaml')]) entity_instances = {} parsed = dict(parsed) for raw_entity in list(parsed): entity_parsed = dict(parsed[raw_entity]) entity = entity_instance.EntityInstance.FromYaml(entity_parsed) entity_instances[raw_entity] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) self.assertFalse( combination_validator.Validate( entity_instances.get('ENTITY-NAME')))
def testValidateGoodLinkToPassthroughEntity(self): parsed = _Helper( [path.join(_TESTCASE_PATH, 'GOOD', 'good_links_passthrough.yaml')]) entity_instances = {} for entity_code, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( entity_code, entity_parsed, code_to_guid_map={'GATEWAY-ENTITY': 'GATEWAY-ENTITY-guid'}) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) for _, instance in entity_instances.items(): self.assertTrue(combination_validator.Validate(instance))
def testValidateGoodLinkWithIncrementEntityName(self): parsed = _Helper( # KW: this one is a entity_franken-type it definitely won't make sense [path.join(_TESTCASE_PATH, 'GOOD', 'good_links_increment.yaml')]) entity_instances = {} for entity_code, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( entity_code, entity_parsed, code_to_guid_map={'PHYSICAL-ENTITY': 'PHYSICAL-ENTITY-guid'}) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) for _, instance in entity_instances.items(): self.assertTrue(combination_validator.Validate(instance))
def testValidateBadLinkMissingField(self): parsed = _Helper( [path.join(_TESTCASE_PATH, 'BAD', 'bad_links_missing_field.yaml')]) entity_instances = {} for entity_code, entity_parsed in parsed.items(): entity = entity_instance.EntityInstance.FromYaml( entity_code, entity_parsed, code_to_guid_map={'A-FOURTH-ENTITY': 'A-FOURTH-ENTITY-guid'}) entity_instances[entity.guid] = entity combination_validator = entity_instance.CombinationValidator( self.config_universe, _INIT_CFG, entity_instances) self.assertFalse( combination_validator.Validate( entity_instances.get('ENTITY-NAME-guid')))
def Validate( self, entities: Dict[str, entity_instance.EntityInstance], config_mode: instance_parser.ConfigMode ) -> Dict[str, entity_instance.EntityInstance]: """Validates entity instances that are already deserialized. Args: entities: a dict of entity instances config_mode: processing mode of the configuration Returns: A dictionary containing valid entities by name Raises: SyntaxError: If no building is found in the config """ print('Validating entities ...') building_found = False valid_entities = {} validator = entity_instance.CombinationValidator( self.universe, config_mode, entities) for entity_name, current_entity in entities.items(): if (current_entity.operation is not instance_parser.EntityOperation.DELETE and current_entity.type_name.lower() == 'building'): building_found = True if not validator.Validate(current_entity): print(entity_name, 'is not a valid instance') continue valid_entities[entity_name] = current_entity if not building_found: print( 'Config must contain a non-deleted entity with a building type' ) raise SyntaxError('Building Config must contain an ' 'entity with a building type') print('All entities validated') return valid_entities