From: Volker Theile Date: Thu, 10 Dec 2020 14:30:16 +0000 (+0100) Subject: mgr/dashboard: The /rgw/status endpoint does not check for running service X-Git-Tag: v15.2.9~81^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=e0d38f5e7194ff57dddc6a33811b0f3d795ea7fc;p=ceph.git mgr/dashboard: The /rgw/status endpoint does not check for running service Fixes: https://tracker.ceph.com/issues/48542 Signed-off-by: Volker Theile (cherry picked from commit 3cfe054d42cbdc5fa731626b27ecaf9ac0baa31e) --- diff --git a/src/pybind/mgr/dashboard/controllers/rgw.py b/src/pybind/mgr/dashboard/controllers/rgw.py index 3127151485032..55a6fbcddb7d3 100644 --- a/src/pybind/mgr/dashboard/controllers/rgw.py +++ b/src/pybind/mgr/dashboard/controllers/rgw.py @@ -30,6 +30,8 @@ class Rgw(BaseController): def status(self): status = {'available': False, 'message': None} try: + if not CephService.get_service_list('rgw'): + raise LookupError('No RGW service is running.') instance = RgwClient.admin_instance() # Check if the service is online. if not instance.is_service_online(): # pragma: no cover - no complexity there diff --git a/src/pybind/mgr/dashboard/tests/test_rgw.py b/src/pybind/mgr/dashboard/tests/test_rgw.py index 2c90e7d11be1d..1a99db59287cd 100644 --- a/src/pybind/mgr/dashboard/tests/test_rgw.py +++ b/src/pybind/mgr/dashboard/tests/test_rgw.py @@ -3,8 +3,22 @@ try: except ImportError: import unittest.mock as mock -from . import ControllerTestCase -from ..controllers.rgw import RgwUser +from .. import mgr +from ..controllers.rgw import Rgw, RgwUser +from . import ControllerTestCase # pylint: disable=no-name-in-module + + +class RgwControllerTestCase(ControllerTestCase): + @classmethod + def setup_server(cls): + Rgw._cp_config['tools.authenticate.on'] = False # pylint: disable=protected-access + cls.setup_controllers([Rgw], '/test') + + def test_status_no_service(self): + mgr.list_servers.return_value = [] + self._get('/test/api/rgw/status') + self.assertStatus(200) + self.assertJsonBody({'available': False, 'message': 'No RGW service is running.'}) class RgwUserControllerTestCase(ControllerTestCase):