diff options
author | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2019-01-18 17:09:52 -0800 |
---|---|---|
committer | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2019-02-19 23:40:08 -0800 |
commit | 4e3c35931d3ef0b2f60b6a718f39ecb8f325a7d5 (patch) | |
tree | 79f4ba54919b02597f519ac2ea259051a4feec62 | |
parent | 717b94c2c3e6c8bcf3427d3bd729167465d8d81d (diff) | |
download | designate-4e3c35931d3ef0b2f60b6a718f39ecb8f325a7d5.tar.gz |
Make unit-testing more robust
* Cleaned up producer tests.
* Fixed a mutable argument.
* Removed unused rpc timeout override for devstack.
* Set retry interval to 0 in pool manager tests.
Change-Id: I4105d192e9de8b95c792969c7432cf6d5d9fb9fb
-rw-r--r-- | designate/central/service.py | 4 | ||||
-rw-r--r-- | designate/tests/test_pool_manager/test_service.py | 9 | ||||
-rw-r--r-- | designate/tests/test_producer/test_tasks.py | 116 | ||||
-rwxr-xr-x | devstack/plugin.sh | 1 |
4 files changed, 53 insertions, 77 deletions
diff --git a/designate/central/service.py b/designate/central/service.py index ec249018..ffd12c65 100644 --- a/designate/central/service.py +++ b/designate/central/service.py @@ -1939,7 +1939,9 @@ class Service(service.RPCService, service.Service): data = self.network_api.list_floatingips(context, region=region) return self._list_to_dict(data, keys=['region', 'id']) - def _list_to_dict(self, data, keys=['id']): + def _list_to_dict(self, data, keys=None): + if keys is None: + keys = ['id'] new = {} for i in data: key = tuple([i[key] for key in keys]) diff --git a/designate/tests/test_pool_manager/test_service.py b/designate/tests/test_pool_manager/test_service.py index 4afbdcb9..2610ebb8 100644 --- a/designate/tests/test_pool_manager/test_service.py +++ b/designate/tests/test_pool_manager/test_service.py @@ -42,7 +42,7 @@ class PoolManagerServiceNoopTest(PoolManagerTestCase): threshold_percentage=100, enable_recovery_timer=False, enable_sync_timer=False, - poll_retry_interval=1, + poll_retry_interval=0, poll_max_retries=1, cache_driver='noop', group='service:pool_manager') @@ -89,7 +89,6 @@ class PoolManagerServiceNoopTest(PoolManagerTestCase): def test_create_zone( self, mock_update_status, mock_notify_zone_changed, mock_poll_for_serial_number, _): - zone = self._build_zone('example.org.', 'CREATE', 'PENDING') self.service.create_zone(self.admin_context, zone) @@ -104,9 +103,9 @@ class PoolManagerServiceNoopTest(PoolManagerTestCase): self.assertEqual(2, mock_poll_for_serial_number.call_count) self.assertEqual( [call(self.admin_context, zone, - self.service.pool.nameservers[0], 30, 1, 1, 5), + self.service.pool.nameservers[0], 30, 0, 1, 5), call(self.admin_context, zone, - self.service.pool.nameservers[1], 30, 1, 1, 5)], + self.service.pool.nameservers[1], 30, 0, 1, 5)], mock_poll_for_serial_number.call_args_list) # Pool manager needs to call into mdns to calculate consensus as @@ -148,7 +147,7 @@ class PoolManagerServiceNoopTest(PoolManagerTestCase): zone = self._build_zone('example.org.', 'CREATE', 'PENDING') - mock_create_zone.side_effect = [None, exceptions.Backend] + mock_create_zone.side_effect = [exceptions.Backend, None] self.service.create_zone(self.admin_context, zone) diff --git a/designate/tests/test_producer/test_tasks.py b/designate/tests/test_producer/test_tasks.py index 4f9135bf..1d870aaa 100644 --- a/designate/tests/test_producer/test_tasks.py +++ b/designate/tests/test_producer/test_tasks.py @@ -28,27 +28,18 @@ from designate.producer import tasks LOG = logging.getLogger(__name__) -class TaskTest(TestCase): - def setUp(self): - super(TaskTest, self).setUp() - - def _enable_tasks(self, tasks): - self.config( - enabled_tasks=tasks, - group="service:producer") - +class DeletedZonePurgeTest(TestCase): + number_of_zones = 20 + batch_size = 5 + time_threshold = 24 * 60 * 60 -class DeletedzonePurgeTest(TaskTest): def setUp(self): - super(DeletedzonePurgeTest, self).setUp() - + super(DeletedZonePurgeTest, self).setUp() self.config( - interval=3600, - time_threshold=604800, - batch_size=100, + time_threshold=self.time_threshold, + batch_size=self.batch_size, group="producer_task:zone_purge" ) - self.purge_task_fixture = self.useFixture( fixtures.ZoneManagerTaskFixture(tasks.DeletedZonePurgeTask) ) @@ -57,19 +48,16 @@ class DeletedzonePurgeTest(TaskTest): # Create a zone and set it as deleted zone = self.create_zone(name=name) self._delete_zone(zone, mock_deletion_time) - return zone def _fetch_all_zones(self): - # Fetch all zones including deleted ones + # Fetch all zones including deleted ones. query = tables.zones.select() return self.central_service.storage.session.execute(query).fetchall() def _delete_zone(self, zone, mock_deletion_time): # Set a zone as deleted zid = zone.id.replace('-', '') - query = tables.zones.update().\ - where(tables.zones.c.id == zid).\ - values( + query = tables.zones.update().where(tables.zones.c.id == zid).values( action='NONE', deleted=zid, deleted_at=mock_deletion_time, @@ -78,62 +66,63 @@ class DeletedzonePurgeTest(TaskTest): pxy = self.central_service.storage.session.execute(query) self.assertEqual(1, pxy.rowcount) - return zone def _create_deleted_zones(self): - # Create a number of deleted zones in the past days - zones = [] + # Create a number of deleted zones in the past days. now = timeutils.utcnow() - for age in range(18): - age *= (24 * 60 * 60) # seconds + for index in range(self.number_of_zones): + age = index * (self.time_threshold // self.number_of_zones * 2) delta = datetime.timedelta(seconds=age) deletion_time = now - delta - name = "example%d.org." % len(zones) - z = self._create_deleted_zone(name, deletion_time) - zones.append(z) - - return zones + name = "example%d.org." % index + self._create_deleted_zone(name, deletion_time) def test_purge_zones(self): - # Create 18 zones, run producer, check if 7 zones are remaining - self.config(quota_zones=1000) + # Create X zones, run producer, check if half of the zones + # are remaining. + self.config(quota_zones=self.number_of_zones) self._create_deleted_zones() - self.purge_task_fixture.task() + for remaining in reversed(range(self.number_of_zones // 2, + self.number_of_zones, + self.batch_size)): + self.purge_task_fixture.task() + + zones = self._fetch_all_zones() + LOG.info("Number of zones: %d", len(zones)) + self.assertEqual(remaining, len(zones)) - zones = self._fetch_all_zones() - LOG.info("Number of zones: %d", len(zones)) - self.assertEqual(7, len(zones)) + remaning_zones = self._fetch_all_zones() + self.assertEqual(len(remaning_zones), self.number_of_zones // 2) -class PeriodicGenerateDelayedNotifyTaskTest(TaskTest): +class PeriodicGenerateDelayedNotifyTaskTest(TestCase): + number_of_zones = 20 + batch_size = 5 def setUp(self): super(PeriodicGenerateDelayedNotifyTaskTest, self).setUp() - + self.config(quota_zones=self.number_of_zones) self.config( - interval=5, - batch_size=100, + interval=1, + batch_size=self.batch_size, group="producer_task:delayed_notify" ) - self.generate_delayed_notify_task_fixture = self.useFixture( fixtures.ZoneManagerTaskFixture( tasks.PeriodicGenerateDelayedNotifyTask ) ) - def _fetch_zones(self, query=None): - # Fetch zones including deleted ones - if query is None: - query = tables.zones.select() + def _fetch_zones(self, query): + # Fetch zones including deleted ones. return self.central_service.storage.session.execute(query).fetchall() def _create_zones(self): - # Create a number of zones; half of them with delayed_notify set - for age in range(20): - name = "example%d.org." % age - delayed_notify = (age % 2 == 0) + # Create a number of zones; half of them with delayed_notify set. + for index in range(self.number_of_zones): + name = "example%d.org." % index + delayed_notify = (index % 2 == 0) self.create_zone( name=name, delayed_notify=delayed_notify, @@ -141,27 +130,14 @@ class PeriodicGenerateDelayedNotifyTaskTest(TaskTest): def test_generate_delayed_notify_zones(self): # Create zones and set some of them as pending update. - self.generate_delayed_notify_task_fixture.task() - self.config(quota_zones=1000) - self.config( - interval=1, - batch_size=5, - group="producer_task:delayed_notify" - ) self._create_zones() - zones = self._fetch_zones(tables.zones.select().where( - tables.zones.c.delayed_notify == True)) # nopep8 - self.assertEqual(10, len(zones)) - - self.generate_delayed_notify_task_fixture.task() - zones = self._fetch_zones(tables.zones.select().where( - tables.zones.c.delayed_notify == True)) # nopep8 - self.assertEqual(5, len(zones)) + for remaining in reversed(range(0, + self.number_of_zones // 2, + self.batch_size)): + self.generate_delayed_notify_task_fixture.task() - # Run the task and check if it reset the delayed_notify flag - self.generate_delayed_notify_task_fixture.task() + zones = self._fetch_zones(tables.zones.select().where( + tables.zones.c.delayed_notify)) - zones = self._fetch_zones(tables.zones.select().where( - tables.zones.c.delayed_notify == True)) # nopep8 - self.assertEqual(0, len(zones)) + self.assertEqual(remaining, len(zones)) diff --git a/devstack/plugin.sh b/devstack/plugin.sh index 2264a937..37ed6e14 100755 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -34,7 +34,6 @@ function configure_designate { # General Configuration iniset_rpc_backend designate $DESIGNATE_CONF DEFAULT - iniset $DESIGNATE_CONF DEFAULT rpc_response_timeout 60 iniset $DESIGNATE_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL iniset $DESIGNATE_CONF DEFAULT state_path $DESIGNATE_STATE_PATH |