mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
109 lines
3.4 KiB
Python
109 lines
3.4 KiB
Python
#
|
|
#
|
|
#
|
|
|
|
from unittest import TestCase
|
|
|
|
from helpers import SimpleProvider
|
|
|
|
from octodns.record import Record
|
|
from octodns.record.alias import AliasRecord
|
|
from octodns.record.exception import ValidationError
|
|
from octodns.zone import Zone
|
|
|
|
|
|
class TestRecordAlias(TestCase):
|
|
zone = Zone('unit.tests.', [])
|
|
|
|
def test_alias(self):
|
|
a_data = {'ttl': 0, 'value': 'www.unit.tests.'}
|
|
a = AliasRecord(self.zone, '', a_data)
|
|
self.assertEqual('', a.name)
|
|
self.assertEqual('unit.tests.', a.fqdn)
|
|
self.assertEqual(0, a.ttl)
|
|
self.assertEqual(a_data['value'], a.value)
|
|
self.assertEqual(a_data, a.data)
|
|
|
|
target = SimpleProvider()
|
|
# No changes with self
|
|
self.assertFalse(a.changes(a, target))
|
|
# Diff in value causes change
|
|
other = AliasRecord(self.zone, 'a', a_data)
|
|
other.value = 'foo.unit.tests.'
|
|
change = a.changes(other, target)
|
|
self.assertEqual(change.existing, a)
|
|
self.assertEqual(change.new, other)
|
|
|
|
# __repr__ doesn't blow up
|
|
a.__repr__()
|
|
|
|
def test_alias_lowering_value(self):
|
|
upper_record = AliasRecord(
|
|
self.zone,
|
|
'aliasUppwerValue',
|
|
{'ttl': 30, 'type': 'ALIAS', 'value': 'GITHUB.COM'},
|
|
)
|
|
lower_record = AliasRecord(
|
|
self.zone,
|
|
'aliasLowerValue',
|
|
{'ttl': 30, 'type': 'ALIAS', 'value': 'github.com'},
|
|
)
|
|
self.assertEqual(upper_record.value, lower_record.value)
|
|
|
|
def test_validation_and_value_mixin(self):
|
|
# doesn't blow up
|
|
Record.new(
|
|
self.zone,
|
|
'',
|
|
{'type': 'ALIAS', 'ttl': 600, 'value': 'foo.bar.com.'},
|
|
)
|
|
|
|
# root only
|
|
with self.assertRaises(ValidationError) as ctx:
|
|
Record.new(
|
|
self.zone,
|
|
'nope',
|
|
{'type': 'ALIAS', 'ttl': 600, 'value': 'foo.bar.com.'},
|
|
)
|
|
self.assertEqual(['non-root ALIAS not allowed'], ctx.exception.reasons)
|
|
|
|
# missing value
|
|
with self.assertRaises(ValidationError) as ctx:
|
|
Record.new(self.zone, '', {'type': 'ALIAS', 'ttl': 600})
|
|
self.assertEqual(['missing value'], ctx.exception.reasons)
|
|
|
|
# missing value
|
|
with self.assertRaises(ValidationError) as ctx:
|
|
Record.new(
|
|
self.zone, '', {'type': 'ALIAS', 'ttl': 600, 'value': None}
|
|
)
|
|
self.assertEqual(['missing value'], ctx.exception.reasons)
|
|
|
|
# empty value
|
|
with self.assertRaises(ValidationError) as ctx:
|
|
Record.new(
|
|
self.zone, '', {'type': 'ALIAS', 'ttl': 600, 'value': ''}
|
|
)
|
|
self.assertEqual(['empty value'], ctx.exception.reasons)
|
|
|
|
# not a valid FQDN
|
|
with self.assertRaises(ValidationError) as ctx:
|
|
Record.new(
|
|
self.zone, '', {'type': 'ALIAS', 'ttl': 600, 'value': '__.'}
|
|
)
|
|
self.assertEqual(
|
|
['ALIAS value "__." is not a valid FQDN'], ctx.exception.reasons
|
|
)
|
|
|
|
# missing trailing .
|
|
with self.assertRaises(ValidationError) as ctx:
|
|
Record.new(
|
|
self.zone,
|
|
'',
|
|
{'type': 'ALIAS', 'ttl': 600, 'value': 'foo.bar.com'},
|
|
)
|
|
self.assertEqual(
|
|
['ALIAS value "foo.bar.com" missing trailing .'],
|
|
ctx.exception.reasons,
|
|
)
|