mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
95 lines
2.8 KiB
Python
95 lines
2.8 KiB
Python
#
|
|
#
|
|
#
|
|
|
|
from unittest import TestCase
|
|
|
|
from helpers import SimpleProvider
|
|
|
|
from octodns.record import Record
|
|
from octodns.record.dname import DnameRecord
|
|
from octodns.record.exception import ValidationError
|
|
from octodns.zone import Zone
|
|
|
|
|
|
class TestRecordDname(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_dname(self):
|
|
self.assertSingleValue(DnameRecord, 'target.foo.com.', 'other.foo.com.')
|
|
|
|
def test_dname_lowering_value(self):
|
|
upper_record = DnameRecord(
|
|
self.zone,
|
|
'DnameUppwerValue',
|
|
{'ttl': 30, 'type': 'DNAME', 'value': 'GITHUB.COM'},
|
|
)
|
|
lower_record = DnameRecord(
|
|
self.zone,
|
|
'DnameLowerValue',
|
|
{'ttl': 30, 'type': 'DNAME', 'value': 'github.com'},
|
|
)
|
|
self.assertEqual(upper_record.value, lower_record.value)
|
|
|
|
def test_validation(self):
|
|
# A valid DNAME record.
|
|
Record.new(
|
|
self.zone,
|
|
'sub',
|
|
{'type': 'DNAME', 'ttl': 600, 'value': 'foo.bar.com.'},
|
|
)
|
|
|
|
# A DNAME record can be present at the zone APEX.
|
|
Record.new(
|
|
self.zone,
|
|
'',
|
|
{'type': 'DNAME', 'ttl': 600, 'value': 'foo.bar.com.'},
|
|
)
|
|
|
|
# not a valid FQDN
|
|
with self.assertRaises(ValidationError) as ctx:
|
|
Record.new(
|
|
self.zone, 'www', {'type': 'DNAME', 'ttl': 600, 'value': '.'}
|
|
)
|
|
self.assertEqual(
|
|
['DNAME value "." is not a valid FQDN'], ctx.exception.reasons
|
|
)
|
|
|
|
# missing trailing .
|
|
with self.assertRaises(ValidationError) as ctx:
|
|
Record.new(
|
|
self.zone,
|
|
'www',
|
|
{'type': 'DNAME', 'ttl': 600, 'value': 'foo.bar.com'},
|
|
)
|
|
self.assertEqual(
|
|
['DNAME value "foo.bar.com" missing trailing .'],
|
|
ctx.exception.reasons,
|
|
)
|