diff options
-rw-r--r-- | designate/central/service.py | 4 | ||||
-rw-r--r-- | designate/objects/base.py | 2 | ||||
-rw-r--r-- | designate/tests/unit/test_central/test_basic.py | 36 |
3 files changed, 40 insertions, 2 deletions
diff --git a/designate/central/service.py b/designate/central/service.py index 37f39baa..a9fae866 100644 --- a/designate/central/service.py +++ b/designate/central/service.py @@ -821,7 +821,9 @@ class Service(service.RPCService): self.worker_api.create_zone(context, zone) if zone.type == 'SECONDARY': - self.worker_api.perform_zone_xfr(context, zone) + xfr_zone = copy.deepcopy(zone) + xfr_zone.obj_reset_changes(recursive=True) + self.worker_api.perform_zone_xfr(context, xfr_zone) # If zone is a superzone, update subzones # with new parent IDs diff --git a/designate/objects/base.py b/designate/objects/base.py index 77d1c596..bc28474b 100644 --- a/designate/objects/base.py +++ b/designate/objects/base.py @@ -136,7 +136,7 @@ class DesignateObject(base.VersionedObject): name == 'VERSION' or name == 'fields'): raise AttributeError( - "Designate object '%(type)s' has no" + "Designate object '%(type)s' has no " "attribute '%(name)s'" % { 'type': self.obj_name(), 'name': name, diff --git a/designate/tests/unit/test_central/test_basic.py b/designate/tests/unit/test_central/test_basic.py index 3726406d..5e3fba49 100644 --- a/designate/tests/unit/test_central/test_basic.py +++ b/designate/tests/unit/test_central/test_basic.py @@ -1609,6 +1609,42 @@ class CentralZoneTestCase(CentralBasic): refresh_time = central_service._generate_soa_refresh_interval() self.assertEqual(3563, refresh_time) + @patch.object(objects.Zone, 'obj_reset_changes') + def test_create_secondary_zone(self, mock_obj_reset_changes): + self.service._enforce_zone_quota = mock.Mock() + self.service._create_zone_in_storage = mock.Mock( + return_value=objects.Zone(name='example.com.', type='SECONDARY')) + self.service._is_valid_zone_name = mock.Mock() + self.service._is_valid_ttl = mock.Mock() + self.service._is_subzone = mock.Mock(return_value=False) + self.service._is_superzone = mock.Mock(return_value=[]) + self.service.storage.get_pool.return_value = RoObject( + ns_records=[RoObject()]) + self.useFixture( + fixtures.MockPatchObject( + self.service.storage, + 'find_pools', + return_value=objects.PoolList.from_list( + [ + {'id': '94ccc2c1-d751-44fe-b57f-8894c9f5c842'} + ] + ) + ) + ) + output = self.service.create_zone( + self.context, + objects.Zone( + tenant_id='1', + name='example.com.', + ttl=60, + pool_id=CentralZoneTestCase.pool__id, + refresh=0, + type='SECONDARY' + ) + ) + self.assertEqual('example.com.', output.name) + mock_obj_reset_changes.assert_called_once_with(recursive=True) + class IsSubzoneTestCase(CentralBasic): def setUp(self): |