Merge "Added additional worker unit test coverage"

This commit is contained in:
Zuul
2022-05-05 18:05:37 +00:00
committed by Gerrit Code Review
5 changed files with 142 additions and 13 deletions

View File

@@ -13,17 +13,28 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.mport threading
from oslo_config import cfg
from oslo_config import fixture as cfg_fixture
import oslotest.base
from unittest import mock
from designate.central import rpcapi as central_rpcapi
from designate import exceptions
from designate import objects
import designate.quota.base
from designate import rpc
from designate import storage
from designate.worker import rpcapi as worker_rpcapi
from designate.worker.tasks import base
CONF = cfg.CONF
class TestTask(oslotest.base.BaseTestCase):
def setUp(self):
super(TestTask, self).setUp()
self.useFixture(cfg_fixture.Config(CONF))
self.context = mock.Mock()
self.task = base.Task(None)
self.storage = self.task._storage = mock.Mock()
@@ -31,8 +42,38 @@ class TestTask(oslotest.base.BaseTestCase):
def test_constructor(self):
self.assertTrue(self.task)
def test_call(self):
self.assertRaises(NotImplementedError, self.task)
@mock.patch.object(storage, 'get_storage', mock.Mock())
def test_quota(self):
self.assertIsInstance(self.task.quota, designate.quota.base.Quota)
@mock.patch.object(rpc, 'get_client', mock.Mock())
def test_central_api(self):
self.assertIsInstance(self.task.central_api, central_rpcapi.CentralAPI)
@mock.patch.object(rpc, 'get_client', mock.Mock())
def test_worker_api(self):
self.assertIsNone(self.task._worker_api)
self.assertIsInstance(self.task.worker_api, worker_rpcapi.WorkerAPI)
self.assertIsNotNone(self.task._worker_api)
self.assertIsInstance(self.task.worker_api, worker_rpcapi.WorkerAPI)
def test_compare_threshold_at_50_percentage(self):
CONF.set_override('threshold_percentage', 50, 'service:worker')
self.assertFalse(self.task.compare_threshold(0, 0))
self.assertTrue(self.task.compare_threshold(3, 3))
self.assertFalse(self.task.compare_threshold(1, 3))
self.assertFalse(self.task.compare_threshold(2, 5))
self.assertTrue(self.task.compare_threshold(4, 5))
def test_compare_threshold_at_100_percentage(self):
CONF.set_override('threshold_percentage', 100, 'service:worker')
self.assertFalse(self.task.compare_threshold(0, 0))
self.assertTrue(self.task.compare_threshold(3, 3))
self.assertFalse(self.task.compare_threshold(1, 3))
self.assertFalse(self.task.compare_threshold(2, 5))
self.assertFalse(self.task.compare_threshold(4, 5))
def test_current_action_is_valid(self):
self.storage.get_zone = mock.Mock(
@@ -116,3 +157,6 @@ class TestTask(oslotest.base.BaseTestCase):
self.task.is_current_action_valid(
self.context, 'UPDATE', objects.Zone(action='UPDATE'))
)
def test_call(self):
self.assertRaises(NotImplementedError, self.task)

View File

@@ -15,18 +15,30 @@
# under the License.mport threading
from unittest import mock
from oslo_config import cfg
from oslo_config import fixture as cfg_fixture
from designate import exceptions
from designate.tests import fixtures
from designate.tests import TestCase
from designate.worker import processing
CONF = cfg.CONF
class TestProcessingExecutor(TestCase):
def setUp(self):
super(TestProcessingExecutor, self).setUp()
self.stdlog = fixtures.StandardLogging()
self.useFixture(cfg_fixture.Config(CONF))
self.useFixture(self.stdlog)
def test_default_executor(self):
CONF.set_override('threads', 100, 'service:worker')
executor = processing.default_executor()
self.assertEqual(100, executor._max_workers)
def test_execute_multiple_tasks(self):
def t1():
return 1

View File

