From b0db709ed2f4d237062896d61544564170314c6a Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sat, 17 Oct 2020 01:10:24 +0800 Subject: [PATCH] pybind/mgr/dashboard: use setUpClass for initializeing class instead of relying on __init__(), use setUpClass() to initialize class for testing. it turns out in pytest > 4, __init__() is called for the test class but the attributes of the instantiated class is in turn overriden. so we have to use setUpClass to do this job. Signed-off-by: Kefu Chai (cherry picked from commit 71979e9b46e21dc3d3cfc6f06f4a84c9b4c7ce78) Conflicts: src/pybind/mgr/dashboard/tests/test_api_auditing.py: Differences in import lines src/pybind/mgr/dashboard/tests/test_tools.py: Differences in import lines --- src/pybind/mgr/dashboard/tests/__init__.py | 17 +++++++++++++++-- .../mgr/dashboard/tests/test_api_auditing.py | 8 ++------ src/pybind/mgr/dashboard/tests/test_settings.py | 12 ++++++++++++ src/pybind/mgr/dashboard/tests/test_tools.py | 8 ++------ 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/pybind/mgr/dashboard/tests/__init__.py b/src/pybind/mgr/dashboard/tests/__init__.py index 00bfcda3eabf0..c29cab412d7bf 100644 --- a/src/pybind/mgr/dashboard/tests/__init__.py +++ b/src/pybind/mgr/dashboard/tests/__init__.py @@ -19,6 +19,7 @@ from .. import mgr from ..controllers import json_error_page, generate_controller_routes from ..services.auth import AuthManagerTool from ..services.exception import dashboard_exception_handler +from ..tools import RequestLoggingTool from ..plugins import PLUGIN_MANAGER from ..plugins import feature_toggles, debug # noqa @@ -133,7 +134,11 @@ class ControllerTestCase(helper.CPWebCase): cherrypy.tree.mount(None, config={ base_url: {'request.dispatch': mapper}}) - def __init__(self, *args, **kwargs): + _request_logging = False + + @classmethod + def setUpClass(cls): + super().setUpClass() cherrypy.tools.authenticate = AuthManagerTool() cherrypy.tools.dashboard_exception_handler = HandlerWrapperTool(dashboard_exception_handler, priority=31) @@ -143,7 +148,15 @@ class ControllerTestCase(helper.CPWebCase): 'tools.json_in.force': False }) PLUGIN_MANAGER.hook.configure_cherrypy(config=cherrypy.config) - super(ControllerTestCase, self).__init__(*args, **kwargs) + + if cls._request_logging: + cherrypy.tools.request_logging = RequestLoggingTool() + cherrypy.config.update({'tools.request_logging.on': True}) + + @classmethod + def tearDownClass(cls): + if cls._request_logging: + cherrypy.config.update({'tools.request_logging.on': False}) def _request(self, url, method, data=None, headers=None): if not data: diff --git a/src/pybind/mgr/dashboard/tests/test_api_auditing.py b/src/pybind/mgr/dashboard/tests/test_api_auditing.py index 023ea7992a1f7..abfa3bd73edc8 100644 --- a/src/pybind/mgr/dashboard/tests/test_api_auditing.py +++ b/src/pybind/mgr/dashboard/tests/test_api_auditing.py @@ -3,7 +3,7 @@ from __future__ import absolute_import import re import json -import cherrypy + try: import mock except ImportError: @@ -11,7 +11,6 @@ except ImportError: from . import ControllerTestCase, KVStoreMockMixin # pylint: disable=no-name-in-module from ..controllers import RESTController, Controller -from ..tools import RequestLoggingTool from .. import mgr @@ -33,10 +32,7 @@ class FooResource(RESTController): class ApiAuditingTest(ControllerTestCase, KVStoreMockMixin): - def __init__(self, *args, **kwargs): - cherrypy.tools.request_logging = RequestLoggingTool() - cherrypy.config.update({'tools.request_logging.on': True}) - super(ApiAuditingTest, self).__init__(*args, **kwargs) + _request_logging = True @classmethod def setup_server(cls): diff --git a/src/pybind/mgr/dashboard/tests/test_settings.py b/src/pybind/mgr/dashboard/tests/test_settings.py index abe2558cd0cc0..6ef9f8f74e03c 100644 --- a/src/pybind/mgr/dashboard/tests/test_settings.py +++ b/src/pybind/mgr/dashboard/tests/test_settings.py @@ -135,7 +135,19 @@ class SettingsControllerTest(ControllerTestCase, KVStoreMockMixin): SettingsController._cp_config['tools.authenticate.on'] = False cls.setup_controllers([SettingsController]) + @classmethod + def setUpClass(cls): + super().setUpClass() + # pylint: disable=protected-access + settings.Options.GRAFANA_API_HOST = ('localhost', str) + settings.Options.GRAFANA_ENABLED = (False, bool) + + @classmethod + def tearDownClass(cls): + super().tearDownClass() + def setUp(self): + super().setUp() self.mock_kv_store() def test_settings_list(self): diff --git a/src/pybind/mgr/dashboard/tests/test_tools.py b/src/pybind/mgr/dashboard/tests/test_tools.py index 340ff8c41d5e4..b9d6a43f89e4d 100644 --- a/src/pybind/mgr/dashboard/tests/test_tools.py +++ b/src/pybind/mgr/dashboard/tests/test_tools.py @@ -11,11 +11,10 @@ except ImportError: from unittest.mock import patch from . import ControllerTestCase # pylint: disable=no-name-in-module +from ..tools import dict_contains_path, dict_get, json_str_to_object, partial_dict from ..services.exception import handle_rados_error from ..controllers import RESTController, ApiController, Controller, \ BaseController, Proxy -from ..tools import dict_contains_path, json_str_to_object, partial_dict,\ - dict_get, RequestLoggingTool # pylint: disable=W0613 @@ -151,10 +150,7 @@ class RESTControllerTest(ControllerTestCase): class RequestLoggingToolTest(ControllerTestCase): - def __init__(self, *args, **kwargs): - cherrypy.tools.request_logging = RequestLoggingTool() - cherrypy.config.update({'tools.request_logging.on': True}) - super(RequestLoggingToolTest, self).__init__(*args, **kwargs) + _request_logging = True @classmethod def setup_server(cls): -- 2.39.5