]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Move wsgi to oslo_service.wsgi
authorYuriy Nesenenko <ynesenenko@mirantis.com>
Wed, 16 Dec 2015 14:22:46 +0000 (16:22 +0200)
committerYuriy Nesenenko <ynesenenko@mirantis.com>
Tue, 19 Jan 2016 16:15:54 +0000 (18:15 +0200)
This patch replaces wsgi with oslo_service.wsgi in service.py

DocImpact
Implements: blueprint reusing-wsgi-from-oslo.service
Change-Id: Ib4c4bf9d78571d63c667753ea10dfea28ea6b866

cinder/service.py
cinder/tests/unit/integrated/integrated_helpers.py
cinder/tests/unit/integrated/test_volumes.py
cinder/tests/unit/test_service.py
cinder/wsgi/common.py
cinder/wsgi/wsgi.py

index 66c015e212582c89b94c77b9b5e26835577e66ba..549e2ef1fece6d003608fc59b03e12ee055e0009 100644 (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__)
 
@@ -358,7 +358,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)
index bfbee797bf3c4ab31382323226fc5ce4e41633f9..42661bf002dad244493a09ec71f78b6b8424793d 100644 (file)
 """
 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
index 6a83dd6fdd89d3e02f4496a5b320aae46181865c..d9d5482817c243f30961e33761106b26bc5ffed6 100644 (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'] = \
index ee8f02099a370df378356b5281726060d50434f6..995d07bd12238b5024105219046ac3a85603453b 100644 (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)
-
-    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):
index 1e4eaf37da26034101bcb29ce4a02a3d237c864c..4da4ffa0bcc4d02feb3c07f5185d466294e529c5 100644 (file)
 
 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)
index 966993d9c5358271a36a00621515f84d16e71360..2f82905215c8e6f32d05818694e22c1f76a1739b 100644 (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')