mirror of
				https://github.com/github/octodns.git
				synced 2024-05-11 05:55:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			137 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#
 | 
						|
#
 | 
						|
#
 | 
						|
 | 
						|
from unittest import TestCase
 | 
						|
 | 
						|
from helpers import SimpleProvider
 | 
						|
 | 
						|
from octodns.record import Record
 | 
						|
from octodns.record.cname import CnameRecord
 | 
						|
from octodns.record.exception import ValidationError
 | 
						|
from octodns.zone import Zone
 | 
						|
 | 
						|
 | 
						|
class TestRecordCname(TestCase):
 | 
						|
    zone = Zone('unit.tests.', [])
 | 
						|
 | 
						|
    def assertSingleValue(self, _type, a_value, b_value):
 | 
						|
        a_data = {'ttl': 30, 'value': a_value}
 | 
						|
        a = _type(self.zone, 'a', a_data)
 | 
						|
        self.assertEqual('a', a.name)
 | 
						|
        self.assertEqual('a.unit.tests.', a.fqdn)
 | 
						|
        self.assertEqual(30, a.ttl)
 | 
						|
        self.assertEqual(a_value, a.value)
 | 
						|
        self.assertEqual(a_data, a.data)
 | 
						|
 | 
						|
        b_data = {'ttl': 30, 'value': b_value}
 | 
						|
        b = _type(self.zone, 'b', b_data)
 | 
						|
        self.assertEqual(b_value, b.value)
 | 
						|
        self.assertEqual(b_data, b.data)
 | 
						|
 | 
						|
        target = SimpleProvider()
 | 
						|
        # No changes with self
 | 
						|
        self.assertFalse(a.changes(a, target))
 | 
						|
        # Diff in value causes change
 | 
						|
        other = _type(self.zone, 'a', {'ttl': 30, 'value': b_value})
 | 
						|
        change = a.changes(other, target)
 | 
						|
        self.assertEqual(change.existing, a)
 | 
						|
        self.assertEqual(change.new, other)
 | 
						|
 | 
						|
        # __repr__ doesn't blow up
 | 
						|
        a.__repr__()
 | 
						|
 | 
						|
    def test_cname(self):
 | 
						|
        self.assertSingleValue(CnameRecord, 'target.foo.com.', 'other.foo.com.')
 | 
						|
 | 
						|
    def test_cname_lowering_value(self):
 | 
						|
        upper_record = CnameRecord(
 | 
						|
            self.zone,
 | 
						|
            'CnameUppwerValue',
 | 
						|
            {'ttl': 30, 'type': 'CNAME', 'value': 'GITHUB.COM'},
 | 
						|
        )
 | 
						|
        lower_record = CnameRecord(
 | 
						|
            self.zone,
 | 
						|
            'CnameLowerValue',
 | 
						|
            {'ttl': 30, 'type': 'CNAME', 'value': 'github.com'},
 | 
						|
        )
 | 
						|
        self.assertEqual(upper_record.value, lower_record.value)
 | 
						|
 | 
						|
    def test_validation(self):
 | 
						|
        # doesn't blow up
 | 
						|
        Record.new(
 | 
						|
            self.zone,
 | 
						|
            'www',
 | 
						|
            {'type': 'CNAME', 'ttl': 600, 'value': 'foo.bar.com.'},
 | 
						|
        )
 | 
						|
 | 
						|
        # root cname is a no-no
 | 
						|
        with self.assertRaises(ValidationError) as ctx:
 | 
						|
            Record.new(
 | 
						|
                self.zone,
 | 
						|
                '',
 | 
						|
                {'type': 'CNAME', 'ttl': 600, 'value': 'foo.bar.com.'},
 | 
						|
            )
 | 
						|
        self.assertEqual(['root CNAME not allowed'], ctx.exception.reasons)
 | 
						|
 | 
						|
        # not a valid FQDN
 | 
						|
        with self.assertRaises(ValidationError) as ctx:
 | 
						|
            Record.new(
 | 
						|
                self.zone, 'www', {'type': 'CNAME', 'ttl': 600, 'value': '___.'}
 | 
						|
            )
 | 
						|
        self.assertEqual(
 | 
						|
            ['CNAME value "___." is not a valid FQDN'], ctx.exception.reasons
 | 
						|
        )
 | 
						|
 | 
						|
        # missing trailing .
 | 
						|
        with self.assertRaises(ValidationError) as ctx:
 | 
						|
            Record.new(
 | 
						|
                self.zone,
 | 
						|
                'www',
 | 
						|
                {'type': 'CNAME', 'ttl': 600, 'value': 'foo.bar.com'},
 | 
						|
            )
 | 
						|
        self.assertEqual(
 | 
						|
            ['CNAME value "foo.bar.com" missing trailing .'],
 | 
						|
            ctx.exception.reasons,
 | 
						|
        )
 | 
						|
 | 
						|
        # doesn't allow urls
 | 
						|
        with self.assertRaises(ValidationError) as ctx:
 | 
						|
            Record.new(
 | 
						|
                self.zone,
 | 
						|
                'www',
 | 
						|
                {'type': 'CNAME', 'ttl': 600, 'value': 'https://google.com'},
 | 
						|
            )
 | 
						|
        self.assertEqual(
 | 
						|
            ['CNAME value "https://google.com" is not a valid FQDN'],
 | 
						|
            ctx.exception.reasons,
 | 
						|
        )
 | 
						|
 | 
						|
        # doesn't allow urls with paths
 | 
						|
        with self.assertRaises(ValidationError) as ctx:
 | 
						|
            Record.new(
 | 
						|
                self.zone,
 | 
						|
                'www',
 | 
						|
                {
 | 
						|
                    'type': 'CNAME',
 | 
						|
                    'ttl': 600,
 | 
						|
                    'value': 'https://google.com/a/b/c',
 | 
						|
                },
 | 
						|
            )
 | 
						|
        self.assertEqual(
 | 
						|
            ['CNAME value "https://google.com/a/b/c" is not a valid FQDN'],
 | 
						|
            ctx.exception.reasons,
 | 
						|
        )
 | 
						|
 | 
						|
        # doesn't allow paths
 | 
						|
        with self.assertRaises(ValidationError) as ctx:
 | 
						|
            Record.new(
 | 
						|
                self.zone,
 | 
						|
                'www',
 | 
						|
                {'type': 'CNAME', 'ttl': 600, 'value': 'google.com/some/path'},
 | 
						|
            )
 | 
						|
        self.assertEqual(
 | 
						|
            ['CNAME value "google.com/some/path" is not a valid FQDN'],
 | 
						|
            ctx.exception.reasons,
 | 
						|
        )
 |