deb-designate/designate/tests/test_schema/test_format.py
Endre Karlson 7eefb71b8b Switch to oslo.log
Change-Id: I08386ed2c8a2d9e16c57776413a612b8bf8323f7
2015-01-21 21:39:16 +01:00

243 lines
9.2 KiB
Python

# Copyright 2013 Hewlett-Packard Development Company, L.P.
#
# Author: Kiall Mac Innes <kiall@hp.com>
#
# 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.
from oslo_log import log as logging
from designate.tests import TestCase
from designate.schema import format
LOG = logging.getLogger(__name__)
class SchemaFormatTest(TestCase):
def test_is_ipv4(self):
valid_ipaddresses = [
'0.0.0.1',
'127.0.0.1',
'10.0.0.1',
'192.0.2.2',
]
invalid_ipaddresses = [
'0.0.0.0',
'0.0.0.256',
'0.0.256.0',
'0.256.0.0',
'256.0.0.0',
'127.0.0',
'127.0.0.999',
'127.0.0.256',
'127.0..1',
'-1.0.0.1',
'1.0.-0.1',
'1.0.0.-1',
'ABCDEF',
'ABC/DEF',
'ABC\\DEF',
]
for ipaddress in valid_ipaddresses:
self.assertTrue(format.is_ipv4(ipaddress))
for ipaddress in invalid_ipaddresses:
self.assertFalse(format.is_ipv4(ipaddress))
def test_is_hostname(self):
valid_hostnames = [
'example.com.',
'www.example.com.',
'*.example.com.',
'12345.example.com.',
'192-0-2-1.example.com.',
'ip192-0-2-1.example.com.',
'www.ip192-0-2-1.example.com.',
'ip192-0-2-1.www.example.com.',
'abc-123.example.com.',
'_tcp.example.com.',
'_service._tcp.example.com.',
('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2'
'.ip6.arpa.'),
'1.1.1.1.in-addr.arpa.',
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.',
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghi.'),
]
invalid_hostnames = [
'**.example.com.',
'*.*.example.org.',
'a.*.example.org.',
# Exceeds single lable length limit
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkL'
'.'),
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkL'
'.'),
# Exceeds total length limit
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopq.'),
# Empty label part
'abc..def.',
'..',
# Invalid character
'abc$.def.',
'abc.def$.',
# Labels must not start with a -
'-abc.',
'abc.-def.',
'abc.-def.ghi.',
# Labels must not end with a -
'abc-.',
'abc.def-.',
'abc.def-.ghi.',
# Labels must not start or end with a -
'-abc-.',
'abc.-def-.',
'abc.-def-.ghi.',
]
for hostname in valid_hostnames:
self.assertTrue(format.is_hostname(hostname))
for hostname in invalid_hostnames:
self.assertFalse(format.is_hostname(hostname))
def test_is_domainname(self):
valid_domainnames = [
'example.com.',
'www.example.com.',
'12345.example.com.',
'192-0-2-1.example.com.',
'ip192-0-2-1.example.com.',
'www.ip192-0-2-1.example.com.',
'ip192-0-2-1.www.example.com.',
'abc-123.example.com.',
'_tcp.example.com.',
'_service._tcp.example.com.',
('1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2'
'.ip6.arpa.'),
'1.1.1.1.in-addr.arpa.',
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.',
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghi.'),
]
invalid_domainnames = [
'*.example.com.',
'**.example.com.',
'*.*.example.org.',
'a.*.example.org.',
# Exceeds single lable length limit
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkL'
'.'),
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkL'
'.'),
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkL'
'.'),
# Exceeds total length limit
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopq.'),
# Empty label part
'abc..def.',
'..',
# Invalid character
'abc$.def.',
'abc.def$.',
# Labels must not start with a -
'-abc.',
'abc.-def.',
'abc.-def.ghi.',
# Labels must not end with a -
'abc-.',
'abc.def-.',
'abc.def-.ghi.',
# Labels must not start or end with a -
'-abc-.',
'abc.-def-.',
'abc.-def-.ghi.',
]
for domainname in valid_domainnames:
self.assertTrue(format.is_domainname(domainname))
for domainname in invalid_domainnames:
self.assertFalse(format.is_domainname(domainname))
def test_is_email(self):
valid_emails = [
'user@example.com',
'user@emea.example.com',
'user@example.com',
'first.last@example.com',
]
invalid_emails = [
# We use the email addr for the SOA RNAME field, this means the
# entire address, excluding the @ must be chacracters valid
# as a DNS name. i.e. + and % addressing is invalid.
'user+plus@example.com',
'user%example.org@example.com',
'example.org',
'@example.org',
'user@*.example.org',
'user',
'user@',
'user+plus',
'user+plus@',
'user%example.org',
'user%example.org@',
'user@example.org.',
# Exceeds total length limit
('user@fghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.'
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopq.'),
# Exceeds single lable length limit
('user@abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefg'
'hijkL.'),
('user@abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefg'
'hijk.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefg'
'hijkL.'),
# Exceeds single lable length limit in username part
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkL'
'@example.com.'),
]
for email in valid_emails:
LOG.debug('Expecting success for: %s' % email)
self.assertTrue(format.is_email(email))
for email in invalid_emails:
LOG.debug('Expecting failure for: %s' % email)
self.assertFalse(format.is_email(email))