|
|
|
@ -12,64 +12,64 @@ from octodns.zone import Zone |
|
|
|
class TestRecordDs(TestCase): |
|
|
|
def test_ds(self): |
|
|
|
for a, b in ( |
|
|
|
# diff flags |
|
|
|
# diff key_tag |
|
|
|
( |
|
|
|
{ |
|
|
|
'flags': 0, |
|
|
|
'protocol': 1, |
|
|
|
'algorithm': 2, |
|
|
|
'public_key': 'abcdef0123456', |
|
|
|
'key_tag': 0, |
|
|
|
'algorithm': 1, |
|
|
|
'digest_type': 2, |
|
|
|
'digest': 'abcdef0123456', |
|
|
|
}, |
|
|
|
{ |
|
|
|
'flags': 1, |
|
|
|
'protocol': 1, |
|
|
|
'algorithm': 2, |
|
|
|
'public_key': 'abcdef0123456', |
|
|
|
'key_tag': 1, |
|
|
|
'algorithm': 1, |
|
|
|
'digest_type': 2, |
|
|
|
'digest': 'abcdef0123456', |
|
|
|
}, |
|
|
|
), |
|
|
|
# diff protocol |
|
|
|
# diff algorithm |
|
|
|
( |
|
|
|
{ |
|
|
|
'flags': 0, |
|
|
|
'protocol': 1, |
|
|
|
'algorithm': 2, |
|
|
|
'public_key': 'abcdef0123456', |
|
|
|
'key_tag': 0, |
|
|
|
'algorithm': 1, |
|
|
|
'digest_type': 2, |
|
|
|
'digest': 'abcdef0123456', |
|
|
|
}, |
|
|
|
{ |
|
|
|
'flags': 0, |
|
|
|
'protocol': 2, |
|
|
|
'key_tag': 0, |
|
|
|
'algorithm': 2, |
|
|
|
'public_key': 'abcdef0123456', |
|
|
|
'digest_type': 2, |
|
|
|
'digest': 'abcdef0123456', |
|
|
|
}, |
|
|
|
), |
|
|
|
# diff algorithm |
|
|
|
# diff digest_type |
|
|
|
( |
|
|
|
{ |
|
|
|
'flags': 0, |
|
|
|
'protocol': 1, |
|
|
|
'algorithm': 2, |
|
|
|
'public_key': 'abcdef0123456', |
|
|
|
'key_tag': 0, |
|
|
|
'algorithm': 1, |
|
|
|
'digest_type': 2, |
|
|
|
'digest': 'abcdef0123456', |
|
|
|
}, |
|
|
|
{ |
|
|
|
'flags': 0, |
|
|
|
'protocol': 1, |
|
|
|
'algorithm': 3, |
|
|
|
'public_key': 'abcdef0123456', |
|
|
|
'key_tag': 0, |
|
|
|
'algorithm': 1, |
|
|
|
'digest_type': 3, |
|
|
|
'digest': 'abcdef0123456', |
|
|
|
}, |
|
|
|
), |
|
|
|
# diff public_key |
|
|
|
# diff digest |
|
|
|
( |
|
|
|
{ |
|
|
|
'flags': 0, |
|
|
|
'protocol': 1, |
|
|
|
'algorithm': 2, |
|
|
|
'public_key': 'abcdef0123456', |
|
|
|
'key_tag': 0, |
|
|
|
'algorithm': 1, |
|
|
|
'digest_type': 2, |
|
|
|
'digest': 'abcdef0123456', |
|
|
|
}, |
|
|
|
{ |
|
|
|
'flags': 0, |
|
|
|
'protocol': 1, |
|
|
|
'algorithm': 2, |
|
|
|
'public_key': 'bcdef0123456a', |
|
|
|
'key_tag': 0, |
|
|
|
'algorithm': 1, |
|
|
|
'digest_type': 2, |
|
|
|
'digest': 'bcdef0123456a', |
|
|
|
}, |
|
|
|
), |
|
|
|
): |
|
|
|
@ -104,102 +104,104 @@ class TestRecordDs(TestCase): |
|
|
|
# things ints, will parse |
|
|
|
self.assertEqual( |
|
|
|
{ |
|
|
|
'flags': 'one', |
|
|
|
'protocol': 'two', |
|
|
|
'algorithm': 'three', |
|
|
|
'public_key': 'key', |
|
|
|
'key_tag': 'one', |
|
|
|
'algorithm': 'two', |
|
|
|
'digest_type': 'three', |
|
|
|
'digest': 'key', |
|
|
|
}, |
|
|
|
DsValue.parse_rdata_text('one two three key'), |
|
|
|
) |
|
|
|
|
|
|
|
# valid |
|
|
|
data = { |
|
|
|
'flags': 0, |
|
|
|
'protocol': 1, |
|
|
|
'algorithm': 2, |
|
|
|
'public_key': '99148c81', |
|
|
|
'key_tag': 0, |
|
|
|
'algorithm': 1, |
|
|
|
'digest_type': 2, |
|
|
|
'digest': '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 |
|
|
|
# missing key_tag |
|
|
|
data = {'algorithm': 1, 'digest_type': 2, 'digest': '99148c81'} |
|
|
|
self.assertEqual(['missing key_tag'], DsValue.validate(data, 'DS')) |
|
|
|
# invalid key_tag |
|
|
|
data = { |
|
|
|
'flags': 1, |
|
|
|
'protocol': 'a', |
|
|
|
'algorithm': 2, |
|
|
|
'public_key': '99148c81', |
|
|
|
'key_tag': 'a', |
|
|
|
'algorithm': 1, |
|
|
|
'digest_type': 2, |
|
|
|
'digest': '99148c81', |
|
|
|
} |
|
|
|
self.assertEqual(['invalid protocol "a"'], DsValue.validate(data, 'DS')) |
|
|
|
self.assertEqual(['invalid key_tag "a"'], DsValue.validate(data, 'DS')) |
|
|
|
|
|
|
|
# missing algorithm |
|
|
|
data = {'flags': 1, 'protocol': 2, 'public_key': '99148c81'} |
|
|
|
data = {'key_tag': 1, 'digest_type': 2, 'digest': '99148c81'} |
|
|
|
self.assertEqual(['missing algorithm'], DsValue.validate(data, 'DS')) |
|
|
|
# invalid algorithm |
|
|
|
data = { |
|
|
|
'flags': 1, |
|
|
|
'protocol': 2, |
|
|
|
'key_tag': 1, |
|
|
|
'algorithm': 'a', |
|
|
|
'public_key': '99148c81', |
|
|
|
'digest_type': 2, |
|
|
|
'digest': '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')) |
|
|
|
# missing digest_type |
|
|
|
data = {'key_tag': 1, 'algorithm': 2, 'digest': '99148c81'} |
|
|
|
self.assertEqual(['missing digest_type'], DsValue.validate(data, 'DS')) |
|
|
|
# invalid digest_type |
|
|
|
data = { |
|
|
|
'key_tag': 1, |
|
|
|
'algorithm': 2, |
|
|
|
'digest_type': 'a', |
|
|
|
'digest': '99148c81', |
|
|
|
} |
|
|
|
self.assertEqual( |
|
|
|
['invalid digest_type "a"'], DsValue.validate(data, 'DS') |
|
|
|
) |
|
|
|
|
|
|
|
# missing digest_type (list) |
|
|
|
data = {'key_tag': 1, 'algorithm': 2, 'digest_type': 3} |
|
|
|
self.assertEqual(['missing digest'], DsValue.validate([data], 'DS')) |
|
|
|
|
|
|
|
zone = Zone('unit.tests.', []) |
|
|
|
values = [ |
|
|
|
{ |
|
|
|
'flags': 0, |
|
|
|
'protocol': 1, |
|
|
|
'algorithm': 2, |
|
|
|
'public_key': '99148c81', |
|
|
|
'key_tag': 0, |
|
|
|
'algorithm': 1, |
|
|
|
'digest_type': 2, |
|
|
|
'digest': '99148c81', |
|
|
|
}, |
|
|
|
{ |
|
|
|
'flags': 1, |
|
|
|
'protocol': 2, |
|
|
|
'algorithm': 3, |
|
|
|
'public_key': '99148c44', |
|
|
|
'key_tag': 1, |
|
|
|
'algorithm': 2, |
|
|
|
'digest_type': 3, |
|
|
|
'digest': '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(0, a.values[0].key_tag) |
|
|
|
a.values[0].key_tag += 1 |
|
|
|
self.assertEqual(1, a.values[0].key_tag) |
|
|
|
|
|
|
|
self.assertEqual(2, a.values[0].algorithm) |
|
|
|
self.assertEqual(1, a.values[0].algorithm) |
|
|
|
a.values[0].algorithm += 1 |
|
|
|
self.assertEqual(3, a.values[0].algorithm) |
|
|
|
self.assertEqual(2, a.values[0].algorithm) |
|
|
|
|
|
|
|
self.assertEqual(2, a.values[0].digest_type) |
|
|
|
a.values[0].digest_type += 1 |
|
|
|
self.assertEqual(3, a.values[0].digest_type) |
|
|
|
|
|
|
|
self.assertEqual('99148c81', a.values[0].public_key) |
|
|
|
a.values[0].public_key = '99148c42' |
|
|
|
self.assertEqual('99148c42', a.values[0].public_key) |
|
|
|
self.assertEqual('99148c81', a.values[0].digest) |
|
|
|
a.values[0].digest = '99148c42' |
|
|
|
self.assertEqual('99148c42', a.values[0].digest) |
|
|
|
|
|
|
|
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(1, a.values[1].key_tag) |
|
|
|
self.assertEqual(2, a.values[1].algorithm) |
|
|
|
self.assertEqual(3, a.values[1].digest_type) |
|
|
|
self.assertEqual('99148c44', a.values[1].digest) |
|
|
|
|
|
|
|
self.assertEqual(DsValue(values[1]), a.values[1].data) |
|
|
|
self.assertEqual('1 2 3 99148c44', a.values[1].rdata_text) |
|
|
|
|