Browse Source

WIP: Backing out a lot of test churn now that YamlProvider has SUPPORTS_ROOT_NS flag

pull/876/head
Ross McFarland 4 years ago
parent
commit
adb01a982c
No known key found for this signature in database GPG Key ID: 943B179E15D3B22A
9 changed files with 42 additions and 62 deletions
  1. +3
    -0
      octodns/manager.py
  2. +6
    -16
      octodns/provider/base.py
  3. +0
    -5
      tests/config/dynamic.tests.yaml
  4. +0
    -5
      tests/config/empty.yaml
  5. +0
    -6
      tests/config/split/dynamic.tests.tst/ns.yaml
  6. +0
    -5
      tests/config/subzone.unit.tests.yaml
  7. +1
    -1
      tests/test_octodns_manager.py
  8. +4
    -2
      tests/test_octodns_provider_base.py
  9. +28
    -22
      tests/test_octodns_provider_yaml.py

+ 3
- 0
octodns/manager.py View File

@ -12,6 +12,7 @@ from sys import stdout
import logging
from .provider.base import BaseProvider
from .provider.plan import Plan
from .provider.yaml import SplitYamlProvider, YamlProvider
from .record import Record
from .yaml import safe_load
@ -519,6 +520,8 @@ class Manager(object):
source.populate(zone, lenient=lenient)
plan = target.plan(zone)
if plan is None:
plan = Plan(zone, zone, [], False)
# We require at least root NS so there'll always be a plan
target.apply(plan)


+ 6
- 16
octodns/provider/base.py View File

