Fix metaclasses assignment
'metaclass' with 'six' module should be added only using decorator for 'target'-class,
instead of attr assignment else 'target'-class won't see our custom metaclass.
this is fix after merged following commit:
8c1a574de3
Also added basic unittests.
Change-Id: I27cdddf32ec81c72a5f71ce8dca04f643a425b67
Closes-Bug: #1343207
This commit is contained in:
parent
8c1a574de3
commit
85fee205ef
|
@ -127,8 +127,8 @@ class ManagerMeta(type):
|
|||
cls._ticks_to_skip[name] = task._ticks_between_runs
|
||||
|
||||
|
||||
@six.add_metaclass(ManagerMeta)
|
||||
class Manager(base.Base):
|
||||
six.add_metaclass(ManagerMeta)
|
||||
|
||||
def __init__(self, host=None, db_driver=None):
|
||||
if not host:
|
||||
|
|
|
@ -38,8 +38,8 @@ CONF = cfg.CONF
|
|||
CONF.register_opts(OPTS)
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class LinuxInterfaceDriver(object):
|
||||
six.add_metaclass(abc.ABCMeta)
|
||||
|
||||
# from linux IF_NAMESIZE
|
||||
DEV_NAME_LEN = 14
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
# under the License.
|
||||
|
||||
import mock
|
||||
import six
|
||||
|
||||
from manila.network.linux import interface
|
||||
from manila.network.linux import ip_lib
|
||||
|
@ -31,22 +32,22 @@ class BaseChild(interface.LinuxInterfaceDriver):
|
|||
|
||||
|
||||
FakeSubnet = {
|
||||
'cidr': '192.168.1.1/24',
|
||||
}
|
||||
'cidr': '192.168.1.1/24',
|
||||
}
|
||||
|
||||
|
||||
FakeAllocation = {
|
||||
'subnet': FakeSubnet,
|
||||
'ip_address': '192.168.1.2',
|
||||
'ip_version': 4,
|
||||
}
|
||||
'subnet': FakeSubnet,
|
||||
'ip_address': '192.168.1.2',
|
||||
'ip_version': 4,
|
||||
}
|
||||
|
||||
|
||||
FakePort = {
|
||||
'id': 'abcdef01-1234-5678-90ab-ba0987654321',
|
||||
'fixed_ips': [FakeAllocation],
|
||||
'device_id': 'cccccccc-cccc-cccc-cccc-cccccccccccc',
|
||||
}
|
||||
'id': 'abcdef01-1234-5678-90ab-ba0987654321',
|
||||
'fixed_ips': [FakeAllocation],
|
||||
'device_id': 'cccccccc-cccc-cccc-cccc-cccccccccccc',
|
||||
}
|
||||
|
||||
|
||||
class TestBase(test.TestCase):
|
||||
|
@ -60,15 +61,27 @@ class TestBase(test.TestCase):
|
|||
self.ip = self.ip_p.start()
|
||||
self.device_exists_p = mock.patch.object(ip_lib, 'device_exists')
|
||||
self.device_exists = self.device_exists_p.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.ip_dev_p.stop()
|
||||
self.ip_p.stop()
|
||||
self.device_exists_p.stop()
|
||||
super(TestBase, self).tearDown()
|
||||
self.addCleanup(self.ip_dev_p.stop)
|
||||
self.addCleanup(self.ip_p.stop)
|
||||
self.addCleanup(self.device_exists_p.stop)
|
||||
|
||||
|
||||
class TestABCDriver(TestBase):
|
||||
|
||||
def test_verify_abs_class_has_abs_methods(self):
|
||||
|
||||
class ICanNotBeInstancetiated(interface.LinuxInterfaceDriver):
|
||||
pass
|
||||
|
||||
try:
|
||||
fake = ICanNotBeInstancetiated()
|
||||
except TypeError:
|
||||
pass
|
||||
except Exception as e:
|
||||
self.fail("Unexpected exception thrown: '%s'" % six.text_type(e))
|
||||
else:
|
||||
self.fail("ExpectedException 'TypeError' not thrown.")
|
||||
|
||||
def test_get_device_name(self):
|
||||
bc = BaseChild()
|
||||
device_name = bc.get_device_name(FakePort)
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
# Copyright 2014 Mirantis Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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.
|
||||
|
||||
"""Test of Base Manager for Manila."""
|
||||
|
||||
import mock
|
||||
|
||||
from manila import manager
|
||||
from manila.openstack.common import importutils
|
||||
from manila import test
|
||||
|
||||
|
||||
class ManagerTestCase(test.TestCase):
|
||||
|
||||
@mock.patch.object(importutils, 'import_module', mock.Mock())
|
||||
def test_verify_manager_instance(self):
|
||||
host = 'fake_host'
|
||||
db_driver = 'fake_driver'
|
||||
fake_manager = manager.Manager(host, db_driver)
|
||||
self.assertTrue(hasattr(fake_manager, '_periodic_tasks'))
|
||||
self.assertTrue(hasattr(fake_manager, '_ticks_to_skip'))
|
||||
self.assertTrue(hasattr(fake_manager, 'additional_endpoints'))
|
||||
self.assertTrue(hasattr(fake_manager, 'host'))
|
||||
self.assertTrue(hasattr(fake_manager, 'periodic_tasks'))
|
||||
self.assertTrue(hasattr(fake_manager, 'init_host'))
|
||||
self.assertTrue(hasattr(fake_manager, 'service_version'))
|
||||
self.assertTrue(hasattr(fake_manager, 'service_config'))
|
||||
self.assertEqual(fake_manager.host, host)
|
||||
importutils.import_module.assert_called_once_with(db_driver)
|
||||
|
||||
|
||||
class SchedulerDependentManagerTestCase(test.TestCase):
|
||||
|
||||
@mock.patch.object(importutils, 'import_module', mock.Mock())
|
||||
def test_verify_scheduler_dependent_manager_instance(self):
|
||||
host = 'fake_host'
|
||||
db_driver = 'fake_driver'
|
||||
service_name = 'fake_service_name'
|
||||
fake_sched_manager = manager.SchedulerDependentManager(
|
||||
host, db_driver, service_name)
|
||||
self.assertTrue(hasattr(fake_sched_manager, '_periodic_tasks'))
|
||||
self.assertTrue(hasattr(fake_sched_manager, '_ticks_to_skip'))
|
||||
self.assertTrue(hasattr(fake_sched_manager, 'additional_endpoints'))
|
||||
self.assertTrue(hasattr(fake_sched_manager, 'host'))
|
||||
self.assertTrue(hasattr(fake_sched_manager, 'periodic_tasks'))
|
||||
self.assertTrue(hasattr(fake_sched_manager, 'init_host'))
|
||||
self.assertTrue(hasattr(fake_sched_manager, 'service_version'))
|
||||
self.assertTrue(hasattr(fake_sched_manager, 'service_config'))
|
||||
self.assertTrue(hasattr(fake_sched_manager, 'last_capabilities'))
|
||||
self.assertTrue(hasattr(fake_sched_manager, 'service_name'))
|
||||
self.assertTrue(hasattr(fake_sched_manager, 'scheduler_rpcapi'))
|
||||
self.assertTrue(hasattr(fake_sched_manager,
|
||||
'update_service_capabilities'))
|
||||
self.assertTrue(hasattr(fake_sched_manager,
|
||||
'_publish_service_capabilities'))
|
||||
self.assertEqual(fake_sched_manager.host, host)
|
||||
self.assertEqual(fake_sched_manager.service_name, service_name)
|
||||
importutils.import_module.assert_called_once_with(db_driver)
|
Loading…
Reference in New Issue