
The following functionality changes were made: 1. Multiple plugins are loaded one per type 2. QuantumManager now holds dictionary {plugin_type: plugin_instance} Core plugin is stored there as well 3. Extensions are checked against all loaded plugins 4. Service plugins are specified by service_plugins option in quantum.conf file 5. Provide basic interface for service plugins 6. Introduce dummy service plugin as example and PoC 7. Service plugin's REST calls get corresponding plugin's common prefix 8. Add UTs for new extension framework functionality and for QuantumManager Implements: blueprint quantum-service-framework Change-Id: I1d00d6f848937410bccd91c852ff0871a86d7bb8
72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
# Copyright (c) 2012 OpenStack, LLC.
|
|
#
|
|
# 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 logging
|
|
import types
|
|
import unittest2
|
|
|
|
from quantum.common import config
|
|
from quantum.common.test_lib import test_config
|
|
from quantum.manager import QuantumManager
|
|
from quantum.openstack.common import cfg
|
|
from quantum.plugins.common import constants
|
|
from quantum.plugins.services.dummy.dummy_plugin import QuantumDummyPlugin
|
|
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
DB_PLUGIN_KLASS = 'quantum.db.db_base_plugin_v2.QuantumDbPluginV2'
|
|
|
|
|
|
class QuantumManagerTestCase(unittest2.TestCase):
|
|
def setUp(self):
|
|
super(QuantumManagerTestCase, self).setUp()
|
|
|
|
def tearDown(self):
|
|
unittest2.TestCase.tearDown(self)
|
|
cfg.CONF.reset()
|
|
QuantumManager._instance = None
|
|
|
|
def test_service_plugin_is_loaded(self):
|
|
cfg.CONF.set_override("core_plugin",
|
|
test_config.get('plugin_name_v2',
|
|
DB_PLUGIN_KLASS))
|
|
cfg.CONF.set_override("service_plugins",
|
|
["quantum.plugins.services."
|
|
"dummy.dummy_plugin.QuantumDummyPlugin"])
|
|
QuantumManager._instance = None
|
|
mgr = QuantumManager.get_instance()
|
|
plugin = mgr.get_service_plugins()[constants.DUMMY]
|
|
|
|
self.assertTrue(
|
|
isinstance(plugin,
|
|
(QuantumDummyPlugin, types.ClassType)),
|
|
"loaded plugin should be of type QuantumDummyPlugin")
|
|
|
|
def test_multiple_plugins_specified_for_service_type(self):
|
|
cfg.CONF.set_override("service_plugins",
|
|
["quantum.plugins.services."
|
|
"dummy.dummy_plugin.QuantumDummyPlugin",
|
|
"quantum.plugins.services."
|
|
"dummy.dummy_plugin.QuantumDummyPlugin"])
|
|
QuantumManager._instance = None
|
|
|
|
try:
|
|
QuantumManager.get_instance().get_service_plugins()
|
|
self.assertTrue(False,
|
|
"Shouldn't load multiple plugins "
|
|
"for the same type")
|
|
except Exception as e:
|
|
LOG.debug(str(e))
|