Files
neutron-lib/neutron_lib/tests/unit/services/test_base.py
Boden R c2756c3d98 Formalize base service classes
The PluginInterface and WorkerSupportServiceMixin classes
were rehomed to neutron-lib recently [1] and included a private
version of the respective classes. Based on the existing usages
of such [2][3], this patch:
- Renames WorkerSupportServiceMixin as WorkerBase making it
public for consumption [2].
- Collapses _PluginInterface into ServicePluginBase making the
definition more compact and understandable.
- Formalizes the use of ServicePluginBase by updating the
docstring in ExtensionDescriptor to indicate an instance of
ServicePluginBase is used for plugin interfaces. This is kosher
as existing uses today all return extension plugin interfaces that
are subclasses of ServicePluginBase and not PluginInterface.

Also see related neutron consumption patch [4].

[1] https://review.openstack.org/412519/
[2] http://codesearch.openstack.org/?q=WorkerSupportServiceMixin
[3] http://codesearch.openstack.org/?q=PluginInterface
[4] https://review.openstack.org/#/c/441129

Change-Id: I722252b845a4396f1b193459b22e4352c93241e6
2017-03-06 09:02:44 -07:00

93 lines
2.5 KiB
Python

# 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 abc
from neutron_lib.services import base
from neutron_lib.tests import _base as test_base
class _Worker(base.WorkerBase):
pass
class Test_WorkerSupportServiceMixin(test_base.BaseTestCase):
def setUp(self):
super(Test_WorkerSupportServiceMixin, self).setUp()
self.worker = _Worker()
def test_allocate_workers(self):
self.assertEqual([], self.worker.get_workers())
def test_add_worker(self):
workers = [object(), object()]
for w in workers:
self.worker.add_worker(w)
self.assertSequenceEqual(workers, self.worker.get_workers())
def test_add_workers(self):
workers = [object(), object(), object()]
self.worker.add_workers(workers)
self.assertSequenceEqual(workers, self.worker.get_workers())
class TestPluginInterface(test_base.BaseTestCase):
class ServicePluginStub(base.ServicePluginBase):
def get_plugin_type(self):
pass
def get_plugin_description(self):
pass
def test_issubclass_hook(self):
class A(TestPluginInterface.ServicePluginStub):
def f(self):
pass
class B(base.ServicePluginBase):
@abc.abstractmethod
def f(self):
pass
self.assertTrue(issubclass(A, B))
def test_issubclass_hook_class_without_abstract_methods(self):
class A(object):
def f(self):
pass
class B(base.ServicePluginBase):
def f(self):
pass
self.assertFalse(issubclass(A, B))
def test_issubclass_hook_not_all_methods_implemented(self):
class A(TestPluginInterface.ServicePluginStub):
def f(self):
pass
class B(base.ServicePluginBase):
@abc.abstractmethod
def f(self):
pass
@abc.abstractmethod
def g(self):
pass
self.assertFalse(issubclass(A, B))