diff --git a/neutron/api/extensions.py b/neutron/api/extensions.py index 4b36cae6566..2154486d589 100644 --- a/neutron/api/extensions.py +++ b/neutron/api/extensions.py @@ -14,7 +14,7 @@ # under the License. import collections -import imp +from importlib import util as imp_util import os from keystoneauth1 import loading as ks_loading @@ -451,7 +451,9 @@ class ExtensionManager(object): mod_name, file_ext = os.path.splitext(os.path.split(f)[-1]) ext_path = os.path.join(path, f) if file_ext.lower() == '.py' and not mod_name.startswith('_'): - mod = imp.load_source(mod_name, ext_path) + spec = imp_util.spec_from_file_location(mod_name, ext_path) + mod = imp_util.module_from_spec(spec) + spec.loader.exec_module(mod) ext_name = mod_name.capitalize() new_ext_class = getattr(mod, ext_name, None) if not new_ext_class: diff --git a/neutron/tests/unit/api/test_extensions.py b/neutron/tests/unit/api/test_extensions.py index f542028349c..7e15bc4077c 100644 --- a/neutron/tests/unit/api/test_extensions.py +++ b/neutron/tests/unit/api/test_extensions.py @@ -102,8 +102,8 @@ class FakePluginWithExtension(service_base.ServicePluginBase): class ExtensionPathTest(base.BaseTestCase): def setUp(self): - self.base_path = extensions.get_extensions_path() super(ExtensionPathTest, self).setUp() + self.base_path = extensions.get_extensions_path() def test_get_extensions_path_with_plugins(self): cfg.CONF.set_override('api_extensions_path', diff --git a/neutron/tests/unit/db/test_ovn_revision_numbers_db.py b/neutron/tests/unit/db/test_ovn_revision_numbers_db.py index b576ed1adfb..62dfc9caa1b 100644 --- a/neutron/tests/unit/db/test_ovn_revision_numbers_db.py +++ b/neutron/tests/unit/db/test_ovn_revision_numbers_db.py @@ -134,6 +134,21 @@ class TestMaintenancePlugin(test_securitygroup.SecurityGroupTestPlugin, sgag_def.ALIAS] +# Needed to extend resources for revision number tests, this is the +# least invasive way +class TestExtensionManager(extensions.PluginAwareExtensionManager): + + def get_resources(self): + resources = super(TestExtensionManager, self).get_resources() + sg_ext_mgr = test_securitygroup.SecurityGroupTestExtensionManager + sg_resources = sg_ext_mgr.get_resources(self) + sg_resources_collection_names = [ + res.collection for res in sg_resources] + resources = [r for r in resources + if r.collection not in sg_resources_collection_names] + return resources + sg_resources + + class TestRevisionNumberMaintenance(test_securitygroup.SecurityGroupsTestCase, test_l3.L3NatTestCaseMixin): @@ -141,13 +156,13 @@ class TestRevisionNumberMaintenance(test_securitygroup.SecurityGroupsTestCase, service_plugins = { 'router': 'neutron.tests.unit.extensions.test_l3.TestL3NatServicePlugin'} + super(TestRevisionNumberMaintenance, self).setUp( + plugin=PLUGIN_CLASS, service_plugins=service_plugins) l3_plugin = test_l3.TestL3NatServicePlugin() sec_plugin = test_securitygroup.SecurityGroupTestPlugin() - ext_mgr = extensions.PluginAwareExtensionManager( + ext_mgr = TestExtensionManager( EXTENSIONS_PATH, {'router': l3_plugin, 'sec': sec_plugin} ) - super(TestRevisionNumberMaintenance, self).setUp( - plugin=PLUGIN_CLASS, service_plugins=service_plugins) app = config.load_paste_app('extensions_test_app') self.ext_api = extensions.ExtensionMiddleware(app, ext_mgr=ext_mgr) self.session = db_api.get_writer_session()