summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--changelog.d/8905.misc1
-rw-r--r--tests/handlers/test_saml.py23
2 files changed, 24 insertions, 0 deletions
diff --git a/changelog.d/8905.misc b/changelog.d/8905.misc
new file mode 100644
index 0000000000..a9a11a2303
--- /dev/null
+++ b/changelog.d/8905.misc
@@ -0,0 +1 @@
+Skip the SAML tests if the requirements (`pysaml2` and `xmlsec1`) aren't available.
diff --git a/tests/handlers/test_saml.py b/tests/handlers/test_saml.py
index 45dc17aba5..d21e5588ca 100644
--- a/tests/handlers/test_saml.py
+++ b/tests/handlers/test_saml.py
@@ -19,6 +19,24 @@ from synapse.handlers.sso import MappingException
 
 from tests.unittest import HomeserverTestCase, override_config
 
+# Check if we have the dependencies to run the tests.
+try:
+    import saml2.config
+    from saml2.sigver import SigverError
+
+    has_saml2 = True
+
+    # pysaml2 can be installed and imported, but might not be able to find xmlsec1.
+    config = saml2.config.SPConfig()
+    try:
+        config.load({"metadata": {}})
+        has_xmlsec1 = True
+    except SigverError:
+        has_xmlsec1 = False
+except ImportError:
+    has_saml2 = False
+    has_xmlsec1 = False
+
 # These are a few constants that are used as config parameters in the tests.
 BASE_URL = "https://synapse/"
 
@@ -86,6 +104,11 @@ class SamlHandlerTestCase(HomeserverTestCase):
 
         return hs
 
+    if not has_saml2:
+        skip = "Requires pysaml2"
+    elif not has_xmlsec1:
+        skip = "Requires xmlsec1"
+
     def test_map_saml_response_to_user(self):
         """Ensure that mapping the SAML response returned from a provider to an MXID works properly."""
         saml_response = FakeAuthnResponse({"uid": "test_user", "username": "test_user"})