@ -49,7 +49,6 @@ class BaseProvider(BaseSource):
provider configuration.
'''
have_root_ns = False
for record in desired.records:
if record._type not in self.SUPPORTS:
msg = f'{record._type} records not supported for {record.fqdn}'
@ -96,21 +95,12 @@ class BaseProvider(BaseSource):
record.values = [record.value]
desired.add_record(record, replace=True)
elif record._type == 'NS' and record.name == '':
if self.SUPPORTS_ROOT_NS:
# record that we saw a root NS record
have_root_ns = True
else:
# ignore, we can't manage root NS records
msg = \
f'root NS record not supported for {record.fqdn}'
fallback = 'ignoring it'
self.supports_warn_or_except(msg, fallback)
desired.remove_record(record)
if self.SUPPORTS_ROOT_NS and not have_root_ns:
raise SupportsException(f'{self.id}: provider supports root NS '
'record management, but no record '
f'configured in {desired.name}; aborting')
# ignore, we can't manage root NS records
msg = \
f'root NS record not supported for {record.fqdn}'
fallback = 'ignoring it'
self.supports_warn_or_except(msg, fallback)
desired.remove_record(record)
return desired


+ 0
- 5
tests/config/dynamic.tests.yaml View File

@ -1,9 +1,4 @@
---
? ''
: - type: NS
values:
- 8.8.8.8.
- 9.9.9.9.
a:
dynamic:
pools:


+ 0
- 5
tests/config/empty.yaml View File

@ -1,6 +1 @@
---
? ''
: - type: NS
values:
- 4.4.4.4.
- 5.5.5.5.

+ 0
- 6
tests/config/split/dynamic.tests.tst/ns.yaml View File

@ -1,6 +0,0 @@
---
? ''
: - type: NS
values:
- 8.8.8.8.
- 9.9.9.9.

+ 0
- 5
tests/config/subzone.unit.tests.yaml View File

@ -1,9 +1,4 @@
---
? ''
: - type: NS
values:
- 6.6.6.6.
- 7.7.7.7.
2:
type: A
value: 2.4.4.4


+ 1
- 1
tests/test_octodns_manager.py View File

@ -302,7 +302,7 @@ class TestManager(TestCase):
with open(join(tmpdir.dirname, 'empty.yaml')) as fh:
data = safe_load(fh, False)
# just to root NS
self.assertEqual(1, len(data))
self.assertEqual(0, len(data))
def test_dump_split(self):
with TemporaryDirectory() as tmpdir:


+ 4
- 2
tests/test_octodns_provider_base.py View File

@ -766,7 +766,8 @@ class TestBaseProviderSupportsRootNs(TestCase):
self.assertEqual(self.other_root_ns_record, change.existing)
self.assertEqual(self.root_ns_record, change.new)
def test_supports_root_ns_true_missing(self):
# TODO: rework
def _test_supports_root_ns_true_missing(self):
# provider has a matching existing root record
provider = self.Provider(self.has_root)
provider.SUPPORTS_ROOT_NS = True
@ -794,7 +795,8 @@ class TestBaseProviderSupportsRootNs(TestCase):
self.assertFalse(change.existing)
self.assertEqual(self.root_ns_record, change.new)
def test_supports_root_ns_true_create_zone_missing(self):
# TODO: rework
def _test_supports_root_ns_true_create_zone_missing(self):
# provider has no existing records (create)
provider = self.Provider()
provider.SUPPORTS_ROOT_NS = True


+ 28
- 22
tests/test_octodns_provider_yaml.py View File

@ -37,7 +37,7 @@ class TestYamlProvider(TestCase):
self.assertEqual(23, len(zone.records))
source.populate(dynamic_zone)
self.assertEqual(7, len(dynamic_zone.records))
self.assertEqual(6, len(dynamic_zone.records))
# Assumption here is that a clean round-trip means that everything
# worked as expected, data that went in came back out and could be
@ -53,25 +53,25 @@ class TestYamlProvider(TestCase):
directory = join(td.dirname, 'sub', 'dir')
yaml_file = join(directory, 'unit.tests.yaml')
dynamic_yaml_file = join(directory, 'dynamic.tests.yaml')
target = YamlProvider('test', directory)
target = YamlProvider('test', directory, supports_root_ns=False)
# We add everything
plan = target.plan(zone)
self.assertEqual(21, len([c for c in plan.changes
self.assertEqual(20, len([c for c in plan.changes
if isinstance(c, Create)]))
self.assertFalse(isfile(yaml_file))
# Now actually do it
self.assertEqual(21, target.apply(plan))
self.assertEqual(20, target.apply(plan))
self.assertTrue(isfile(yaml_file))
# Dynamic plan
plan = target.plan(dynamic_zone)
self.assertEqual(7, len([c for c in plan.changes
self.assertEqual(6, len([c for c in plan.changes
if isinstance(c, Create)]))
self.assertFalse(isfile(dynamic_yaml_file))
# Apply it
self.assertEqual(7, target.apply(plan))
self.assertEqual(6, target.apply(plan))
self.assertTrue(isfile(dynamic_yaml_file))
# There should be no changes after the round trip
@ -160,16 +160,18 @@ class TestYamlProvider(TestCase):
self.assertEqual([], list(data.keys()))
def test_empty(self):
source = YamlProvider('test', join(dirname(__file__), 'config'))
source = YamlProvider('test', join(dirname(__file__), 'config'),
supports_root_ns=False)
zone = Zone('empty.', [])
# without it we see everything (root NS record)
# without it we see everything
source.populate(zone)
self.assertEqual(1, len(zone.records))
self.assertEqual(0, len(zone.records))
def test_unsorted(self):
source = YamlProvider('test', join(dirname(__file__), 'config'))
source = YamlProvider('test', join(dirname(__file__), 'config'),
supports_root_ns=False)
zone = Zone('unordered.', [])
@ -177,13 +179,14 @@ class TestYamlProvider(TestCase):
source.populate(zone)
source = YamlProvider('test', join(dirname(__file__), 'config'),
enforce_order=False)
enforce_order=False, supports_root_ns=False)
# no exception
source.populate(zone)
self.assertEqual(2, len(zone.records))
def test_subzone_handling(self):
source = YamlProvider('test', join(dirname(__file__), 'config'))
source = YamlProvider('test', join(dirname(__file__), 'config'),
supports_root_ns=False)
# If we add `sub` as a sub-zone we'll reject `www.sub`
zone = Zone('unit.tests.', ['sub'])
@ -255,7 +258,7 @@ class TestSplitYamlProvider(TestCase):
self.assertEqual(20, len(zone.records))
source.populate(dynamic_zone)
self.assertEqual(6, len(dynamic_zone.records))
self.assertEqual(5, len(dynamic_zone.records))
with TemporaryDirectory() as td:
# Add some subdirs to make sure that it can create them
@ -263,24 +266,25 @@ class TestSplitYamlProvider(TestCase):
zone_dir = join(directory, 'unit.tests.tst')
dynamic_zone_dir = join(directory, 'dynamic.tests.tst')
target = SplitYamlProvider('test', directory,
extension='.tst')
extension='.tst',
supports_root_ns=False)
# We add everything
plan = target.plan(zone)
self.assertEqual(18, len([c for c in plan.changes
self.assertEqual(17, len([c for c in plan.changes
if isinstance(c, Create)]))
self.assertFalse(isdir(zone_dir))
# Now actually do it
self.assertEqual(18, target.apply(plan))
self.assertEqual(17, target.apply(plan))
# Dynamic plan
plan = target.plan(dynamic_zone)
self.assertEqual(6, len([c for c in plan.changes
self.assertEqual(5, len([c for c in plan.changes
if isinstance(c, Create)]))
self.assertFalse(isdir(dynamic_zone_dir))
# Apply it
self.assertEqual(6, target.apply(plan))
self.assertEqual(5, target.apply(plan))
self.assertTrue(isdir(dynamic_zone_dir))
# There should be no changes after the round trip
@ -396,16 +400,18 @@ class TestOverridingYamlProvider(TestCase):
def test_provider(self):
config = join(dirname(__file__), 'config')
override_config = join(dirname(__file__), 'config', 'override')
base = YamlProvider('base', config, populate_should_replace=False)
base = YamlProvider('base', config, populate_should_replace=False,
supports_root_ns=False)
override = YamlProvider('test', override_config,
populate_should_replace=True)
populate_should_replace=True,
supports_root_ns=False)
zone = Zone('dynamic.tests.', [])
# Load the base, should see the 5 records
base.populate(zone)
got = {r.name: r for r in zone.records}
self.assertEqual(7, len(got))
self.assertEqual(6, len(got))
# We get the "dynamic" A from the base config
self.assertTrue('dynamic' in got['a'].data)
# No added
@ -414,7 +420,7 @@ class TestOverridingYamlProvider(TestCase):
# Load the overrides, should replace one and add 1
override.populate(zone)
got = {r.name: r for r in zone.records}
self.assertEqual(8, len(got))
self.assertEqual(7, len(got))
# 'a' was replaced with a generic record
self.assertEqual({
'ttl': 3600,


Loading…
Cancel
Save