Merge "Move wsgi to oslo_service.wsgi"

This commit is contained in:
Jenkins 2016-02-09 20:24:35 +00:00 committed by Gerrit Code Review
commit 53b55b0dcc
6 changed files with 52 additions and 85 deletions

View File

@ -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)

View File

@ -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

View File

@ -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'] = \

View File

@ -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):

View File

@ -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)

View File

@ -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')