summaryrefslogtreecommitdiff
path: root/designate/tests/unit/pool_manager/test_service.py
diff options
context:
space:
mode:
Diffstat (limited to 'designate/tests/unit/pool_manager/test_service.py')
-rw-r--r--designate/tests/unit/pool_manager/test_service.py326
1 files changed, 0 insertions, 326 deletions
diff --git a/designate/tests/unit/pool_manager/test_service.py b/designate/tests/unit/pool_manager/test_service.py
deleted file mode 100644
index 9ab3f808..00000000
--- a/designate/tests/unit/pool_manager/test_service.py
+++ /dev/null
@@ -1,326 +0,0 @@
-# Copyright 2015 Hewlett-Packard Development Company, L.P.
-#
-# Author: Federico Ceratto <federico.ceratto@hpe.com>
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-import time
-from datetime import datetime
-
-import mock
-from oslo_config import cfg
-from oslo_config import fixture as cfg_fixture
-
-from designate import exceptions
-from designate import objects
-from designate import tests
-from designate.pool_manager import service
-
-CONF = cfg.CONF
-
-POOL_DICT = {
- 'also_notifies': [
- {
- 'host': u'192.0.2.4',
- 'pool_id': u'cf2e8eab-76cd-4162-bf76-8aeee3556de0',
- 'port': 53,
- }
- ],
- 'attributes': [],
- 'description': u'Default PowerDNS Pool',
- 'id': u'cf2e8eab-76cd-4162-bf76-8aeee3556de0',
- 'name': u'default',
- 'nameservers': [
- {
- 'host': u'192.0.2.2',
- 'pool_id': u'cf2e8eab-76cd-4162-bf76-8aeee3556de0',
- 'port': 53,
- },
- {
- 'host': u'192.0.2.3',
- 'pool_id': u'cf2e8eab-76cd-4162-bf76-8aeee3556de0',
- 'port': 53,
- }
- ],
- 'ns_records': [
- {
- 'hostname': u'ns1-1.example.org.',
- 'pool_id': u'cf2e8eab-76cd-4162-bf76-8aeee3556de0',
- 'priority': 1,
- },
- {
- 'hostname': u'ns1-2.example.org.',
- 'pool_id': u'cf2e8eab-76cd-4162-bf76-8aeee3556de0',
- 'priority': 2,
- }
- ],
- 'provisioner': u'UNMANAGED',
- 'targets': [
- {
- 'description': u'PowerDNS Database Cluster',
- 'masters': [],
- 'options': [],
- 'type': 'fake',
- 'pool_id': u'cf2e8eab-76cd-4162-bf76-8aeee3556de0',
- }
- ]
-}
-
-
-class PoolManagerInitTest(tests.TestCase):
- def setUp(self):
- super(PoolManagerInitTest, self).setUp()
- self.useFixture(cfg_fixture.Config(CONF))
-
- self.service = service.Service()
-
- def test_init_no_pool_targets(self):
- pool_dict = dict(POOL_DICT)
- pool_dict['targets'] = []
-
- self.service.pool = objects.Pool.from_dict(pool_dict)
- self.assertRaises(
- exceptions.NoPoolTargetsConfigured,
- self.service._setup_target_backends
- )
-
- def test_service_name(self):
- self.assertEqual('pool_manager', self.service.service_name)
-
- def test_pool_manager_rpc_topic(self):
- CONF.set_override('topic', 'test-topic', 'service:pool_manager')
-
- self.service = service.Service()
-
- self.assertEqual('test-topic.794ccc2c-d751-44fe-b57f-8894c9f5c842',
- self.service.rpc_topic)
- self.assertEqual('pool_manager', self.service.service_name)
-
- @mock.patch('designate.service.RPCService.start')
- def test_start(self, mock_rpc_start):
- self.service.tg.add_timer = mock.Mock()
- self.service._pool_election = mock.Mock()
-
- with mock.patch.object(
- self.service.central_api,
- 'get_pool',
- return_value=objects.Pool.from_dict(POOL_DICT)):
- self.service.start()
-
- call1 = self.service.tg.add_timer.call_args_list[0][0]
- self.assertEqual(120, call1[0])
- self.assertEqual(120, call1[-1])
-
- call2 = self.service.tg.add_timer.call_args_list[1][0]
- self.assertEqual(1800, call2[0])
- self.assertEqual(1800, call2[-1])
-
- @mock.patch.object(time, 'sleep')
- def test_constant_retries(self, mock_sleep):
- gen = service._constant_retries(5, 2)
- out = list(gen)
- self.assertEqual(
- [False, False, False, False, True],
- out
- )
- self.assertEqual(4, mock_sleep.call_count)
- mock_sleep.assert_called_with(2)
-
-
-class PoolManagerTest(tests.TestCase):
- def setUp(self):
- super(PoolManagerTest, self).setUp()
- self.context = self.get_context()
- self.zone = objects.Zone(
- name="example.com.",
- type="PRIMARY",
- email="hostmaster@example.com",
- serial=1,
- )
-
- self.service = service.Service()
- self.service.tg.add_timer = mock.Mock()
- self.service.pool = mock.Mock()
- setattr(self.service.pool, 'targets', ())
- setattr(self.service.pool, 'also_notifies', ())
- setattr(self.service.pool, 'nameservers', ())
- self.service._pool_election = mock.Mock()
- self.service.target_backends = {}
-
- @mock.patch.object(service.central_api.CentralAPI, 'find_zones')
- @mock.patch.object(service.utils, 'increment_serial')
- def test_get_failed_zones(self, mock_increment_serial, mock_find_zones):
- mock_increment_serial.return_value = 1453758656
-
- self.service._get_failed_zones(self.context, service.DELETE_ACTION)
-
- call_one = mock.call(
- self.context,
- {
- 'action': 'DELETE',
- 'status': 'ERROR',
- 'pool_id': '794ccc2c-d751-44fe-b57f-8894c9f5c842'
- }
- )
-
- call_two = mock.call(
- self.context,
- {
- 'action': 'DELETE',
- 'status': 'PENDING',
- 'serial': '<1453758201', # 1453758656-455
- 'pool_id': '794ccc2c-d751-44fe-b57f-8894c9f5c842'
- }
- )
-
- # any_order because Mock adds some random calls in
- mock_find_zones.assert_has_calls([call_one, call_two],
- any_order=True)
-
- def test_periodic_recover(self):
- def mock_get_failed_zones(ctx, action):
- if action == service.DELETE_ACTION:
- return [self.zone] * 3
- if action == service.CREATE_ACTION:
- return [self.zone] * 4
- if action == service.UPDATE_ACTION:
- return [self.zone] * 5
-
- self.service._get_admin_context_all_tenants = mock.Mock(
- return_value=self.context
- )
- self.service._get_failed_zones = mock_get_failed_zones
- self.service.pool_manager_api.delete_zone = mock.Mock()
- self.service.pool_manager_api.create_zone = mock.Mock()
- self.service.pool_manager_api.update_zone = mock.Mock()
-
- self.service.periodic_recovery()
-
- self.service.pool_manager_api.delete_zone.assert_called_with(
- self.context, self.zone
- )
-
- self.assertEqual(
- 3, self.service.pool_manager_api.delete_zone.call_count
- )
-
- self.service.pool_manager_api.create_zone.assert_called_with(
- self.context, self.zone
- )
- self.assertEqual(
- 4, self.service.pool_manager_api.create_zone.call_count
- )
-
- self.service.pool_manager_api.update_zone.assert_called_with(
- self.context, self.zone
- )
-
- self.assertEqual(
- 5, self.service.pool_manager_api.update_zone.call_count
- )
-
- def test_periodic_recover_exception(self):
- # Raise an exception half through the recovery
-
- def mock_get_failed_zones(ctx, action):
- if action == service.DELETE_ACTION:
- return [self.zone] * 3
- if action == service.CREATE_ACTION:
- return [self.zone] * 4
-
- self.service._get_admin_context_all_tenants = mock.Mock(
- return_value=self.context
- )
- self.service._get_failed_zones = mock_get_failed_zones
- self.service.pool_manager_api.delete_zone = mock.Mock()
- self.service.pool_manager_api.create_zone = mock.Mock(
- side_effect=Exception('oops')
- )
- self.service.pool_manager_api.update_zone = mock.Mock()
-
- self.service.periodic_recovery()
-
- self.service.pool_manager_api.delete_zone.assert_called_with(
- self.context, self.zone
- )
-
- self.assertEqual(
- 3, self.service.pool_manager_api.delete_zone.call_count
- )
-
- self.service.pool_manager_api.create_zone.assert_called_with(
- self.context, self.zone
- )
-
- self.assertEqual(
- 1, self.service.pool_manager_api.create_zone.call_count
- )
-
- self.assertEqual(
- 0, self.service.pool_manager_api.update_zone.call_count
- )
-
- def test_periodic_sync(self, ):
- self.service._fetch_healthy_zones = mock.Mock(return_value=[
- objects.Zone(name='a_zone.'),
- objects.Zone(name='b_zone.'),
- objects.Zone(name='c_zone.'),
- ])
-
- self.service.update_zone = mock.Mock()
- self.service._exceed_or_meet_threshold = mock.Mock(return_value=True)
-
- self.service.periodic_sync()
-
- self.assertEqual(3, self.service.update_zone.call_count)
-
- def test_target_sync(self):
- date = 1463154200
- older_date = datetime.fromtimestamp(1463154000)
- newer_date = datetime.fromtimestamp(1463154300)
-
- zones = [
- objects.Zone(name='a_zone.', status='ACTIVE',
- created_at=older_date),
- objects.Zone(name='b_zone.', status='ACTIVE',
- created_at=newer_date),
- objects.Zone(name='c_zone.', status='DELETED',
- created_at=older_date, serial=1),
- ]
-
- self.service._delete_zone_on_target = mock.Mock()
- self.service._create_zone_on_target = mock.Mock()
- self.service._update_zone_on_target = mock.Mock()
- self.service.mdns_api.poll_for_serial_number = mock.Mock()
-
- target = mock.Mock()
-
- self.service._target_sync(self.context, zones, target, date)
-
- self.assertEqual(1, self.service._delete_zone_on_target.call_count)
- self.assertEqual(1, self.service._create_zone_on_target.call_count)
- self.assertEqual(1, self.service._update_zone_on_target.call_count)
-
- def test_create_zone(self):
- self.service._exceed_or_meet_threshold = mock.Mock(return_value=True)
-
- self.service.create_zone(self.context, self.zone)
-
- def test_update_zone(self, ):
- self.service._exceed_or_meet_threshold = mock.Mock(return_value=True)
-
- self.service.update_zone(self.context, self.zone)
-
- def test_delete_zone(self):
- self.service._exceed_or_meet_threshold = mock.Mock(return_value=True)
-
- self.service.delete_zone(self.context, self.zone)