tests/unit: Initialize core plugin in TestL3GwModeMixin
TestL3GwModeMixin can fail randomly because it doesn't initialize
core_plugin and can be run random core plugin depending on execution
order of tests. It also fails with core plugin uninitialized when it
is run without other tests.
This patch refactors the setup code of core plugin and apply it to the
related tests.
This patch reveled the same bug of test_metaplugin.py which is also
fixed by this patch.
Closes-bug: #1273259
Conflicts:
neutron/tests/base.py
neutron/tests/unit/test_extension_ext_gw_mode.py
Change-Id: I3c1d4d8b3d69262b89c7747daa8267bf2c8e7f6b
(cherry picked from commit 9e247277e2
)
This commit is contained in:
parent
4b373a3e0e
commit
af5f2b938b
|
@ -28,6 +28,7 @@ import stubout
|
|||
import testtools
|
||||
|
||||
from neutron.common import exceptions
|
||||
from neutron import manager
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
@ -37,6 +38,16 @@ LOG_FORMAT = "%(asctime)s %(levelname)8s [%(name)s] %(message)s"
|
|||
|
||||
class BaseTestCase(testtools.TestCase):
|
||||
|
||||
def _cleanup_coreplugin(self):
|
||||
manager.NeutronManager._instance = self._saved_instance
|
||||
|
||||
def setup_coreplugin(self, core_plugin=None):
|
||||
self._saved_instance = manager.NeutronManager._instance
|
||||
self.addCleanup(self._cleanup_coreplugin)
|
||||
manager.NeutronManager._instance = None
|
||||
if core_plugin is not None:
|
||||
cfg.CONF.set_override('core_plugin', core_plugin)
|
||||
|
||||
def setUp(self):
|
||||
super(BaseTestCase, self).setUp()
|
||||
|
||||
|
|
|
@ -102,6 +102,8 @@ class MetaNeutronPluginV2Test(base.BaseTestCase):
|
|||
self.client_inst.delete_network.return_value = True
|
||||
self.client_inst.delete_port.return_value = True
|
||||
self.client_inst.delete_subnet.return_value = True
|
||||
plugin = MetaPluginV2.__module__ + '.' + MetaPluginV2.__name__
|
||||
self.setup_coreplugin(plugin)
|
||||
self.plugin = MetaPluginV2(configfile=None)
|
||||
|
||||
def _fake_network(self, flavor):
|
||||
|
|
|
@ -68,8 +68,6 @@ class NetworkGatewayExtensionTestCase(base.BaseTestCase):
|
|||
plugin = '%s.%s' % (networkgw.__name__,
|
||||
networkgw.NetworkGatewayPluginBase.__name__)
|
||||
self._resource = networkgw.RESOURCE_NAME.replace('-', '_')
|
||||
# Ensure 'stale' patched copies of the plugin are never returned
|
||||
manager.NeutronManager._instance = None
|
||||
|
||||
# Ensure existing ExtensionManager is not used
|
||||
extensions.PluginAwareExtensionManager._instance = None
|
||||
|
@ -79,7 +77,7 @@ class NetworkGatewayExtensionTestCase(base.BaseTestCase):
|
|||
config.parse(args=args)
|
||||
|
||||
# Update the plugin and extensions path
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
self.setup_coreplugin(plugin)
|
||||
self.addCleanup(cfg.CONF.reset)
|
||||
|
||||
_plugin_patcher = mock.patch(plugin, autospec=True)
|
||||
|
|
|
@ -26,7 +26,6 @@ from neutron.api import extensions
|
|||
from neutron.api.v2 import attributes as attr
|
||||
from neutron.common import config
|
||||
from neutron.extensions import loadbalancer
|
||||
from neutron import manager
|
||||
from neutron.openstack.common import uuidutils
|
||||
from neutron.plugins.common import constants
|
||||
from neutron.tests.unit import test_api_v2
|
||||
|
@ -62,8 +61,6 @@ class LoadBalancerExtensionTestCase(testlib_api.WebTestCase):
|
|||
def setUp(self):
|
||||
super(LoadBalancerExtensionTestCase, self).setUp()
|
||||
plugin = 'neutron.extensions.loadbalancer.LoadBalancerPluginBase'
|
||||
# Ensure 'stale' patched copies of the plugin are never returned
|
||||
manager.NeutronManager._instance = None
|
||||
|
||||
# Ensure existing ExtensionManager is not used
|
||||
extensions.PluginAwareExtensionManager._instance = None
|
||||
|
@ -73,7 +70,7 @@ class LoadBalancerExtensionTestCase(testlib_api.WebTestCase):
|
|||
config.parse(args)
|
||||
|
||||
#just stubbing core plugin with LoadBalancer plugin
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
self.setup_coreplugin(plugin)
|
||||
cfg.CONF.set_override('service_plugins', [plugin])
|
||||
|
||||
self._plugin_patcher = mock.patch(plugin, autospec=True)
|
||||
|
|
|
@ -28,7 +28,6 @@ from neutron.api import extensions
|
|||
from neutron.api.v2 import attributes
|
||||
from neutron.common import config
|
||||
from neutron.extensions import vpnaas
|
||||
from neutron import manager
|
||||
from neutron.openstack.common import uuidutils
|
||||
from neutron.plugins.common import constants
|
||||
from neutron import quota
|
||||
|
@ -65,8 +64,6 @@ class VpnaasExtensionTestCase(testlib_api.WebTestCase):
|
|||
def setUp(self):
|
||||
super(VpnaasExtensionTestCase, self).setUp()
|
||||
plugin = 'neutron.extensions.vpnaas.VPNPluginBase'
|
||||
# Ensure 'stale' patched copies of the plugin are never returned
|
||||
manager.NeutronManager._instance = None
|
||||
|
||||
# Ensure existing ExtensionManager is not used
|
||||
extensions.PluginAwareExtensionManager._instance = None
|
||||
|
@ -76,7 +73,7 @@ class VpnaasExtensionTestCase(testlib_api.WebTestCase):
|
|||
config.parse(args)
|
||||
|
||||
#just stubbing core plugin with LoadBalancer plugin
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
self.setup_coreplugin(plugin)
|
||||
cfg.CONF.set_override('service_plugins', [plugin])
|
||||
|
||||
self._plugin_patcher = mock.patch(plugin, autospec=True)
|
||||
|
|
|
@ -97,15 +97,13 @@ class APIv2TestBase(base.BaseTestCase):
|
|||
super(APIv2TestBase, self).setUp()
|
||||
|
||||
plugin = 'neutron.neutron_plugin_base_v2.NeutronPluginBaseV2'
|
||||
# Ensure 'stale' patched copies of the plugin are never returned
|
||||
NeutronManager._instance = None
|
||||
# Ensure existing ExtensionManager is not used
|
||||
PluginAwareExtensionManager._instance = None
|
||||
# Create the default configurations
|
||||
args = ['--config-file', etcdir('neutron.conf.test')]
|
||||
config.parse(args=args)
|
||||
# Update the plugin
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
self.setup_coreplugin(plugin)
|
||||
cfg.CONF.set_override('allow_pagination', True)
|
||||
cfg.CONF.set_override('allow_sorting', True)
|
||||
self._plugin_patcher = mock.patch(plugin, autospec=True)
|
||||
|
@ -1130,7 +1128,6 @@ class SubresourceTest(base.BaseTestCase):
|
|||
super(SubresourceTest, self).setUp()
|
||||
|
||||
plugin = 'neutron.tests.unit.test_api_v2.TestSubresourcePlugin'
|
||||
NeutronManager._instance = None
|
||||
PluginAwareExtensionManager._instance = None
|
||||
|
||||
# Save the global RESOURCE_ATTRIBUTE_MAP
|
||||
|
@ -1140,7 +1137,7 @@ class SubresourceTest(base.BaseTestCase):
|
|||
|
||||
args = ['--config-file', etcdir('neutron.conf.test')]
|
||||
config.parse(args=args)
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
self.setup_coreplugin(plugin)
|
||||
|
||||
self._plugin_patcher = mock.patch(plugin, autospec=True)
|
||||
self.plugin = self._plugin_patcher.start()
|
||||
|
@ -1354,9 +1351,6 @@ class ExtensionTestCase(base.BaseTestCase):
|
|||
super(ExtensionTestCase, self).setUp()
|
||||
plugin = 'neutron.neutron_plugin_base_v2.NeutronPluginBaseV2'
|
||||
|
||||
# Ensure 'stale' patched copies of the plugin are never returned
|
||||
NeutronManager._instance = None
|
||||
|
||||
# Ensure existing ExtensionManager is not used
|
||||
PluginAwareExtensionManager._instance = None
|
||||
|
||||
|
@ -1370,7 +1364,7 @@ class ExtensionTestCase(base.BaseTestCase):
|
|||
config.parse(args=args)
|
||||
|
||||
# Update the plugin and extensions path
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
self.setup_coreplugin(plugin)
|
||||
cfg.CONF.set_override('api_extensions_path', EXTDIR)
|
||||
|
||||
self._plugin_patcher = mock.patch(plugin, autospec=True)
|
||||
|
|
|
@ -82,8 +82,6 @@ class NeutronDbPluginV2TestCase(testlib_api.WebTestCase):
|
|||
ext_mgr=None):
|
||||
super(NeutronDbPluginV2TestCase, self).setUp()
|
||||
|
||||
# Make sure at each test a new instance of the plugin is returned
|
||||
NeutronManager._instance = None
|
||||
# Make sure at each test according extensions for the plugin is loaded
|
||||
PluginAwareExtensionManager._instance = None
|
||||
# Save the attributes map in case the plugin will alter it
|
||||
|
@ -108,7 +106,7 @@ class NeutronDbPluginV2TestCase(testlib_api.WebTestCase):
|
|||
args.extend(['--config-file', config_file])
|
||||
config.parse(args=args)
|
||||
# Update the plugin
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
self.setup_coreplugin(plugin)
|
||||
cfg.CONF.set_override(
|
||||
'service_plugins',
|
||||
[test_config.get(key, default)
|
||||
|
|
|
@ -106,6 +106,8 @@ class TestL3GwModeMixin(base.BaseTestCase):
|
|||
super(TestL3GwModeMixin, self).setUp()
|
||||
stubout_fixture = self.useFixture(StuboutFixture())
|
||||
self.stubs = stubout_fixture.stubs
|
||||
plugin = __name__ + '.' + TestDbIntPlugin.__name__
|
||||
self.setup_coreplugin(plugin)
|
||||
self.target_object = TestDbIntPlugin()
|
||||
# Patch the context
|
||||
ctx_patcher = mock.patch('neutron.context', autospec=True)
|
||||
|
|
|
@ -80,9 +80,7 @@ class ExtensionExtendedAttributeTestCase(base.BaseTestCase):
|
|||
args = ['--config-file', test_api_v2.etcdir('neutron.conf.test')]
|
||||
config.parse(args=args)
|
||||
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
|
||||
manager.NeutronManager._instance = None
|
||||
self.setup_coreplugin(plugin)
|
||||
|
||||
ext_mgr = extensions.PluginAwareExtensionManager(
|
||||
extensions_path,
|
||||
|
|
|
@ -28,7 +28,6 @@ from neutron.api import extensions
|
|||
from neutron.api.v2 import attributes
|
||||
from neutron.common import config
|
||||
from neutron.extensions import firewall
|
||||
from neutron import manager
|
||||
from neutron.openstack.common import uuidutils
|
||||
from neutron.plugins.common import constants
|
||||
from neutron.tests import base
|
||||
|
@ -65,8 +64,6 @@ class FirewallExtensionTestCase(testlib_api.WebTestCase):
|
|||
def setUp(self):
|
||||
super(FirewallExtensionTestCase, self).setUp()
|
||||
plugin = 'neutron.extensions.firewall.FirewallPluginBase'
|
||||
# Ensure 'stale' patched copies of the plugin are never returned
|
||||
manager.NeutronManager._instance = None
|
||||
|
||||
# Ensure existing ExtensionManager is not used
|
||||
extensions.PluginAwareExtensionManager._instance = None
|
||||
|
@ -76,7 +73,7 @@ class FirewallExtensionTestCase(testlib_api.WebTestCase):
|
|||
config.parse(args)
|
||||
|
||||
# Stubbing core plugin with Firewall plugin
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
self.setup_coreplugin(plugin)
|
||||
cfg.CONF.set_override('service_plugins', [plugin])
|
||||
|
||||
self._plugin_patcher = mock.patch(plugin, autospec=True)
|
||||
|
|
|
@ -58,8 +58,6 @@ class ProvidernetExtensionTestCase(testlib_api.WebTestCase):
|
|||
super(ProvidernetExtensionTestCase, self).setUp()
|
||||
|
||||
plugin = 'neutron.neutron_plugin_base_v2.NeutronPluginBaseV2'
|
||||
# Ensure 'stale' patched copies of the plugin are never returned
|
||||
NeutronManager._instance = None
|
||||
|
||||
# Ensure existing ExtensionManager is not used
|
||||
extensions.PluginAwareExtensionManager._instance = None
|
||||
|
@ -70,7 +68,7 @@ class ProvidernetExtensionTestCase(testlib_api.WebTestCase):
|
|||
self.saved_attr_map[resource] = attrs.copy()
|
||||
|
||||
# Update the plugin and extensions path
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
self.setup_coreplugin(plugin)
|
||||
cfg.CONF.set_override('allow_pagination', True)
|
||||
cfg.CONF.set_override('allow_sorting', True)
|
||||
self._plugin_patcher = mock.patch(plugin, autospec=True)
|
||||
|
|
|
@ -59,7 +59,7 @@ class NeutronManagerTestCase(base.BaseTestCase):
|
|||
args = ['--config-file', etcdir('neutron.conf.test')]
|
||||
# If test_config specifies some config-file, use it, as well
|
||||
config.parse(args=args)
|
||||
NeutronManager._instance = None
|
||||
self.setup_coreplugin()
|
||||
self.addCleanup(cfg.CONF.reset)
|
||||
self.useFixture(
|
||||
fixtures.MonkeyPatch('neutron.manager.NeutronManager._instance'))
|
||||
|
|
|
@ -29,7 +29,6 @@ from neutron.common import exceptions
|
|||
from neutron import context
|
||||
from neutron.db import api as db
|
||||
from neutron.db import quota_db
|
||||
from neutron import manager
|
||||
from neutron.plugins.linuxbridge.db import l2network_db_v2
|
||||
from neutron import quota
|
||||
from neutron.tests import base
|
||||
|
@ -47,9 +46,6 @@ class QuotaExtensionTestCase(testlib_api.WebTestCase):
|
|||
|
||||
def setUp(self):
|
||||
super(QuotaExtensionTestCase, self).setUp()
|
||||
# Ensure 'stale' patched copies of the plugin are never returned
|
||||
manager.NeutronManager._instance = None
|
||||
|
||||
# Ensure existing ExtensionManager is not used
|
||||
extensions.PluginAwareExtensionManager._instance = None
|
||||
|
||||
|
@ -63,7 +59,7 @@ class QuotaExtensionTestCase(testlib_api.WebTestCase):
|
|||
config.parse(args=args)
|
||||
|
||||
# Update the plugin and extensions path
|
||||
cfg.CONF.set_override('core_plugin', TARGET_PLUGIN)
|
||||
self.setup_coreplugin(TARGET_PLUGIN)
|
||||
cfg.CONF.set_override(
|
||||
'quota_items',
|
||||
['network', 'subnet', 'port', 'extra1'],
|
||||
|
|
|
@ -167,14 +167,11 @@ class RouterServiceInsertionTestCase(base.BaseTestCase):
|
|||
config.parse(args=args)
|
||||
|
||||
#just stubbing core plugin with LoadBalancer plugin
|
||||
cfg.CONF.set_override('core_plugin', plugin)
|
||||
self.setup_coreplugin(plugin)
|
||||
cfg.CONF.set_override('service_plugins', [])
|
||||
cfg.CONF.set_override('quota_router', -1, group='QUOTAS')
|
||||
self.addCleanup(cfg.CONF.reset)
|
||||
|
||||
# Ensure 'stale' patched copies of the plugin are never returned
|
||||
neutron.manager.NeutronManager._instance = None
|
||||
|
||||
# Ensure existing ExtensionManager is not used
|
||||
|
||||
ext_mgr = extensions.PluginAwareExtensionManager(
|
||||
|
|
|
@ -30,7 +30,6 @@ from neutron import context
|
|||
from neutron.db import api as db_api
|
||||
from neutron.db import servicetype_db as st_db
|
||||
from neutron.extensions import servicetype
|
||||
from neutron import manager
|
||||
from neutron.plugins.common import constants
|
||||
from neutron.services import provider_configuration as provconf
|
||||
from neutron.tests import base
|
||||
|
@ -175,14 +174,12 @@ class ServiceTypeExtensionTestCaseBase(testlib_api.WebTestCase):
|
|||
def setUp(self):
|
||||
# This is needed because otherwise a failure will occur due to
|
||||
# nonexisting core_plugin
|
||||
cfg.CONF.set_override('core_plugin', test_db_plugin.DB_PLUGIN_KLASS)
|
||||
self.setup_coreplugin(test_db_plugin.DB_PLUGIN_KLASS)
|
||||
|
||||
cfg.CONF.set_override('service_plugins',
|
||||
["%s.%s" % (dp.__name__,
|
||||
dp.DummyServicePlugin.__name__)])
|
||||
self.addCleanup(cfg.CONF.reset)
|
||||
# Make sure at each test a new instance of the plugin is returned
|
||||
manager.NeutronManager._instance = None
|
||||
# Ensure existing ExtensionManager is not used
|
||||
extensions.PluginAwareExtensionManager._instance = None
|
||||
ext_mgr = TestServiceTypeExtensionManager()
|
||||
|
|
Loading…
Reference in New Issue