diff options
author | julien zhang <zhang.jun3g@zte.com.cn> | 2016-04-22 08:43:26 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@172.30.200.206> | 2016-04-22 08:43:26 +0000 |
commit | 2fa4785aa218cf655f3405d832d2200d64fd033e (patch) | |
tree | 0061edccecca9a99aa9a50c6c0e2783c07370112 /tosca2heat/tosca-parser-0.3.0/toscaparser/tests/test_datatypes.py | |
parent | 56c2a5d3ba6193c9a98870a264bc5e3aca19a086 (diff) | |
parent | c8201c119ec686e79797721156767685fe848aca (diff) |
Merge "Update tosca lib to version 0.5"
Diffstat (limited to 'tosca2heat/tosca-parser-0.3.0/toscaparser/tests/test_datatypes.py')
-rw-r--r-- | tosca2heat/tosca-parser-0.3.0/toscaparser/tests/test_datatypes.py | 327 |
1 files changed, 0 insertions, 327 deletions
diff --git a/tosca2heat/tosca-parser-0.3.0/toscaparser/tests/test_datatypes.py b/tosca2heat/tosca-parser-0.3.0/toscaparser/tests/test_datatypes.py deleted file mode 100644 index c1a6de0..0000000 --- a/tosca2heat/tosca-parser-0.3.0/toscaparser/tests/test_datatypes.py +++ /dev/null @@ -1,327 +0,0 @@ -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://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. - -import os - -from testtools.testcase import skip -from toscaparser.common import exception -from toscaparser.dataentity import DataEntity -from toscaparser.elements.datatype import DataType -from toscaparser.parameters import Input -from toscaparser.tests.base import TestCase -from toscaparser.tosca_template import ToscaTemplate -from toscaparser.utils.gettextutils import _ -from toscaparser.utils import yamlparser - - -class DataTypeTest(TestCase): - - custom_type_schema = ''' - tosca.my.datatypes.PeopleBase: - properties: - name: - type: string - required: true - constraints: - - min_length: 2 - gender: - type: string - default: unknown - - tosca.my.datatypes.People: - derived_from: tosca.my.datatypes.PeopleBase - properties: - addresses: - type: map - entry_schema: - type: string - contacts: - type: list - entry_schema: - type: tosca.my.datatypes.ContactInfo - - tosca.my.datatypes.ContactInfo: - description: simple contact information - properties: - contact_name: - type: string - required: true - constraints: - - min_length: 2 - contact_email: - type: string - contact_phone: - type: string - ''' - custom_type_def = yamlparser.simple_parse(custom_type_schema) - - def test_empty_template(self): - value_snippet = '' - value = yamlparser.simple_parse(value_snippet) - self.assertEqual(value, {}) - - def test_built_in_datatype(self): - value_snippet = ''' - private_network: - network_name: private - network_id: 3e54214f-5c09-1bc9-9999-44100326da1b - addresses: [ 10.111.128.10 ] - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.datatypes.network.NetworkInfo', - value.get('private_network')) - self.assertIsNotNone(data.validate()) - - value_snippet = ''' - portspec_valid: - protocol: tcp - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.datatypes.network.PortSpec', - value.get('portspec_valid')) - self.assertIsNotNone(data.validate()) - - value_snippet = ''' - portspec_invalid: - protocol: xyz - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.datatypes.network.PortSpec', - value.get('portspec_invalid')) - err = self.assertRaises(exception.ValidationError, data.validate) - self.assertEqual(_('The value "xyz" of property "protocol" is not ' - 'valid. Expected a value from "[udp, tcp, igmp]".' - ), - err.__str__()) - - def test_built_in_datatype_with_short_name(self): - value_snippet = ''' - ethernet_port: - port_name: port1 - port_id: 2c0c7a37-691a-23a6-7709-2d10ad041467 - network_id: 3e54214f-5c09-1bc9-9999-44100326da1b - mac_address: f1:18:3b:41:92:1e - addresses: [ 172.24.9.102 ] - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('PortInfo', value.get('ethernet_port')) - self.assertIsNotNone(data.validate()) - - def test_built_in_datatype_without_properties(self): - value_snippet = ''' - 2 - ''' - value = yamlparser.simple_parse(value_snippet) - datatype = DataType('PortDef') - self.assertEqual('integer', datatype.value_type) - data = DataEntity('PortDef', value) - self.assertIsNotNone(data.validate()) - - @skip('The example in TOSCA spec may have some problem.') - def test_built_in_nested_datatype(self): - value_snippet = ''' - user_port: - protocol: tcp - target: [50000] - source: [9000] - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('PortSpec', value.get('user_port')) - self.assertIsNotNone(data.validate()) - - def test_built_in_nested_datatype_portdef(self): - tpl_snippet = ''' - inputs: - db_port: - type: PortDef - description: Port for the MySQL database - ''' - inputs = yamlparser.simple_parse(tpl_snippet)['inputs'] - name, attrs = list(inputs.items())[0] - input = Input(name, attrs) - self.assertIsNone(input.validate(3360)) - err = self.assertRaises(exception.ValidationError, input.validate, - 336000) - self.assertEqual(_('The value "336000" of property "None" is out of ' - 'range "(min:1, max:65535)".'), - err.__str__()) - - def test_custom_datatype(self): - value_snippet = ''' - name: Mike - gender: male - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.my.datatypes.PeopleBase', value, - DataTypeTest.custom_type_def) - self.assertIsNotNone(data.validate()) - - def test_custom_datatype_with_parent(self): - value_snippet = ''' - name: Mike - gender: male - contacts: - - {contact_name: Tom, - contact_email: tom@email.com, - contact_phone: '123456789'} - - {contact_name: Jerry, - contact_email: jerry@email.com, - contact_phone: '321654987'} - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.my.datatypes.People', value, - DataTypeTest.custom_type_def) - self.assertIsNotNone(data.validate()) - - # [Tom, Jerry] is not a dict, it can't be a value of datatype PeopleBase - def test_non_dict_value_for_datatype(self): - value_snippet = ''' - [Tom, Jerry] - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.my.datatypes.PeopleBase', value, - DataTypeTest.custom_type_def) - error = self.assertRaises(exception.TypeMismatchError, data.validate) - self.assertEqual(_('[\'Tom\', \'Jerry\'] must be of type ' - '"tosca.my.datatypes.PeopleBase".'), - error.__str__()) - - # 'nema' is an invalid field name - def test_field_error_in_dataentity(self): - value_snippet = ''' - nema: Mike - gender: male - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.my.datatypes.PeopleBase', value, - DataTypeTest.custom_type_def) - error = self.assertRaises(exception.UnknownFieldError, data.validate) - self.assertEqual(_('Data value of type ' - '"tosca.my.datatypes.PeopleBase" contains unknown ' - 'field "nema". Refer to the definition to verify ' - 'valid values.'), - error.__str__()) - - def test_default_field_in_dataentity(self): - value_snippet = ''' - name: Mike - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.my.datatypes.PeopleBase', value, - DataTypeTest.custom_type_def) - data = data.validate() - self.assertEqual('unknown', data.get('gender')) - - # required field 'name' is missing - def test_missing_field_in_dataentity(self): - value_snippet = ''' - gender: male - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.my.datatypes.PeopleBase', value, - DataTypeTest.custom_type_def) - error = self.assertRaises(exception.MissingRequiredFieldError, - data.validate) - self.assertEqual(_('Data value of type ' - '"tosca.my.datatypes.PeopleBase" is missing ' - 'required field "[\'name\']".'), - error.__str__()) - - # the value of name field is not a string - def test_type_error_in_dataentity(self): - value_snippet = ''' - name: 123 - gender: male - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.my.datatypes.PeopleBase', value, - DataTypeTest.custom_type_def) - error = self.assertRaises(ValueError, data.validate) - self.assertEqual(_('"123" is not a string.'), error.__str__()) - - # the value of name doesn't meet the defined constraint - def test_value_error_in_dataentity(self): - value_snippet = ''' - name: M - gender: male - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.my.datatypes.PeopleBase', value, - DataTypeTest.custom_type_def) - error = self.assertRaises(exception.ValidationError, data.validate) - self.assertEqual(_('Length of value "M" of property "name" must be ' - 'at least "2".'), error.__str__()) - - # value of addresses doesn't fit the entry_schema - def test_validation_in_collection_entry(self): - value_snippet = ''' - name: Mike - gender: male - addresses: {Home: 1, Office: 9 bar avenue} - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.my.datatypes.People', value, - DataTypeTest.custom_type_def) - error = self.assertRaises(ValueError, data.validate) - self.assertEqual(_('"1" is not a string.'), error.__str__()) - - # contact_pone is an invalid field name in nested datatype - def test_validation_in_nested_datatype(self): - value_snippet = ''' - name: Mike - gender: male - contacts: - - {contact_name: Tom, - contact_email: tom@email.com, - contact_pone: '123456789'} - - {contact_name: Jerry, - contact_email: jerry@email.com, - contact_phone: '321654987'} - ''' - value = yamlparser.simple_parse(value_snippet) - data = DataEntity('tosca.my.datatypes.People', value, - DataTypeTest.custom_type_def) - error = self.assertRaises(exception.UnknownFieldError, data.validate) - self.assertEqual(_('Data value of type ' - '"tosca.my.datatypes.ContactInfo" contains unknown ' - 'field "contact_pone". Refer to the definition to ' - 'verify valid values.'), - error.__str__()) - - def test_datatype_in_current_template(self): - tpl_path = os.path.join( - os.path.dirname(os.path.abspath(__file__)), - "data/datatypes/test_custom_datatypes_in_current_template.yaml") - self.assertIsNotNone(ToscaTemplate(tpl_path)) - - def test_datatype_in_template_positive(self): - tpl_path = os.path.join( - os.path.dirname(os.path.abspath(__file__)), - "data/datatypes/test_custom_datatypes_positive.yaml") - self.assertIsNotNone(ToscaTemplate(tpl_path)) - - def test_datatype_in_template_invalid_value(self): - tpl_path = os.path.join( - os.path.dirname(os.path.abspath(__file__)), - "data/datatypes/test_custom_datatypes_value_error.yaml") - self.assertRaises(exception.ValidationError, ToscaTemplate, tpl_path) - exception.ExceptionCollector.assertExceptionMessage( - ValueError, - _('"[\'1 foo street\', \'9 bar avenue\']" is not a map.')) - - def test_datatype_in_template_nested_datatype_error(self): - tpl_path = os.path.join( - os.path.dirname(os.path.abspath(__file__)), - "data/datatypes/test_custom_datatypes_nested_datatype_error.yaml") - self.assertRaises(exception.ValidationError, ToscaTemplate, tpl_path) - exception.ExceptionCollector.assertExceptionMessage( - ValueError, _('"123456789" is not a string.')) |