From da6cb248f427136012e108b6ed39ea4163f161eb Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Sat, 11 Oct 2025 12:52:26 -0700 Subject: [PATCH] Verify that dynamic zone config correctly handles subzones when they're dynamic --- tests/config/sub.dynamic.tests.yaml | 4 +++ tests/test_octodns_manager.py | 47 +++++++++++++++++++++++++++-- tests/test_octodns_provider_yaml.py | 1 + 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 tests/config/sub.dynamic.tests.yaml diff --git a/tests/config/sub.dynamic.tests.yaml b/tests/config/sub.dynamic.tests.yaml new file mode 100644 index 0000000..7e66049 --- /dev/null +++ b/tests/config/sub.dynamic.tests.yaml @@ -0,0 +1,4 @@ +--- +www: + type: A + value: 5.5.5.5 \ No newline at end of file diff --git a/tests/test_octodns_manager.py b/tests/test_octodns_manager.py index 6ef1cf5..9cc3272 100644 --- a/tests/test_octodns_manager.py +++ b/tests/test_octodns_manager.py @@ -1124,8 +1124,10 @@ class TestManager(TestCase): manager = Manager(get_config_filename('dynamic-config.yaml')) - # should sync everything across all zones, total of 32 records - self.assertEqual(32, manager.sync(dry_run=False)) + # should sync everything across all zones, total of 33 records + # unit.tests. (22) + dynamic.tests. (7) + sub.dynamic.tests. (1) + + # subzone.unit.tests. (3) = 33 + self.assertEqual(33, manager.sync(dry_run=False)) def test_dynamic_config_with_arpa(self): with TemporaryDirectory() as tmpdir: @@ -1156,6 +1158,47 @@ class TestManager(TestCase): manager.sync() self.assertTrue('does not support `list_zones`' in str(ctx.exception)) + def test_dynamic_config_with_subzones(self): + with TemporaryDirectory() as tmpdir: + environ['YAML_TMP_DIR'] = tmpdir.dirname + + manager = Manager(get_config_filename('dynamic-config.yaml')) + + # Before sync, the dynamic zones haven't been discovered yet + # But we can verify they will be after preprocessing + zones = dict(manager.config['zones']) + preprocessed = manager._preprocess_zones( + zones, eligible_sources=None + ) + + # Verify that both dynamic.tests. and sub.dynamic.tests. were discovered + self.assertIn('dynamic.tests.', preprocessed) + self.assertIn('sub.dynamic.tests.', preprocessed) + + # Now update the config with preprocessed zones so we can verify subzones + manager.config['zones'] = preprocessed + manager._configured_sub_zones = None + + # Verify that dynamic.tests. zone has sub.dynamic.tests. as a subzone + dynamic_zone = manager.get_zone('dynamic.tests.') + self.assertEqual({'sub'}, dynamic_zone.sub_zones) + + # Sync and verify both parent and subzone records are synced + # dynamic.tests. has 7 records, sub.dynamic.tests. has 1 record + # unit.tests. has 22 records + # Total: 7 + 1 + 22 = 30 records + self.assertEqual( + 30, + manager.sync( + eligible_zones=[ + 'unit.tests.', + 'dynamic.tests.', + 'sub.dynamic.tests.', + ], + dry_run=False, + ), + ) + def test_build_kwargs(self): manager = Manager(get_config_filename('simple.yaml')) diff --git a/tests/test_octodns_provider_yaml.py b/tests/test_octodns_provider_yaml.py index 61c1e14..ea88cf3 100644 --- a/tests/test_octodns_provider_yaml.py +++ b/tests/test_octodns_provider_yaml.py @@ -315,6 +315,7 @@ xn--dj-kia8a: self.assertEqual( [ 'dynamic.tests.', + 'sub.dynamic.tests.', 'sub.txt.unit.tests.', 'subzone.unit.tests.', 'unit.tests.',