Merge "Move wsgi to oslo_service.wsgi"
This commit is contained in:
commit
53b55b0dcc
|
@ -29,6 +29,7 @@ from oslo_log import log as logging
|
|||
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
|
||||
|
@ -41,8 +42,7 @@ from cinder import objects
|
|||
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__)
|
||||
|
||||
|
@ -366,7 +366,7 @@ class WSGIService(service.ServiceBase):
|
|||
"""
|
||||
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)
|
||||
|
|
|
@ -16,13 +16,14 @@
|
|||
"""
|
||||
Provides common functionality for integrated unit tests
|
||||
"""
|
||||
|
||||
import os.path
|
||||
import random
|
||||
import string
|
||||
import uuid
|
||||
|
||||
import fixtures
|
||||
import mock
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log as logging
|
||||
|
||||
from cinder import service
|
||||
|
@ -30,6 +31,7 @@ from cinder import test # For the flags
|
|||
from cinder.tests.unit.integrated.api import client
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
@ -80,6 +82,10 @@ class _IntegratedTestBase(test.TestCase):
|
|||
self.api = client.TestOpenStackClient('fake', 'fake', self.auth_url)
|
||||
|
||||
def _start_api_service(self):
|
||||
default_conf = os.path.abspath(os.path.join(
|
||||
os.path.dirname(__file__), '..', '..', '..', '..',
|
||||
'etc/cinder/api-paste.ini'))
|
||||
CONF.api_paste_config = default_conf
|
||||
self.osapi = service.WSGIService("osapi_volume")
|
||||
self.osapi.start()
|
||||
# FIXME(ja): this is not the auth url - this is the service url
|
||||
|
|
|
@ -18,7 +18,6 @@ import time
|
|||
from oslo_log import log as logging
|
||||
import testtools
|
||||
|
||||
from cinder import service
|
||||
from cinder.tests.unit import fake_driver
|
||||
from cinder.tests.unit.integrated.api import client
|
||||
from cinder.tests.unit.integrated import integrated_helpers
|
||||
|
@ -32,12 +31,6 @@ class VolumesTest(integrated_helpers._IntegratedTestBase):
|
|||
super(VolumesTest, self).setUp()
|
||||
fake_driver.LoggingVolumeDriver.clear_logs()
|
||||
|
||||
def _start_api_service(self):
|
||||
self.osapi = service.WSGIService("osapi_volume")
|
||||
self.osapi.start()
|
||||
self.auth_url = 'http://%s:%s/v2' % (self.osapi.host, self.osapi.port)
|
||||
LOG.warning(self.auth_url)
|
||||
|
||||
def _get_flags(self):
|
||||
f = super(VolumesTest, self)._get_flags()
|
||||
f['volume_driver'] = \
|
||||
|
|
|
@ -32,7 +32,6 @@ from cinder import objects
|
|||
from cinder import rpc
|
||||
from cinder import service
|
||||
from cinder import test
|
||||
from cinder.wsgi import common as wsgi
|
||||
|
||||
|
||||
test_service_opts = [
|
||||
|
@ -252,58 +251,60 @@ class TestWSGIService(test.TestCase):
|
|||
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)
|
||||
@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)
|
||||
|
||||
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()
|
||||
@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)
|
||||
# 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)
|
||||
# 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.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_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)
|
||||
# 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.Server')
|
||||
def test_workers_set_negative_user_setting(self, wsgi_server):
|
||||
@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):
|
||||
|
|
|
@ -16,14 +16,10 @@
|
|||
|
||||
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__)
|
||||
|
@ -159,32 +155,3 @@ class Middleware(Application):
|
|||
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)
|
||||
|
|
|
@ -22,6 +22,7 @@ warnings.simplefilter('once', DeprecationWarning)
|
|||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log as logging
|
||||
from oslo_service import wsgi
|
||||
|
||||
from cinder import i18n
|
||||
i18n.enable_lazy()
|
||||
|
@ -30,7 +31,6 @@ i18n.enable_lazy()
|
|||
from cinder.common import config # noqa
|
||||
from cinder import rpc
|
||||
from cinder import version
|
||||
from cinder.wsgi import common as wsgi_common
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
@ -42,4 +42,4 @@ def initialize_application():
|
|||
logging.setup(CONF, "cinder")
|
||||
|
||||
rpc.init(CONF)
|
||||
return wsgi_common.Loader().load_app(name='osapi_volume')
|
||||
return wsgi.Loader(CONF).load_app(name='osapi_volume')
|
||||
|
|
Loading…
Reference in New Issue