Browse Source

More extensive tests of YamlProvider.list_zones

pull/1047/head
Ross McFarland 2 years ago
parent
commit
608e367a9b
No known key found for this signature in database GPG Key ID: 943B179E15D3B22A
2 changed files with 73 additions and 6 deletions
  1. +6
    -2
      octodns/provider/yaml.py
  2. +67
    -4
      tests/test_octodns_provider_yaml.py

+ 6
- 2
octodns/provider/yaml.py View File

@ -224,15 +224,19 @@ class YamlProvider(BaseProvider):
extension = self.split_extension
if extension:
self.log.debug('list_zones: looking for split zones')
# we want to leave the .
trim = len(extension) - 1
self.log.debug(
'list_zones: looking for split zones, trim=%d', trim
)
for dirname in listdir(self.directory):
if not dirname.endswith(extension) or not isdir(
join(self.directory, dirname)
):
continue
zones.add(dirname[:-trim])
if trim:
dirname = dirname[:-trim]
zones.add(dirname)
if not self.split_only:
self.log.debug('list_zones: looking for zone files')


+ 67
- 4
tests/test_octodns_provider_yaml.py View File

@ -19,8 +19,7 @@ from octodns.zone import SubzoneRecordException, Zone
def touch(filename):
with open(filename, 'w'):
pass
open(filename, 'w').close()
class TestYamlProvider(TestCase):
@ -297,6 +296,7 @@ xn--dj-kia8a:
self.assertTrue(source.supports(DummyType(self)))
def test_list_zones(self):
# test of pre-existing config that lives on disk
provider = YamlProvider('test', 'tests/config')
self.assertEqual(
[
@ -305,9 +305,72 @@ xn--dj-kia8a:
'subzone.unit.tests.',
'unit.tests.',
],
sorted(provider.list_zones()),
list(provider.list_zones()),
)
# some synthetic tests to explicitly exercise the full functionality
with TemporaryDirectory() as td:
directory = join(td.dirname)
# noise
touch(join(directory, 'README.txt'))
# not a zone.name.yaml
touch(join(directory, 'production.yaml'))
# basic yaml zone files
touch(join(directory, 'unit.test.yaml'))
touch(join(directory, 'sub.unit.test.yaml'))
touch(join(directory, 'other.tld.yaml'))
touch(join(directory, 'both.tld.yaml'))
# split zones with .
makedirs(join(directory, 'split.test.'))
makedirs(join(directory, 'sub.split.test.'))
makedirs(join(directory, 'other.split.'))
makedirs(join(directory, 'both.tld.'))
# split zones with .tst
makedirs(join(directory, 'split-ext.test.tst'))
makedirs(join(directory, 'sub.split-ext.test.tst'))
makedirs(join(directory, 'other-ext.split.tst'))
provider = YamlProvider('test', directory)
# basic, should only find zone files
self.assertEqual(
['both.tld.', 'other.tld.', 'sub.unit.test.', 'unit.test.'],
list(provider.list_zones()),
)
# include stuff with . AND basic
provider.split_extension = '.'
self.assertEqual(
[
'both.tld.',
'other.split.',
'other.tld.',
'split.test.',
'sub.split.test.',
'sub.unit.test.',
'unit.test.',
],
list(provider.list_zones()),
)
provider.split_extension = '.tst'
self.assertEqual(
[
'both.tld.',
'other-ext.split.',
'other.tld.',
'split-ext.test.',
'sub.split-ext.test.',
'sub.unit.test.',
'unit.test.',
],
list(provider.list_zones()),
)
class TestSplitYamlProvider(TestCase):
def test_list_all_yaml_files(self):
@ -321,7 +384,7 @@ class TestSplitYamlProvider(TestCase):
# Create some files, some of them with a .yaml extension, all of
# them empty.
for emptyfile in all_files:
open(join(directory, emptyfile), 'w').close()
touch(join(directory, emptyfile))
# Do the same for some fake directories
for emptydir in all_dirs:
makedirs(join(directory, emptydir))


Loading…
Cancel
Save