Merge "Refactor plugin setup helpers out of test.base"
This commit is contained in:
commit
0453144122
@ -16,12 +16,10 @@
|
|||||||
"""Base Test Case for all Unit Tests"""
|
"""Base Test Case for all Unit Tests"""
|
||||||
|
|
||||||
import contextlib
|
import contextlib
|
||||||
import gc
|
|
||||||
import logging as std_logging
|
import logging as std_logging
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
import sys
|
import sys
|
||||||
import weakref
|
|
||||||
|
|
||||||
import eventlet.timeout
|
import eventlet.timeout
|
||||||
import fixtures
|
import fixtures
|
||||||
@ -32,8 +30,6 @@ import testtools
|
|||||||
|
|
||||||
from neutron.common import config
|
from neutron.common import config
|
||||||
from neutron.common import rpc as n_rpc
|
from neutron.common import rpc as n_rpc
|
||||||
from neutron.db import agentschedulers_db
|
|
||||||
from neutron import manager
|
|
||||||
from neutron.tests import fake_notifier
|
from neutron.tests import fake_notifier
|
||||||
from neutron.tests import post_mortem_debug
|
from neutron.tests import post_mortem_debug
|
||||||
|
|
||||||
@ -61,42 +57,6 @@ def fake_consume_in_threads(self):
|
|||||||
|
|
||||||
class BaseTestCase(testtools.TestCase):
|
class BaseTestCase(testtools.TestCase):
|
||||||
|
|
||||||
def cleanup_core_plugin(self):
|
|
||||||
"""Ensure that the core plugin is deallocated."""
|
|
||||||
nm = manager.NeutronManager
|
|
||||||
if not nm.has_instance():
|
|
||||||
return
|
|
||||||
|
|
||||||
#TODO(marun) Fix plugins that do not properly initialize notifiers
|
|
||||||
agentschedulers_db.AgentSchedulerDbMixin.agent_notifiers = {}
|
|
||||||
|
|
||||||
# Perform a check for deallocation only if explicitly
|
|
||||||
# configured to do so since calling gc.collect() after every
|
|
||||||
# test increases test suite execution time by ~50%.
|
|
||||||
check_plugin_deallocation = (
|
|
||||||
os.environ.get('OS_CHECK_PLUGIN_DEALLOCATION') in TRUE_STRING)
|
|
||||||
if check_plugin_deallocation:
|
|
||||||
plugin = weakref.ref(nm._instance.plugin)
|
|
||||||
|
|
||||||
nm.clear_instance()
|
|
||||||
|
|
||||||
if check_plugin_deallocation:
|
|
||||||
gc.collect()
|
|
||||||
|
|
||||||
#TODO(marun) Ensure that mocks are deallocated?
|
|
||||||
if plugin() and not isinstance(plugin(), mock.Base):
|
|
||||||
self.fail('The plugin for this test was not deallocated.')
|
|
||||||
|
|
||||||
def setup_coreplugin(self, core_plugin=None):
|
|
||||||
if core_plugin is not None:
|
|
||||||
cfg.CONF.set_override('core_plugin', core_plugin)
|
|
||||||
|
|
||||||
def setup_notification_driver(self, notification_driver=None):
|
|
||||||
self.addCleanup(fake_notifier.reset)
|
|
||||||
if notification_driver is None:
|
|
||||||
notification_driver = [fake_notifier.__name__]
|
|
||||||
cfg.CONF.set_override("notification_driver", notification_driver)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def config_parse(conf=None, args=None):
|
def config_parse(conf=None, args=None):
|
||||||
"""Create the default configurations."""
|
"""Create the default configurations."""
|
||||||
@ -110,9 +70,6 @@ class BaseTestCase(testtools.TestCase):
|
|||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(BaseTestCase, self).setUp()
|
super(BaseTestCase, self).setUp()
|
||||||
# Ensure plugin cleanup is triggered last so that
|
|
||||||
# test-specific cleanup has a chance to release references.
|
|
||||||
self.addCleanup(self.cleanup_core_plugin)
|
|
||||||
|
|
||||||
# Configure this first to ensure pm debugging support for setUp()
|
# Configure this first to ensure pm debugging support for setUp()
|
||||||
if os.environ.get('OS_POST_MORTEM_DEBUG') in TRUE_STRING:
|
if os.environ.get('OS_POST_MORTEM_DEBUG') in TRUE_STRING:
|
||||||
|
@ -26,6 +26,7 @@ from neutron.extensions import flavor as ext_flavor
|
|||||||
from neutron.openstack.common import uuidutils
|
from neutron.openstack.common import uuidutils
|
||||||
from neutron.plugins.metaplugin import meta_neutron_plugin
|
from neutron.plugins.metaplugin import meta_neutron_plugin
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
CONF_FILE = ""
|
CONF_FILE = ""
|
||||||
META_PATH = "neutron.plugins.metaplugin"
|
META_PATH = "neutron.plugins.metaplugin"
|
||||||
@ -67,7 +68,8 @@ def unregister_meta_hooks():
|
|||||||
models_v2.Port, 'metaplugin_port', None, None, None)
|
models_v2.Port, 'metaplugin_port', None, None, None)
|
||||||
|
|
||||||
|
|
||||||
class MetaNeutronPluginV2Test(testlib_api.SqlTestCase):
|
class MetaNeutronPluginV2Test(testlib_api.SqlTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
"""Class conisting of MetaNeutronPluginV2 unit tests."""
|
"""Class conisting of MetaNeutronPluginV2 unit tests."""
|
||||||
|
|
||||||
has_l3 = True
|
has_l3 = True
|
||||||
|
@ -22,6 +22,7 @@ from neutron.openstack.common import uuidutils
|
|||||||
from neutron.services.metering.agents import metering_agent
|
from neutron.services.metering.agents import metering_agent
|
||||||
from neutron.tests import base
|
from neutron.tests import base
|
||||||
from neutron.tests import fake_notifier
|
from neutron.tests import fake_notifier
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
|
|
||||||
_uuid = uuidutils.generate_uuid
|
_uuid = uuidutils.generate_uuid
|
||||||
@ -38,7 +39,8 @@ ROUTERS = [{'status': 'ACTIVE',
|
|||||||
'id': _uuid()}]
|
'id': _uuid()}]
|
||||||
|
|
||||||
|
|
||||||
class TestMeteringOperations(base.BaseTestCase):
|
class TestMeteringOperations(base.BaseTestCase,
|
||||||
|
testlib_plugin.NotificationSetupHelper):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestMeteringOperations, self).setUp()
|
super(TestMeteringOperations, self).setUp()
|
||||||
|
@ -39,6 +39,7 @@ from neutron import quota
|
|||||||
from neutron.tests import base
|
from neutron.tests import base
|
||||||
from neutron.tests import fake_notifier
|
from neutron.tests import fake_notifier
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
|
|
||||||
ROOTDIR = os.path.dirname(os.path.dirname(__file__))
|
ROOTDIR = os.path.dirname(os.path.dirname(__file__))
|
||||||
@ -87,7 +88,7 @@ class ResourceIndexTestCase(base.BaseTestCase):
|
|||||||
self.assertEqual(link['rel'], 'self')
|
self.assertEqual(link['rel'], 'self')
|
||||||
|
|
||||||
|
|
||||||
class APIv2TestBase(base.BaseTestCase):
|
class APIv2TestBase(base.BaseTestCase, testlib_plugin.PluginSetupHelper):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(APIv2TestBase, self).setUp()
|
super(APIv2TestBase, self).setUp()
|
||||||
|
|
||||||
@ -1118,7 +1119,7 @@ class JSONV2TestCase(APIv2TestBase, testlib_api.WebTestCase):
|
|||||||
self.assertEqual(res.status_int, 400)
|
self.assertEqual(res.status_int, 400)
|
||||||
|
|
||||||
|
|
||||||
class SubresourceTest(base.BaseTestCase):
|
class SubresourceTest(base.BaseTestCase, testlib_plugin.PluginSetupHelper):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(SubresourceTest, self).setUp()
|
super(SubresourceTest, self).setUp()
|
||||||
|
|
||||||
@ -1385,7 +1386,7 @@ class QuotaTest(APIv2TestBase):
|
|||||||
self.assertEqual(res.status_int, exc.HTTPCreated.code)
|
self.assertEqual(res.status_int, exc.HTTPCreated.code)
|
||||||
|
|
||||||
|
|
||||||
class ExtensionTestCase(base.BaseTestCase):
|
class ExtensionTestCase(base.BaseTestCase, testlib_plugin.PluginSetupHelper):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(ExtensionTestCase, self).setUp()
|
super(ExtensionTestCase, self).setUp()
|
||||||
plugin = 'neutron.neutron_plugin_base_v2.NeutronPluginBaseV2'
|
plugin = 'neutron.neutron_plugin_base_v2.NeutronPluginBaseV2'
|
||||||
|
@ -31,9 +31,11 @@ from neutron import quota
|
|||||||
from neutron.tests.unit import test_api_v2
|
from neutron.tests.unit import test_api_v2
|
||||||
from neutron.tests.unit import test_extensions
|
from neutron.tests.unit import test_extensions
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
|
|
||||||
class ExtensionTestCase(testlib_api.WebTestCase):
|
class ExtensionTestCase(testlib_api.WebTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
def _resotre_attr_map(self):
|
def _resotre_attr_map(self):
|
||||||
attributes.RESOURCE_ATTRIBUTE_MAP = self._saved_attr_map
|
attributes.RESOURCE_ATTRIBUTE_MAP = self._saved_attr_map
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ from neutron.openstack.common import importutils
|
|||||||
from neutron.tests import base
|
from neutron.tests import base
|
||||||
from neutron.tests.unit import test_extensions
|
from neutron.tests.unit import test_extensions
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
DB_PLUGIN_KLASS = 'neutron.db.db_base_plugin_v2.NeutronDbPluginV2'
|
DB_PLUGIN_KLASS = 'neutron.db.db_base_plugin_v2.NeutronDbPluginV2'
|
||||||
|
|
||||||
@ -61,7 +62,8 @@ def _fake_get_sorting_helper(self, request):
|
|||||||
return api_common.SortingEmulatedHelper(request, self._attr_info)
|
return api_common.SortingEmulatedHelper(request, self._attr_info)
|
||||||
|
|
||||||
|
|
||||||
class NeutronDbPluginV2TestCase(testlib_api.WebTestCase):
|
class NeutronDbPluginV2TestCase(testlib_api.WebTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
fmt = 'json'
|
fmt = 'json'
|
||||||
resource_prefix_map = {}
|
resource_prefix_map = {}
|
||||||
|
|
||||||
|
@ -20,9 +20,11 @@ from neutron import context
|
|||||||
from neutron import manager
|
from neutron import manager
|
||||||
from neutron.tests.unit import test_db_plugin
|
from neutron.tests.unit import test_db_plugin
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
|
|
||||||
class TestNetworks(testlib_api.SqlTestCase):
|
class TestNetworks(testlib_api.SqlTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestNetworks, self).setUp()
|
super(TestNetworks, self).setUp()
|
||||||
self._tenant_id = 'test-tenant'
|
self._tenant_id = 'test-tenant'
|
||||||
|
@ -30,6 +30,7 @@ from neutron.openstack.common import uuidutils
|
|||||||
from neutron.tests.unit import test_db_plugin
|
from neutron.tests.unit import test_db_plugin
|
||||||
from neutron.tests.unit import test_l3_plugin
|
from neutron.tests.unit import test_l3_plugin
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
_uuid = uuidutils.generate_uuid
|
_uuid = uuidutils.generate_uuid
|
||||||
FAKE_GW_PORT_ID = _uuid()
|
FAKE_GW_PORT_ID = _uuid()
|
||||||
@ -74,7 +75,8 @@ class TestDbSepPlugin(test_l3_plugin.TestL3NatServicePlugin,
|
|||||||
supported_extension_aliases = ["router", "ext-gw-mode"]
|
supported_extension_aliases = ["router", "ext-gw-mode"]
|
||||||
|
|
||||||
|
|
||||||
class TestL3GwModeMixin(testlib_api.SqlTestCase):
|
class TestL3GwModeMixin(testlib_api.SqlTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestL3GwModeMixin, self).setUp()
|
super(TestL3GwModeMixin, self).setUp()
|
||||||
|
@ -32,6 +32,7 @@ from neutron.tests import base
|
|||||||
from neutron.tests.unit.extensions import extendedattribute as extattr
|
from neutron.tests.unit.extensions import extendedattribute as extattr
|
||||||
from neutron.tests.unit import test_api_v2
|
from neutron.tests.unit import test_api_v2
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
from neutron import wsgi
|
from neutron import wsgi
|
||||||
|
|
||||||
_uuid = test_api_v2._uuid
|
_uuid = test_api_v2._uuid
|
||||||
@ -66,7 +67,8 @@ class ExtensionExtendedAttributeTestPlugin(
|
|||||||
return self.objh[id]
|
return self.objh[id]
|
||||||
|
|
||||||
|
|
||||||
class ExtensionExtendedAttributeTestCase(base.BaseTestCase):
|
class ExtensionExtendedAttributeTestCase(base.BaseTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(ExtensionExtendedAttributeTestCase, self).setUp()
|
super(ExtensionExtendedAttributeTestCase, self).setUp()
|
||||||
plugin = (
|
plugin = (
|
||||||
|
@ -32,6 +32,7 @@ from neutron import quota
|
|||||||
from neutron.tests.unit import test_api_v2
|
from neutron.tests.unit import test_api_v2
|
||||||
from neutron.tests.unit import test_extensions
|
from neutron.tests.unit import test_extensions
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
|
|
||||||
class ProviderExtensionManager(object):
|
class ProviderExtensionManager(object):
|
||||||
@ -49,7 +50,8 @@ class ProviderExtensionManager(object):
|
|||||||
return pnet.get_extended_resources(version)
|
return pnet.get_extended_resources(version)
|
||||||
|
|
||||||
|
|
||||||
class ProvidernetExtensionTestCase(testlib_api.WebTestCase):
|
class ProvidernetExtensionTestCase(testlib_api.WebTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
fmt = 'json'
|
fmt = 'json'
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -48,7 +48,7 @@ from neutron.tests.unit import test_agent_ext_plugin
|
|||||||
from neutron.tests.unit import test_api_v2
|
from neutron.tests.unit import test_api_v2
|
||||||
from neutron.tests.unit import test_api_v2_extension
|
from neutron.tests.unit import test_api_v2_extension
|
||||||
from neutron.tests.unit import test_db_plugin
|
from neutron.tests.unit import test_db_plugin
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -1920,7 +1920,8 @@ class L3AgentDbTestCaseBase(L3NatTestCaseMixin):
|
|||||||
self._test_notify_op_agent(self._test_floatingips_op_agent)
|
self._test_notify_op_agent(self._test_floatingips_op_agent)
|
||||||
|
|
||||||
|
|
||||||
class L3BaseForIntTests(test_db_plugin.NeutronDbPluginV2TestCase):
|
class L3BaseForIntTests(test_db_plugin.NeutronDbPluginV2TestCase,
|
||||||
|
testlib_plugin.NotificationSetupHelper):
|
||||||
|
|
||||||
mock_rescheduling = True
|
mock_rescheduling = True
|
||||||
|
|
||||||
@ -1941,7 +1942,8 @@ class L3BaseForIntTests(test_db_plugin.NeutronDbPluginV2TestCase):
|
|||||||
self.setup_notification_driver()
|
self.setup_notification_driver()
|
||||||
|
|
||||||
|
|
||||||
class L3BaseForSepTests(test_db_plugin.NeutronDbPluginV2TestCase):
|
class L3BaseForSepTests(test_db_plugin.NeutronDbPluginV2TestCase,
|
||||||
|
testlib_plugin.NotificationSetupHelper):
|
||||||
|
|
||||||
def setUp(self, plugin=None, ext_mgr=None):
|
def setUp(self, plugin=None, ext_mgr=None):
|
||||||
# the plugin without L3 support
|
# the plugin without L3 support
|
||||||
|
@ -38,6 +38,7 @@ from neutron.scheduler import l3_agent_scheduler
|
|||||||
from neutron.tests.unit import test_db_plugin
|
from neutron.tests.unit import test_db_plugin
|
||||||
from neutron.tests.unit import test_l3_plugin
|
from neutron.tests.unit import test_l3_plugin
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
HOST = 'my_l3_host'
|
HOST = 'my_l3_host'
|
||||||
FIRST_L3_AGENT = {
|
FIRST_L3_AGENT = {
|
||||||
@ -351,7 +352,8 @@ class L3DvrScheduler(l3_db.L3_NAT_db_mixin,
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class L3DvrSchedulerTestCase(testlib_api.SqlTestCase):
|
class L3DvrSchedulerTestCase(testlib_api.SqlTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
plugin = 'neutron.plugins.ml2.plugin.Ml2Plugin'
|
plugin = 'neutron.plugins.ml2.plugin.Ml2Plugin'
|
||||||
|
@ -24,6 +24,7 @@ from neutron.openstack.common import log as logging
|
|||||||
from neutron.plugins.common import constants
|
from neutron.plugins.common import constants
|
||||||
from neutron.tests import base
|
from neutron.tests import base
|
||||||
from neutron.tests.unit import dummy_plugin
|
from neutron.tests.unit import dummy_plugin
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@ -39,7 +40,8 @@ class CorePluginWithAgentNotifiers(object):
|
|||||||
'dhcp': 'dhcp_agent_notifier'}
|
'dhcp': 'dhcp_agent_notifier'}
|
||||||
|
|
||||||
|
|
||||||
class NeutronManagerTestCase(base.BaseTestCase):
|
class NeutronManagerTestCase(base.BaseTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(NeutronManagerTestCase, self).setUp()
|
super(NeutronManagerTestCase, self).setUp()
|
||||||
|
@ -30,6 +30,7 @@ from neutron import quota
|
|||||||
from neutron.tests import base
|
from neutron.tests import base
|
||||||
from neutron.tests.unit import test_api_v2
|
from neutron.tests.unit import test_api_v2
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
TARGET_PLUGIN = ('neutron.plugins.linuxbridge.lb_neutron_plugin'
|
TARGET_PLUGIN = ('neutron.plugins.linuxbridge.lb_neutron_plugin'
|
||||||
'.LinuxBridgePluginV2')
|
'.LinuxBridgePluginV2')
|
||||||
@ -37,7 +38,8 @@ TARGET_PLUGIN = ('neutron.plugins.linuxbridge.lb_neutron_plugin'
|
|||||||
_get_path = test_api_v2._get_path
|
_get_path = test_api_v2._get_path
|
||||||
|
|
||||||
|
|
||||||
class QuotaExtensionTestCase(testlib_api.WebTestCase):
|
class QuotaExtensionTestCase(testlib_api.WebTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(QuotaExtensionTestCase, self).setUp()
|
super(QuotaExtensionTestCase, self).setUp()
|
||||||
|
@ -32,6 +32,7 @@ from neutron.extensions import routerservicetype as rst
|
|||||||
from neutron.plugins.common import constants
|
from neutron.plugins.common import constants
|
||||||
from neutron.tests.unit import test_api_v2
|
from neutron.tests.unit import test_api_v2
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
from neutron import wsgi
|
from neutron import wsgi
|
||||||
|
|
||||||
_uuid = test_api_v2._uuid
|
_uuid = test_api_v2._uuid
|
||||||
@ -150,7 +151,8 @@ class RouterServiceInsertionTestPlugin(
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class RouterServiceInsertionTestCase(testlib_api.SqlTestCase):
|
class RouterServiceInsertionTestCase(testlib_api.SqlTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(RouterServiceInsertionTestCase, self).setUp()
|
super(RouterServiceInsertionTestCase, self).setUp()
|
||||||
plugin = (
|
plugin = (
|
||||||
|
@ -33,6 +33,7 @@ from neutron.tests.unit import test_api_v2
|
|||||||
from neutron.tests.unit import test_db_plugin
|
from neutron.tests.unit import test_db_plugin
|
||||||
from neutron.tests.unit import test_extensions
|
from neutron.tests.unit import test_extensions
|
||||||
from neutron.tests.unit import testlib_api
|
from neutron.tests.unit import testlib_api
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_SERVICE_DEFS = [{'service_class': constants.DUMMY,
|
DEFAULT_SERVICE_DEFS = [{'service_class': constants.DUMMY,
|
||||||
@ -162,7 +163,8 @@ class TestServiceTypeExtensionManager(object):
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
class ServiceTypeExtensionTestCaseBase(testlib_api.WebTestCase):
|
class ServiceTypeExtensionTestCaseBase(testlib_api.WebTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
fmt = 'json'
|
fmt = 'json'
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
73
neutron/tests/unit/testlib_plugin.py
Normal file
73
neutron/tests/unit/testlib_plugin.py
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
# Copyright 2014 OpenStack Foundation.
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
import gc
|
||||||
|
import os
|
||||||
|
import weakref
|
||||||
|
|
||||||
|
import mock
|
||||||
|
from oslo.config import cfg
|
||||||
|
|
||||||
|
from neutron.db import agentschedulers_db
|
||||||
|
from neutron import manager
|
||||||
|
from neutron.tests import base
|
||||||
|
from neutron.tests import fake_notifier
|
||||||
|
|
||||||
|
|
||||||
|
class PluginSetupHelper(object):
|
||||||
|
"""Mixin for use with testtools.TestCase."""
|
||||||
|
|
||||||
|
def cleanup_core_plugin(self):
|
||||||
|
"""Ensure that the core plugin is deallocated."""
|
||||||
|
nm = manager.NeutronManager
|
||||||
|
if not nm.has_instance():
|
||||||
|
return
|
||||||
|
|
||||||
|
# TODO(marun) Fix plugins that do not properly initialize notifiers
|
||||||
|
agentschedulers_db.AgentSchedulerDbMixin.agent_notifiers = {}
|
||||||
|
|
||||||
|
# Perform a check for deallocation only if explicitly
|
||||||
|
# configured to do so since calling gc.collect() after every
|
||||||
|
# test increases test suite execution time by ~50%.
|
||||||
|
check_plugin_deallocation = (
|
||||||
|
os.environ.get('OS_CHECK_PLUGIN_DEALLOCATION') in base.TRUE_STRING)
|
||||||
|
if check_plugin_deallocation:
|
||||||
|
plugin = weakref.ref(nm._instance.plugin)
|
||||||
|
|
||||||
|
nm.clear_instance()
|
||||||
|
|
||||||
|
if check_plugin_deallocation:
|
||||||
|
gc.collect()
|
||||||
|
|
||||||
|
# TODO(marun) Ensure that mocks are deallocated?
|
||||||
|
if plugin() and not isinstance(plugin(), mock.Base):
|
||||||
|
self.fail('The plugin for this test was not deallocated.')
|
||||||
|
|
||||||
|
def setup_coreplugin(self, core_plugin=None):
|
||||||
|
# Plugin cleanup should be triggered last so that
|
||||||
|
# test-specific cleanup has a chance to release references.
|
||||||
|
self.addCleanup(self.cleanup_core_plugin)
|
||||||
|
if core_plugin is not None:
|
||||||
|
cfg.CONF.set_override('core_plugin', core_plugin)
|
||||||
|
|
||||||
|
|
||||||
|
class NotificationSetupHelper(object):
|
||||||
|
"""Mixin for use with testtools.TestCase."""
|
||||||
|
|
||||||
|
def setup_notification_driver(self, notification_driver=None):
|
||||||
|
self.addCleanup(fake_notifier.reset)
|
||||||
|
if notification_driver is None:
|
||||||
|
notification_driver = [fake_notifier.__name__]
|
||||||
|
cfg.CONF.set_override("notification_driver", notification_driver)
|
@ -36,6 +36,7 @@ from neutron.tests import base
|
|||||||
from neutron.tests.unit import test_api_v2
|
from neutron.tests.unit import test_api_v2
|
||||||
from neutron.tests.unit import test_db_plugin
|
from neutron.tests.unit import test_db_plugin
|
||||||
from neutron.tests.unit import test_extensions
|
from neutron.tests.unit import test_extensions
|
||||||
|
from neutron.tests.unit import testlib_plugin
|
||||||
from neutron.tests.unit import vmware
|
from neutron.tests.unit import vmware
|
||||||
from neutron.tests.unit.vmware import test_nsx_plugin
|
from neutron.tests.unit.vmware import test_nsx_plugin
|
||||||
|
|
||||||
@ -61,7 +62,8 @@ class TestExtensionManager(object):
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
class NetworkGatewayExtensionTestCase(base.BaseTestCase):
|
class NetworkGatewayExtensionTestCase(base.BaseTestCase,
|
||||||
|
testlib_plugin.PluginSetupHelper):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(NetworkGatewayExtensionTestCase, self).setUp()
|
super(NetworkGatewayExtensionTestCase, self).setUp()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user