mirror of
				https://github.com/github/octodns.git
				synced 2024-05-11 05:55:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#
 | 
						|
#
 | 
						|
#
 | 
						|
 | 
						|
from unittest import TestCase
 | 
						|
 | 
						|
from octodns.record import Record
 | 
						|
from octodns.record.exception import ValidationError
 | 
						|
from octodns.record.ns import NsRecord, NsValue
 | 
						|
from octodns.zone import Zone
 | 
						|
 | 
						|
 | 
						|
class TestRecordNs(TestCase):
 | 
						|
    zone = Zone('unit.tests.', [])
 | 
						|
 | 
						|
    def test_ns(self):
 | 
						|
        a_values = ['5.6.7.8.', '6.7.8.9.', '7.8.9.0.']
 | 
						|
        a_data = {'ttl': 30, 'values': a_values}
 | 
						|
        a = NsRecord(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_values, a.values)
 | 
						|
        self.assertEqual(a_data, a.data)
 | 
						|
 | 
						|
        b_value = '9.8.7.6.'
 | 
						|
        b_data = {'ttl': 30, 'value': b_value}
 | 
						|
        b = NsRecord(self.zone, 'b', b_data)
 | 
						|
        self.assertEqual([b_value], b.values)
 | 
						|
        self.assertEqual(b_data, b.data)
 | 
						|
 | 
						|
    def test_ns_value_rdata_text(self):
 | 
						|
        # anything goes, we're a noop
 | 
						|
        for s in (
 | 
						|
            None,
 | 
						|
            '',
 | 
						|
            'word',
 | 
						|
            42,
 | 
						|
            42.43,
 | 
						|
            '1.2.3',
 | 
						|
            'some.words.that.here',
 | 
						|
            '1.2.word.4',
 | 
						|
            '1.2.3.4',
 | 
						|
        ):
 | 
						|
            self.assertEqual(s, NsValue.parse_rdata_text(s))
 | 
						|
 | 
						|
        zone = Zone('unit.tests.', [])
 | 
						|
        a = NsRecord(zone, 'a', {'ttl': 42, 'value': 'some.target.'})
 | 
						|
        self.assertEqual('some.target.', a.values[0].rdata_text)
 | 
						|
 | 
						|
    def test_validation(self):
 | 
						|
        # doesn't blow up
 | 
						|
        Record.new(
 | 
						|
            self.zone,
 | 
						|
            '',
 | 
						|
            {'type': 'NS', 'ttl': 600, 'values': ['foo.bar.com.', '1.2.3.4.']},
 | 
						|
        )
 | 
						|
 | 
						|
        # missing value
 | 
						|
        with self.assertRaises(ValidationError) as ctx:
 | 
						|
            Record.new(self.zone, '', {'type': 'NS', 'ttl': 600})
 | 
						|
        self.assertEqual(['missing value(s)'], ctx.exception.reasons)
 | 
						|
 | 
						|
        # no trailing .
 | 
						|
        with self.assertRaises(ValidationError) as ctx:
 | 
						|
            Record.new(
 | 
						|
                self.zone, '', {'type': 'NS', 'ttl': 600, 'value': 'foo.bar'}
 | 
						|
            )
 | 
						|
        self.assertEqual(
 | 
						|
            ['NS value "foo.bar" missing trailing .'], ctx.exception.reasons
 | 
						|
        )
 | 
						|
 | 
						|
        # exchange must be a valid FQDN
 | 
						|
        with self.assertRaises(ValidationError) as ctx:
 | 
						|
            Record.new(
 | 
						|
                self.zone,
 | 
						|
                '',
 | 
						|
                {'type': 'NS', 'ttl': 600, 'value': '100 foo.bar.com.'},
 | 
						|
            )
 | 
						|
        self.assertEqual(
 | 
						|
            ['Invalid NS value "100 foo.bar.com." is not a valid FQDN.'],
 | 
						|
            ctx.exception.reasons,
 | 
						|
        )
 |