1
0
mirror of https://github.com/github/octodns.git synced 2024-05-11 05:55:00 +00:00

add Zone File source, reads Bind compatible zone files

This commit is contained in:
Adam Smith
2018-09-29 16:23:20 -07:00
parent 6da23ea795
commit fd3de1e08b
5 changed files with 114 additions and 2 deletions

View File

@@ -11,14 +11,15 @@ from dns.exception import DNSException
from mock import patch
from unittest import TestCase
from octodns.source.axfr import AxfrSource, AxfrSourceZoneTransferFailed
from octodns.source.axfr import AxfrSource, AxfrSourceZoneTransferFailed, \
ZoneFileSource, ZoneFileSourceLoadFailure
from octodns.zone import Zone
class TestAxfrSource(TestCase):
source = AxfrSource('test', 'localhost')
forward_zonefile = dns.zone.from_file('./tests/zones/unit.tests.db',
forward_zonefile = dns.zone.from_file('./tests/zones/unit.tests.',
'unit.tests', relativize=False)
@patch('dns.zone.from_xfr')
@@ -38,3 +39,33 @@ class TestAxfrSource(TestCase):
self.source.populate(zone)
self.assertEquals('Unable to Perform Zone Transfer',
ctx.exception.message)
class TestZoneFileSource(TestCase):
source = ZoneFileSource('test', './tests/zones')
def test_populate(self):
# Valid zone file in directory
valid = Zone('unit.tests.', [])
self.source.populate(valid)
self.assertEquals(11, len(valid.records))
# 2nd populate does not read file again
again = Zone('unit.tests.', [])
self.source.populate(again)
self.assertEquals(11, len(again.records))
# bust the cache
del self.source._zone_records[valid.name]
# No zone file in directory
missing = Zone('missing.zone.', [])
self.source.populate(missing)
self.assertEquals(0, len(missing.records))
# Zone file is not valid
with self.assertRaises(ZoneFileSourceLoadFailure) as ctx:
zone = Zone('invalid.zone.', [])
self.source.populate(zone)
self.assertEquals('The DNS zone has no NS RRset at its origin.',
ctx.exception.message)