@@ -21,9 +21,11 @@ import oslo_messaging as messaging
import oslotest.base
from designate import backend
from designate.central import rpcapi as central_rpcapi
from designate import exceptions
from designate import objects
import designate.service
from designate import storage
import designate.tests
from designate.tests import fixtures
from designate.worker import processing
@@ -67,12 +69,19 @@ class TestService(oslotest.base.BaseTestCase):
self.assertEqual('worker', self.service.service_name)
def test_central_api(self):
self.service._central_api = 'foo'
self.assertEqual(self.service.central_api, 'foo')
self.assertIsNone(self.service._central_api)
self.assertIsInstance(self.service.central_api,
central_rpcapi.CentralAPI)
self.assertIsNotNone(self.service._central_api)
self.assertIsInstance(self.service.central_api,
central_rpcapi.CentralAPI)
@mock.patch.object(storage, 'get_storage', mock.Mock())
def test_storage(self):
self.service._storage = 'foo'
self.assertEqual(self.service.storage, 'foo')
self.assertIsNone(self.service._storage)
self.assertIsInstance(self.service.storage, mock.Mock)
self.assertIsNotNone(self.service._storage)
self.assertIsInstance(self.service.storage, mock.Mock)
@mock.patch.object(backend, 'get_backend', mock.Mock())
def test_setup_target_backends(self):

View File

@@ -0,0 +1,70 @@
# 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.mport threading
from oslo_config import cfg
from oslo_config import fixture as cfg_fixture
import oslotest.base
from designate.worker.tasks import base
CONF = cfg.CONF
class TestTaskConfig(oslotest.base.BaseTestCase):
def setUp(self):
super(TestTaskConfig, self).setUp()
self.useFixture(cfg_fixture.Config(CONF))
self.task_config = base.TaskConfig()
def test_load_config(self):
self.assertIsInstance(
self.task_config.config, cfg.ConfigOpts.GroupAttr
)
def test_threshold_percentage(self):
CONF.set_override('threshold_percentage', 51, 'service:worker')
self.assertIsNone(self.task_config._threshold_percentage)
self.assertEqual(51, self.task_config.threshold_percentage)
self.assertIsNotNone(self.task_config._threshold_percentage)
self.assertEqual(51, self.task_config.threshold_percentage)
def test_timeout(self):
CONF.set_override('poll_timeout', 52, 'service:worker')
self.assertIsNone(self.task_config._timeout)
self.assertEqual(52, self.task_config.timeout)
self.assertIsNotNone(self.task_config._timeout)
self.assertEqual(52, self.task_config.timeout)
def test_retry_interval(self):
CONF.set_override('poll_retry_interval', 53, 'service:worker')
self.assertEqual(53, self.task_config.retry_interval)
def test_max_retries(self):
CONF.set_override('poll_max_retries', 54, 'service:worker')
self.assertEqual(54, self.task_config.max_retries)
def test_delay(self):
CONF.set_override('poll_delay', 55, 'service:worker')
self.assertEqual(55, self.task_config.delay)
def test_max_prop_time(self):
CONF.set_override('threshold_percentage', 100, 'service:worker')
CONF.set_override('poll_timeout', 10, 'service:worker')
CONF.set_override('poll_retry_interval', 10, 'service:worker')
CONF.set_override('poll_max_retries', 10, 'service:worker')
CONF.set_override('poll_delay', 3, 'service:worker')
self.assertIsNone(self.task_config._max_prop_time)
self.assertEqual(203, self.task_config.max_prop_time)
self.assertIsNotNone(self.task_config._max_prop_time)
self.assertEqual(203, self.task_config.max_prop_time)

View File

@@ -26,16 +26,10 @@ CONF = cfg.CONF
def default_executor():
thread_count = 5
try:
thread_count = CONF['service:worker'].threads
except Exception:
pass
# TODO(mugsie): if (when) we move away from eventlet this may have to
# revert back to ThreadPoolExecutor - this is changing due to
# https://bugs.launchpad.net/bugs/1782647 (eventlet + py37 issues)
return futurist.GreenThreadPoolExecutor(thread_count)
return futurist.GreenThreadPoolExecutor(CONF['service:worker'].threads)
class Executor(object):