authentik.sources.saml.tests.test_metadata

SAML Source tests

 1"""SAML Source tests"""
 2
 3from defusedxml import ElementTree
 4from django.test import RequestFactory, TestCase
 5from lxml import etree  # nosec
 6
 7from authentik.core.tests.utils import create_test_cert, create_test_flow
 8from authentik.lib.generators import generate_id
 9from authentik.lib.xml import lxml_from_string
10from authentik.sources.saml.models import SAMLSource
11from authentik.sources.saml.processors.metadata import MetadataProcessor
12
13
14class TestMetadataProcessor(TestCase):
15    """Test MetadataProcessor"""
16
17    def setUp(self):
18        self.factory = RequestFactory()
19        self.source = SAMLSource.objects.create(
20            name=generate_id(),
21            slug=generate_id(),
22            issuer="authentik",
23            signing_kp=create_test_cert(),
24            encryption_kp=create_test_cert(),
25            pre_authentication_flow=create_test_flow(),
26        )
27
28    def test_metadata_schema(self):
29        """Test Metadata generation being valid"""
30        request = self.factory.get("/")
31        xml = MetadataProcessor(self.source, request).build_entity_descriptor()
32        metadata = lxml_from_string(xml)
33
34        schema = etree.XMLSchema(
35            etree.parse("schemas/saml-schema-metadata-2.0.xsd", parser=etree.XMLParser())  # nosec
36        )
37        self.assertTrue(schema.validate(metadata))
38
39    def test_metadata_consistent(self):
40        """Test Metadata generation being consistent (xml stays the same)"""
41        request = self.factory.get("/")
42        xml_a = MetadataProcessor(self.source, request).build_entity_descriptor()
43        xml_b = MetadataProcessor(self.source, request).build_entity_descriptor()
44        self.assertEqual(xml_a, xml_b)
45
46    def test_metadata(self):
47        """Test Metadata generation being valid"""
48        request = self.factory.get("/")
49        xml = MetadataProcessor(self.source, request).build_entity_descriptor()
50        metadata = ElementTree.fromstring(xml)
51        self.assertEqual(metadata.attrib["entityID"], "authentik")
52
53    def test_metadata_without_signature(self):
54        """Test Metadata generation being valid"""
55        self.source.signing_kp = None
56        self.source.save()
57        request = self.factory.get("/")
58        xml = MetadataProcessor(self.source, request).build_entity_descriptor()
59        metadata = ElementTree.fromstring(xml)
60        self.assertEqual(metadata.attrib["entityID"], "authentik")
class TestMetadataProcessor(django.test.testcases.TestCase):
15class TestMetadataProcessor(TestCase):
16    """Test MetadataProcessor"""
17
18    def setUp(self):
19        self.factory = RequestFactory()
20        self.source = SAMLSource.objects.create(
21            name=generate_id(),
22            slug=generate_id(),
23            issuer="authentik",
24            signing_kp=create_test_cert(),
25            encryption_kp=create_test_cert(),
26            pre_authentication_flow=create_test_flow(),
27        )
28
29    def test_metadata_schema(self):
30        """Test Metadata generation being valid"""
31        request = self.factory.get("/")
32        xml = MetadataProcessor(self.source, request).build_entity_descriptor()
33        metadata = lxml_from_string(xml)
34
35        schema = etree.XMLSchema(
36            etree.parse("schemas/saml-schema-metadata-2.0.xsd", parser=etree.XMLParser())  # nosec
37        )
38        self.assertTrue(schema.validate(metadata))
39
40    def test_metadata_consistent(self):
41        """Test Metadata generation being consistent (xml stays the same)"""
42        request = self.factory.get("/")
43        xml_a = MetadataProcessor(self.source, request).build_entity_descriptor()
44        xml_b = MetadataProcessor(self.source, request).build_entity_descriptor()
45        self.assertEqual(xml_a, xml_b)
46
47    def test_metadata(self):
48        """Test Metadata generation being valid"""
49        request = self.factory.get("/")
50        xml = MetadataProcessor(self.source, request).build_entity_descriptor()
51        metadata = ElementTree.fromstring(xml)
52        self.assertEqual(metadata.attrib["entityID"], "authentik")
53
54    def test_metadata_without_signature(self):
55        """Test Metadata generation being valid"""
56        self.source.signing_kp = None
57        self.source.save()
58        request = self.factory.get("/")
59        xml = MetadataProcessor(self.source, request).build_entity_descriptor()
60        metadata = ElementTree.fromstring(xml)
61        self.assertEqual(metadata.attrib["entityID"], "authentik")

Test MetadataProcessor

def setUp(self):
18    def setUp(self):
19        self.factory = RequestFactory()
20        self.source = SAMLSource.objects.create(
21            name=generate_id(),
22            slug=generate_id(),
23            issuer="authentik",
24            signing_kp=create_test_cert(),
25            encryption_kp=create_test_cert(),
26            pre_authentication_flow=create_test_flow(),
27        )

Hook method for setting up the test fixture before exercising it.

def test_metadata_schema(self):
29    def test_metadata_schema(self):
30        """Test Metadata generation being valid"""
31        request = self.factory.get("/")
32        xml = MetadataProcessor(self.source, request).build_entity_descriptor()
33        metadata = lxml_from_string(xml)
34
35        schema = etree.XMLSchema(
36            etree.parse("schemas/saml-schema-metadata-2.0.xsd", parser=etree.XMLParser())  # nosec
37        )
38        self.assertTrue(schema.validate(metadata))

Test Metadata generation being valid

def test_metadata_consistent(self):
40    def test_metadata_consistent(self):
41        """Test Metadata generation being consistent (xml stays the same)"""
42        request = self.factory.get("/")
43        xml_a = MetadataProcessor(self.source, request).build_entity_descriptor()
44        xml_b = MetadataProcessor(self.source, request).build_entity_descriptor()
45        self.assertEqual(xml_a, xml_b)

Test Metadata generation being consistent (xml stays the same)

def test_metadata(self):
47    def test_metadata(self):
48        """Test Metadata generation being valid"""
49        request = self.factory.get("/")
50        xml = MetadataProcessor(self.source, request).build_entity_descriptor()
51        metadata = ElementTree.fromstring(xml)
52        self.assertEqual(metadata.attrib["entityID"], "authentik")

Test Metadata generation being valid

def test_metadata_without_signature(self):
54    def test_metadata_without_signature(self):
55        """Test Metadata generation being valid"""
56        self.source.signing_kp = None
57        self.source.save()
58        request = self.factory.get("/")
59        xml = MetadataProcessor(self.source, request).build_entity_descriptor()
60        metadata = ElementTree.fromstring(xml)
61        self.assertEqual(metadata.attrib["entityID"], "authentik")

Test Metadata generation being valid