import oslo_messaging as messaging
from oslo_service import loopingcall
from oslo_service import service
+from oslo_service import wsgi
from oslo_utils import importutils
import osprofiler.notifier
from osprofiler import profiler
from cinder.objects import base as objects_base
from cinder import rpc
from cinder import version
-from cinder.wsgi import common as wsgi_common
-from cinder.wsgi import eventlet_server as wsgi
+
LOG = logging.getLogger(__name__)
"""
self.name = name
self.manager = self._get_manager()
- self.loader = loader or wsgi_common.Loader()
+ self.loader = loader or wsgi.Loader(CONF)
self.app = self.loader.load_app(name)
self.host = getattr(CONF, '%s_listen' % name, "0.0.0.0")
self.port = getattr(CONF, '%s_listen_port' % name, 0)
from cinder import rpc
from cinder import service
from cinder import test
-from cinder.wsgi import common as wsgi
test_service_opts = [
def setUp(self):
super(TestWSGIService, self).setUp()
- def test_service_random_port(self):
- with mock.patch.object(wsgi.Loader, 'load_app') as mock_load_app:
- test_service = service.WSGIService("test_service")
- self.assertEqual(0, test_service.port)
- test_service.start()
- self.assertNotEqual(0, test_service.port)
- test_service.stop()
- self.assertTrue(mock_load_app.called)
-
- def test_reset_pool_size_to_default(self):
- with mock.patch.object(wsgi.Loader, 'load_app') as mock_load_app:
- test_service = service.WSGIService("test_service")
- test_service.start()
-
- # Stopping the service, which in turn sets pool size to 0
- test_service.stop()
- self.assertEqual(0, test_service.server._pool.size)
-
- # Resetting pool size to default
- test_service.reset()
- test_service.start()
- self.assertEqual(1000, test_service.server._pool.size)
- self.assertTrue(mock_load_app.called)
-
- @mock.patch('oslo_service.wsgi.Server')
- def test_workers_set_default(self, wsgi_server):
- self.override_config('osapi_volume_listen_port', 0)
+ @mock.patch('oslo_service.wsgi.Loader')
+ def test_service_random_port(self, mock_loader):
+ test_service = service.WSGIService("test_service")
+ self.assertEqual(0, test_service.port)
+ test_service.start()
+ self.assertNotEqual(0, test_service.port)
+ test_service.stop()
+ self.assertTrue(mock_loader.called)
+
+ @mock.patch('oslo_service.wsgi.Loader')
+ def test_reset_pool_size_to_default(self, mock_loader):
+ test_service = service.WSGIService("test_service")
+ test_service.start()
+
+ # Stopping the service, which in turn sets pool size to 0
+ test_service.stop()
+ self.assertEqual(0, test_service.server._pool.size)
+
+ # Resetting pool size to default
+ test_service.reset()
+ test_service.start()
+ self.assertEqual(1000, test_service.server._pool.size)
+ self.assertTrue(mock_loader.called)
+
+ @mock.patch('oslo_service.wsgi.Loader')
+ def test_workers_set_default(self, mock_loader):
test_service = service.WSGIService("osapi_volume")
- self.assertEqual(processutils.get_worker_count(), test_service.workers)
+ self.assertEqual(processutils.get_worker_count(),
+ test_service.workers)
+ self.assertTrue(mock_loader.called)
- @mock.patch('oslo_service.wsgi.Server')
- def test_workers_set_good_user_setting(self, wsgi_server):
- self.override_config('osapi_volume_listen_port', 0)
+ @mock.patch('oslo_service.wsgi.Loader')
+ def test_workers_set_good_user_setting(self, mock_loader):
self.override_config('osapi_volume_workers', 8)
test_service = service.WSGIService("osapi_volume")
self.assertEqual(8, test_service.workers)
+ self.assertTrue(mock_loader.called)
- @mock.patch('oslo_service.wsgi.Server')
- def test_workers_set_zero_user_setting(self, wsgi_server):
- self.override_config('osapi_volume_listen_port', 0)
+ @mock.patch('oslo_service.wsgi.Loader')
+ def test_workers_set_zero_user_setting(self, mock_loader):
self.override_config('osapi_volume_workers', 0)
test_service = service.WSGIService("osapi_volume")
- # If a value less than 1 is used, defaults to number of procs available
- self.assertEqual(processutils.get_worker_count(), test_service.workers)
-
- @mock.patch('oslo_service.wsgi.Server')
- def test_workers_set_negative_user_setting(self, wsgi_server):
+ # If a value less than 1 is used, defaults to number of procs
+ # available
+ self.assertEqual(processutils.get_worker_count(),
+ test_service.workers)
+ self.assertTrue(mock_loader.called)
+
+ @mock.patch('oslo_service.wsgi.Loader')
+ def test_workers_set_negative_user_setting(self, mock_loader):
self.override_config('osapi_volume_workers', -1)
self.assertRaises(exception.InvalidInput,
- service.WSGIService,
- "osapi_volume")
- self.assertFalse(wsgi_server.called)
+ service.WSGIService, "osapi_volume")
+ self.assertTrue(mock_loader.called)
class OSCompatibilityTestCase(test.TestCase):
from oslo_config import cfg
from oslo_log import log as logging
-from oslo_service import wsgi
-from paste import deploy
import webob.dec
import webob.exc
-from cinder import exception
-from cinder.i18n import _, _LE
-from cinder import utils
+from cinder.i18n import _
CONF = cfg.CONF
LOG = logging.getLogger(__name__)
return response
response = req.get_response(self.application)
return self.process_response(response)
-
-
-class Loader(object):
- """Used to load WSGI applications from paste configurations."""
-
- def __init__(self, config_path=None):
- """Initialize the loader, and attempt to find the config.
-
- :param config_path: Full or relative path to the paste config.
- :returns: None
-
- """
- wsgi.register_opts(CONF) # noqa
- config_path = config_path or CONF.api_paste_config
- self.config_path = utils.find_config(config_path)
-
- def load_app(self, name):
- """Return the paste URLMap wrapped WSGI application.
-
- :param name: Name of the application to load.
- :returns: Paste URLMap object wrapping the requested application.
- :raises: `cinder.exception.PasteAppNotFound`
-
- """
- try:
- return deploy.loadapp("config:%s" % self.config_path, name=name)
- except LookupError:
- LOG.exception(_LE("Error loading app %s"), name)
- raise exception.PasteAppNotFound(name=name, path=self.config_path)