mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
207 lines
6.2 KiB
Python
207 lines
6.2 KiB
Python
#
|
|
#
|
|
#
|
|
|
|
from unittest import TestCase
|
|
|
|
from octodns.record.ds import DsRecord, DsValue
|
|
from octodns.record.rr import RrParseError
|
|
from octodns.zone import Zone
|
|
|
|
|
|
class TestRecordDs(TestCase):
|
|
def test_ds(self):
|
|
for a, b in (
|
|
# diff flags
|
|
(
|
|
{
|
|
'flags': 0,
|
|
'protocol': 1,
|
|
'algorithm': 2,
|
|
'public_key': 'abcdef0123456',
|
|
},
|
|
{
|
|
'flags': 1,
|
|
'protocol': 1,
|
|
'algorithm': 2,
|
|
'public_key': 'abcdef0123456',
|
|
},
|
|
),
|
|
# diff protocol
|
|
(
|
|
{
|
|
'flags': 0,
|
|
'protocol': 1,
|
|
'algorithm': 2,
|
|
'public_key': 'abcdef0123456',
|
|
},
|
|
{
|
|
'flags': 0,
|
|
'protocol': 2,
|
|
'algorithm': 2,
|
|
'public_key': 'abcdef0123456',
|
|
},
|
|
),
|
|
# diff algorithm
|
|
(
|
|
{
|
|
'flags': 0,
|
|
'protocol': 1,
|
|
'algorithm': 2,
|
|
'public_key': 'abcdef0123456',
|
|
},
|
|
{
|
|
'flags': 0,
|
|
'protocol': 1,
|
|
'algorithm': 3,
|
|
'public_key': 'abcdef0123456',
|
|
},
|
|
),
|
|
# diff public_key
|
|
(
|
|
{
|
|
'flags': 0,
|
|
'protocol': 1,
|
|
'algorithm': 2,
|
|
'public_key': 'abcdef0123456',
|
|
},
|
|
{
|
|
'flags': 0,
|
|
'protocol': 1,
|
|
'algorithm': 2,
|
|
'public_key': 'bcdef0123456a',
|
|
},
|
|
),
|
|
):
|
|
a = DsValue(a)
|
|
self.assertEqual(a, a)
|
|
b = DsValue(b)
|
|
self.assertEqual(b, b)
|
|
self.assertNotEqual(a, b)
|
|
self.assertNotEqual(b, a)
|
|
self.assertTrue(a < b)
|
|
|
|
# empty string won't parse
|
|
with self.assertRaises(RrParseError):
|
|
DsValue.parse_rdata_text('')
|
|
|
|
# single word won't parse
|
|
with self.assertRaises(RrParseError):
|
|
DsValue.parse_rdata_text('nope')
|
|
|
|
# 2nd word won't parse
|
|
with self.assertRaises(RrParseError):
|
|
DsValue.parse_rdata_text('0 1')
|
|
|
|
# 3rd word won't parse
|
|
with self.assertRaises(RrParseError):
|
|
DsValue.parse_rdata_text('0 1 2')
|
|
|
|
# 5th word won't parse
|
|
with self.assertRaises(RrParseError):
|
|
DsValue.parse_rdata_text('0 1 2 key blah')
|
|
|
|
# things ints, will parse
|
|
self.assertEqual(
|
|
{
|
|
'flags': 'one',
|
|
'protocol': 'two',
|
|
'algorithm': 'three',
|
|
'public_key': 'key',
|
|
},
|
|
DsValue.parse_rdata_text('one two three key'),
|
|
)
|
|
|
|
# valid
|
|
data = {
|
|
'flags': 0,
|
|
'protocol': 1,
|
|
'algorithm': 2,
|
|
'public_key': '99148c81',
|
|
}
|
|
self.assertEqual(data, DsValue.parse_rdata_text('0 1 2 99148c81'))
|
|
self.assertEqual([], DsValue.validate(data, 'DS'))
|
|
|
|
# missing flags
|
|
data = {'protocol': 1, 'algorithm': 2, 'public_key': '99148c81'}
|
|
self.assertEqual(['missing flags'], DsValue.validate(data, 'DS'))
|
|
# invalid flags
|
|
data = {
|
|
'flags': 'a',
|
|
'protocol': 1,
|
|
'algorithm': 2,
|
|
'public_key': '99148c81',
|
|
}
|
|
self.assertEqual(['invalid flags "a"'], DsValue.validate(data, 'DS'))
|
|
|
|
# missing protocol
|
|
data = {'flags': 1, 'algorithm': 2, 'public_key': '99148c81'}
|
|
self.assertEqual(['missing protocol'], DsValue.validate(data, 'DS'))
|
|
# invalid protocol
|
|
data = {
|
|
'flags': 1,
|
|
'protocol': 'a',
|
|
'algorithm': 2,
|
|
'public_key': '99148c81',
|
|
}
|
|
self.assertEqual(['invalid protocol "a"'], DsValue.validate(data, 'DS'))
|
|
|
|
# missing algorithm
|
|
data = {'flags': 1, 'protocol': 2, 'public_key': '99148c81'}
|
|
self.assertEqual(['missing algorithm'], DsValue.validate(data, 'DS'))
|
|
# invalid algorithm
|
|
data = {
|
|
'flags': 1,
|
|
'protocol': 2,
|
|
'algorithm': 'a',
|
|
'public_key': '99148c81',
|
|
}
|
|
self.assertEqual(
|
|
['invalid algorithm "a"'], DsValue.validate(data, 'DS')
|
|
)
|
|
|
|
# missing algorithm (list)
|
|
data = {'flags': 1, 'protocol': 2, 'algorithm': 3}
|
|
self.assertEqual(['missing public_key'], DsValue.validate([data], 'DS'))
|
|
|
|
zone = Zone('unit.tests.', [])
|
|
values = [
|
|
{
|
|
'flags': 0,
|
|
'protocol': 1,
|
|
'algorithm': 2,
|
|
'public_key': '99148c81',
|
|
},
|
|
{
|
|
'flags': 1,
|
|
'protocol': 2,
|
|
'algorithm': 3,
|
|
'public_key': '99148c44',
|
|
},
|
|
]
|
|
a = DsRecord(zone, 'ds', {'ttl': 32, 'values': values})
|
|
self.assertEqual(0, a.values[0].flags)
|
|
a.values[0].flags += 1
|
|
self.assertEqual(1, a.values[0].flags)
|
|
|
|
self.assertEqual(1, a.values[0].protocol)
|
|
a.values[0].protocol += 1
|
|
self.assertEqual(2, a.values[0].protocol)
|
|
|
|
self.assertEqual(2, a.values[0].algorithm)
|
|
a.values[0].algorithm += 1
|
|
self.assertEqual(3, a.values[0].algorithm)
|
|
|
|
self.assertEqual('99148c81', a.values[0].public_key)
|
|
a.values[0].public_key = '99148c42'
|
|
self.assertEqual('99148c42', a.values[0].public_key)
|
|
|
|
self.assertEqual(1, a.values[1].flags)
|
|
self.assertEqual(2, a.values[1].protocol)
|
|
self.assertEqual(3, a.values[1].algorithm)
|
|
self.assertEqual('99148c44', a.values[1].public_key)
|
|
|
|
self.assertEqual(DsValue(values[1]), a.values[1].data)
|
|
self.assertEqual('1 2 3 99148c44', a.values[1].rdata_text)
|
|
self.assertEqual('1 2 3 99148c44', a.values[1].__repr__())
|