From 9785c83016b5be09a6eb95dfd875649762a892a0 Mon Sep 17 00:00:00 2001 From: Nizamudeen A Date: Wed, 12 Mar 2025 14:02:10 +0530 Subject: [PATCH] mgr/dashboard: disable saml2 tests when the dep is not there Signed-off-by: Nizamudeen A --- debian/control | 1 + src/pybind/mgr/dashboard/controllers/saml2.py | 26 +++++++++---------- src/pybind/mgr/dashboard/tests/test_sso.py | 7 +++++ src/pybind/mgr/dashboard/tox.ini | 2 -- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/debian/control b/debian/control index 0ae66243fa20..21aeb7247f4f 100644 --- a/debian/control +++ b/debian/control @@ -105,6 +105,7 @@ Build-Depends: automake, python3-prettytable , python3-requests , python3-scipy , + python3-onelogin-saml2 , python3-setuptools, python3-sphinx, python3-venv, diff --git a/src/pybind/mgr/dashboard/controllers/saml2.py b/src/pybind/mgr/dashboard/controllers/saml2.py index f834be9587ee..7a9c5cd86445 100644 --- a/src/pybind/mgr/dashboard/controllers/saml2.py +++ b/src/pybind/mgr/dashboard/controllers/saml2.py @@ -32,19 +32,10 @@ class Saml2(BaseController, ControllerAuthMixin): 'post_data': post_data } - @staticmethod - def _check_python_saml(): - if not python_saml_imported: - raise cherrypy.HTTPError(400, 'Required library not found: `python3-saml`') - try: - OneLogin_Saml2_Settings(mgr.SSO_DB.config.onelogin_settings) - except OneLogin_Saml2_Error: - raise cherrypy.HTTPError(400, 'Single Sign-On is not configured.') - @Endpoint('POST', path="", version=None) @allow_empty_body def auth_response(self, **kwargs): - Saml2._check_python_saml() + _check_python_saml() req = Saml2._build_req(self._request, kwargs) auth = OneLogin_Saml2_Auth(req, mgr.SSO_DB.config.onelogin_settings) auth.process_response() @@ -84,20 +75,20 @@ class Saml2(BaseController, ControllerAuthMixin): @Endpoint(xml=True, version=None) def metadata(self): - Saml2._check_python_saml() + _check_python_saml() saml_settings = OneLogin_Saml2_Settings(mgr.SSO_DB.config.onelogin_settings) return saml_settings.get_sp_metadata() @Endpoint(json_response=False, version=None) def login(self): - Saml2._check_python_saml() + _check_python_saml() req = Saml2._build_req(self._request, {}) auth = OneLogin_Saml2_Auth(req, mgr.SSO_DB.config.onelogin_settings) raise cherrypy.HTTPRedirect(auth.login()) @Endpoint(json_response=False, version=None) def slo(self): - Saml2._check_python_saml() + _check_python_saml() req = Saml2._build_req(self._request, {}) auth = OneLogin_Saml2_Auth(req, mgr.SSO_DB.config.onelogin_settings) raise cherrypy.HTTPRedirect(auth.logout()) @@ -111,3 +102,12 @@ class Saml2(BaseController, ControllerAuthMixin): self._delete_token_cookie(token) url_prefix = prepare_url_prefix(mgr.get_module_option('url_prefix', default='')) raise cherrypy.HTTPRedirect("{}/#/login".format(url_prefix)) + + +def _check_python_saml(): + if not python_saml_imported: + raise cherrypy.HTTPError(400, 'Required library not found: `python3-saml`') + try: + OneLogin_Saml2_Settings(mgr.SSO_DB.config.onelogin_settings) + except OneLogin_Saml2_Error: + raise cherrypy.HTTPError(400, 'Single Sign-On is not configured.') diff --git a/src/pybind/mgr/dashboard/tests/test_sso.py b/src/pybind/mgr/dashboard/tests/test_sso.py index 9492f0a20ed6..83dc897c2b68 100644 --- a/src/pybind/mgr/dashboard/tests/test_sso.py +++ b/src/pybind/mgr/dashboard/tests/test_sso.py @@ -5,10 +5,17 @@ import errno import tempfile import unittest +import pytest + +from ..controllers.saml2 import _check_python_saml from ..services.sso import load_sso_db from ..tests import CLICommandTestMixin, CmdException +@pytest.mark.skipif( + pytest.raises(Exception, _check_python_saml), + reason="SAML dependency is missing" +) class AccessControlTest(unittest.TestCase, CLICommandTestMixin): IDP_METADATA = '''