Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
test_certificate_creation.py 5.2 KiB
Newer Older
"""Test case for Certificate creation"""
import unittest
import json
import os
import requests


HOST = os.getenv("HOST", default="localhost")
PORT = os.getenv("PORT", default="8080")
API_KEY = os.getenv("API_KEY", "only4testingpurpose")


class TestCertificateCreation(unittest.TestCase):
    """Test case for Mapping creation class"""

    mapping_id = None

    def test_that_certificate_is_created(self) -> None:
        """Test that certificate is created"""

        response = requests.post(
            url=f"http://{HOST}:{PORT}/api/plugins/cert/certificate/",
            json={"cn": "truc00.com", "ca": "letsencrypt", "expiration_time": "1m"},
            headers={"Authorization": f"Token {API_KEY}"},
            timeout=5,
        )

        self.assertEqual(response.status_code, 201)

        self.mapping_id = json.loads(response.content)["id"]

    def test_that_default_certificate_properties_is_set(self) -> None:
        """Test that default certificate properties is set"""

        response = requests.post(
            url=f"http://{HOST}:{PORT}/api/plugins/cert/certificate/",
            json={"cn": "truc00.com", "ca": "letsencrypt"},
            headers={"Authorization": f"Token {API_KEY}"},
            timeout=5,
        )

        self.assertEqual(response.status_code, 201)

        self.mapping_id = json.loads(response.content)["id"]

        content = json.loads(response.content)
        self.assertEqual(content["expiration_time"], "1m")
        self.assertEqual(content["state"], "to_be_created")
    def test_that_cn_is_unique(self) -> None:
        """Test that CN is unique"""

        response = requests.post(
            url=f"http://{HOST}:{PORT}/api/plugins/cert/certificate/",
            json={"cn": "truc00.com", "ca": "letsencrypt", "expiration_time": "1m"},
            headers={"Authorization": f"Token {API_KEY}"},
            timeout=5,
        )

        self.assertEqual(response.status_code, 201)

        self.mapping_id = json.loads(response.content)["id"]

        response = requests.post(
            url=f"http://{HOST}:{PORT}/api/plugins/cert/certificate/",
            json={"cn": "truc00.com", "ca": "commissign", "expiration_time": "3m"},
            headers={"Authorization": f"Token {API_KEY}"},
            timeout=5,
        )

        self.assertEqual(response.status_code, 400)
        self.assertEqual(
            response.content,
            b'{"cn":["certificate with this Common Name already exists."]}',
        )

    def test_that_ca_is_valid(self) -> None:
        """Test that CA is valid"""

        response = requests.post(
            url=f"http://{HOST}:{PORT}/api/plugins/cert/certificate/",
            json={"cn": "truc00.com", "ca": "randomca", "expiration_time": "3m"},
            headers={"Authorization": f"Token {API_KEY}"},
            timeout=5,
        )

        self.assertEqual(response.status_code, 400)
        self.assertEqual(
            response.content, b'{"ca":["\\"randomca\\" is not a valid choice."]}'
        )

    def test_that_expiration_time_is_valid(self) -> None:
        """Test that expiration time is valid"""

        response = requests.post(
            url=f"http://{HOST}:{PORT}/api/plugins/cert/certificate/",
            json={"cn": "truc00.com", "ca": "commissign", "expiration_time": "10m"},
            headers={"Authorization": f"Token {API_KEY}"},
            timeout=5,
        )

        self.assertEqual(response.status_code, 400)
        self.assertEqual(
            response.content,
            b'{"expiration_time":["\\"10m\\" is not a valid choice."]}',
        )
    def test_that_alt_name_is_an_array(self) -> None:
        """Test that Alt name is an array"""

        response = requests.post(
            url=f"http://{HOST}:{PORT}/api/plugins/cert/certificate/",
            json={
                "cn": "truc00.com",
                "ca": "letsencrypt",
                "expiration_time": "1m",
                "alt_name": "truc01.com",
            },
            headers={"Authorization": f"Token {API_KEY}"},
            timeout=5,
        )

        self.assertEqual(response.status_code, 400)
        self.assertEqual(
            response.content,
            b'{"alt_name":["Expected a list of items but got type \\"str\\"."]}',
        )

    def test_that_certificate_is_created_with_alt_name(self) -> None:
        """Test that certificate is created"""

        response = requests.post(
            url=f"http://{HOST}:{PORT}/api/plugins/cert/certificate/",
            json={
                "cn": "truc00.com",
                "ca": "commissign",
                "expiration_time": "1m",
                "alt_name": ["192.168.1.1", "truc01.com"],
            },
            headers={"Authorization": f"Token {API_KEY}"},
            timeout=5,
        )

        self.assertEqual(response.status_code, 201)

        self.mapping_id = json.loads(response.content)["id"]

    def tearDown(self) -> None:
        """Teardown function"""

        requests.delete(
            url=f"http://{HOST}:{PORT}/api/plugins/cert/certificate/",
            json=[{"id": self.mapping_id}],
            headers={"Authorization": f"Token {API_KEY}"},
            timeout=5,
        )


if __name__ == "__main__":
    unittest.main()