From a0a88d7c0c4d7470ef86f40b153b3ec606b80537 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Tue, 11 Feb 2020 17:16:14 +0000 Subject: [PATCH] trivial: Remove FakeScheduler We don't need this and it's blocking us from removing pluggable scheduler drivers. Remove it. Change-Id: I61c1a47559645c41089747cc81270848b58b68f9 Signed-off-by: Stephen Finucane --- nova/conf/scheduler.py | 9 +--- nova/scheduler/manager.py | 17 +++---- nova/tests/unit/cmd/test_scheduler.py | 13 ------ .../unit/scheduler/test_filter_scheduler.py | 44 ++++++++++++++----- .../{test_scheduler.py => test_manager.py} | 42 ------------------ setup.cfg | 1 - 6 files changed, 45 insertions(+), 81 deletions(-) rename nova/tests/unit/scheduler/{test_scheduler.py => test_manager.py} (92%) diff --git a/nova/conf/scheduler.py b/nova/conf/scheduler.py index e82d9855102a..b90f16c3706f 100644 --- a/nova/conf/scheduler.py +++ b/nova/conf/scheduler.py @@ -32,20 +32,15 @@ of the entrypoints under the namespace 'nova.scheduler.driver' of file 'setup.cfg'. If nothing is specified in this option, the 'filter_scheduler' is used. -Other options are: - -* 'fake_scheduler' which is used for testing. - Possible values: * Any of the drivers included in Nova: * filter_scheduler - * fake_scheduler * You may also set this to the entry point name of a custom scheduler driver, - but you will be responsible for creating and maintaining it in your setup.cfg - file. + but you will be responsible for creating and maintaining it in your + ``setup.cfg`` file. Related options: diff --git a/nova/scheduler/manager.py b/nova/scheduler/manager.py index 03da353562fe..5a5577d4c8d5 100644 --- a/nova/scheduler/manager.py +++ b/nova/scheduler/manager.py @@ -55,16 +55,17 @@ class SchedulerManager(manager.Manager): _sentinel = object() - def __init__(self, scheduler_driver=None, *args, **kwargs): + def __init__(self, *args, **kwargs): self.placement_client = report.SchedulerReportClient() - if not scheduler_driver: - scheduler_driver = CONF.scheduler.driver self.driver = driver.DriverManager( - "nova.scheduler.driver", - scheduler_driver, - invoke_on_load=True).driver - super(SchedulerManager, self).__init__(service_name='scheduler', - *args, **kwargs) + 'nova.scheduler.driver', + CONF.scheduler.driver, + invoke_on_load=True + ).driver + + super(SchedulerManager, self).__init__( + service_name='scheduler', *args, **kwargs + ) @periodic_task.periodic_task( spacing=CONF.scheduler.discover_hosts_in_cells_interval, diff --git a/nova/tests/unit/cmd/test_scheduler.py b/nova/tests/unit/cmd/test_scheduler.py index 01e685d2d4f1..e207c7343fd9 100644 --- a/nova/tests/unit/cmd/test_scheduler.py +++ b/nova/tests/unit/cmd/test_scheduler.py @@ -46,16 +46,3 @@ class TestScheduler(test.NoDBTestCase): mock_serve.assert_called_once_with( service_create.return_value, workers=4) mock_wait.assert_called_once_with() - - @mock.patch('nova.service.Service.create') - @mock.patch('nova.service.serve') - @mock.patch('nova.service.wait') - @mock.patch('oslo_concurrency.processutils.get_worker_count') - def test_workers_fake_scheduler(self, get_worker_count, mock_wait, - mock_serve, service_create): - self.flags(driver='fake_scheduler', group='scheduler') - scheduler.main() - get_worker_count.assert_not_called() - mock_serve.assert_called_once_with( - service_create.return_value, workers=1) - mock_wait.assert_called_once_with() diff --git a/nova/tests/unit/scheduler/test_filter_scheduler.py b/nova/tests/unit/scheduler/test_filter_scheduler.py index 656f9a416db1..7a5e6c232f9c 100644 --- a/nova/tests/unit/scheduler/test_filter_scheduler.py +++ b/nova/tests/unit/scheduler/test_filter_scheduler.py @@ -20,14 +20,15 @@ import mock from oslo_serialization import jsonutils from oslo_utils.fixture import uuidsentinel as uuids +from nova import context from nova import exception from nova import objects from nova.scheduler import filter_scheduler from nova.scheduler import host_manager from nova.scheduler import utils as scheduler_utils from nova.scheduler import weights +from nova import servicegroup from nova import test # noqa -from nova.tests.unit.scheduler import test_scheduler fake_numa_limit = objects.NUMATopologyLimits(cpu_allocation_ratio=1.0, @@ -50,18 +51,41 @@ fake_selection = objects.Selection(service_host="fake_host", allocation_request_version=fake_alloc_version) -class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase): +class FilterSchedulerTestCase(test.NoDBTestCase): """Test case for Filter Scheduler.""" - driver_cls = filter_scheduler.FilterScheduler - + @mock.patch.object(host_manager.HostManager, '_init_instance_info', + new=mock.Mock()) + @mock.patch.object(host_manager.HostManager, '_init_aggregates', + new=mock.Mock()) + @mock.patch('nova.scheduler.client.report.SchedulerReportClient', + autospec=True, new=mock.Mock()) + @mock.patch('nova.scheduler.client.query.SchedulerQueryClient', + autospec=True, new=mock.Mock()) def setUp(self): - with mock.patch( - 'nova.scheduler.client.report.SchedulerReportClient', - autospec=True), mock.patch( - 'nova.scheduler.client.query.SchedulerQueryClient', - autospec=True): - super(FilterSchedulerTestCase, self).setUp() + super(FilterSchedulerTestCase, self).setUp() + + self.driver = filter_scheduler.FilterScheduler() + self.context = context.RequestContext('fake_user', 'fake_project') + self.topic = 'fake_topic' + self.servicegroup_api = servicegroup.API() + + @mock.patch('nova.objects.ServiceList.get_by_topic') + @mock.patch('nova.servicegroup.API.service_is_up') + def test_hosts_up(self, mock_service_is_up, mock_get_by_topic): + service1 = objects.Service(host='host1') + service2 = objects.Service(host='host2') + services = objects.ServiceList(objects=[service1, service2]) + + mock_get_by_topic.return_value = services + mock_service_is_up.side_effect = [False, True] + + result = self.driver.hosts_up(self.context, self.topic) + self.assertEqual(result, ['host2']) + + mock_get_by_topic.assert_called_once_with(self.context, self.topic) + calls = [mock.call(service1), mock.call(service2)] + self.assertEqual(calls, mock_service_is_up.call_args_list) @mock.patch('nova.scheduler.utils.claim_resources') @mock.patch('nova.scheduler.filter_scheduler.FilterScheduler.' diff --git a/nova/tests/unit/scheduler/test_scheduler.py b/nova/tests/unit/scheduler/test_manager.py similarity index 92% rename from nova/tests/unit/scheduler/test_scheduler.py rename to nova/tests/unit/scheduler/test_manager.py index 9ee56aeff7b8..294e752ca78d 100644 --- a/nova/tests/unit/scheduler/test_scheduler.py +++ b/nova/tests/unit/scheduler/test_manager.py @@ -27,7 +27,6 @@ from nova import objects from nova.scheduler import filter_scheduler from nova.scheduler import host_manager from nova.scheduler import manager -from nova import servicegroup from nova import test from nova.tests.unit import fake_server_actions from nova.tests.unit.scheduler import fakes @@ -60,14 +59,11 @@ class SchedulerManagerTestCase(test.NoDBTestCase): """Test case for scheduler manager.""" manager_cls = manager.SchedulerManager - driver_cls = fakes.FakeScheduler - driver_plugin_name = 'fake_scheduler' @mock.patch.object(host_manager.HostManager, '_init_instance_info') @mock.patch.object(host_manager.HostManager, '_init_aggregates') def setUp(self, mock_init_agg, mock_init_inst): super(SchedulerManagerTestCase, self).setUp() - self.flags(driver=self.driver_plugin_name, group='scheduler') self.manager = self.manager_cls() self.context = context.RequestContext('fake_user', 'fake_project') self.topic = 'fake_topic' @@ -75,11 +71,6 @@ class SchedulerManagerTestCase(test.NoDBTestCase): self.fake_kwargs = {'cat': 'meow', 'dog': 'woof'} fake_server_actions.stub_out_action_events(self) - def test_1_correct_init(self): - # Correct scheduler driver - manager = self.manager - self.assertIsInstance(manager.driver, self.driver_cls) - @mock.patch('nova.scheduler.request_filter.process_reqspec') @mock.patch('nova.scheduler.utils.resources_from_request_spec') @mock.patch('nova.scheduler.client.report.SchedulerReportClient.' @@ -448,36 +439,3 @@ class SchedulerManagerTestCase(test.NoDBTestCase): self.manager._discover_hosts_in_cells(mock.sentinel.context) mock_log_warning.assert_not_called() mock_log_debug.assert_called_once_with(msg) - - -class SchedulerTestCase(test.NoDBTestCase): - """Test case for base scheduler driver class.""" - - # So we can subclass this test and re-use tests if we need. - driver_cls = fakes.FakeScheduler - - @mock.patch.object(host_manager.HostManager, '_init_instance_info') - @mock.patch.object(host_manager.HostManager, '_init_aggregates') - def setUp(self, mock_init_agg, mock_init_inst): - super(SchedulerTestCase, self).setUp() - self.driver = self.driver_cls() - self.context = context.RequestContext('fake_user', 'fake_project') - self.topic = 'fake_topic' - self.servicegroup_api = servicegroup.API() - - @mock.patch('nova.objects.ServiceList.get_by_topic') - @mock.patch('nova.servicegroup.API.service_is_up') - def test_hosts_up(self, mock_service_is_up, mock_get_by_topic): - service1 = objects.Service(host='host1') - service2 = objects.Service(host='host2') - services = objects.ServiceList(objects=[service1, service2]) - - mock_get_by_topic.return_value = services - mock_service_is_up.side_effect = [False, True] - - result = self.driver.hosts_up(self.context, self.topic) - self.assertEqual(result, ['host2']) - - mock_get_by_topic.assert_called_once_with(self.context, self.topic) - calls = [mock.call(service1), mock.call(service2)] - self.assertEqual(calls, mock_service_is_up.call_args_list) diff --git a/setup.cfg b/setup.cfg index b9b8f8eeea9a..04ef12814163 100644 --- a/setup.cfg +++ b/setup.cfg @@ -50,7 +50,6 @@ nova.compute.monitors.cpu = virt_driver = nova.compute.monitors.cpu.virt_driver:Monitor nova.scheduler.driver = filter_scheduler = nova.scheduler.filter_scheduler:FilterScheduler - fake_scheduler = nova.tests.unit.scheduler.fakes:FakeScheduler console_scripts = nova-api = nova.cmd.api:main nova-api-metadata = nova.cmd.api_metadata:main