Source code for devices.tests.test_issuer.test_tls_server_credential
"""Test suite for validating the TLS Server Credential functionality."""importipaddressfromtypingimportAnyimportpytestfromcryptography.x509importDNSName,IPAddress,SubjectAlternativeNamefromdevices.issuerimportLocalTlsServerCredentialIssuerfromdevices.modelsimportIssuedCredentialModel@pytest.mark.django_db
[docs]deftest_issue_tls_server_credential(device_instance:dict[str,Any])->None:"""Test that issuing a TLS server credential works without mocks."""device=device_instance['device']issuer=LocalTlsServerCredentialIssuer(device=device,domain=device.domain)common_name='Test TLS Server Credential'validity_days=365ipv4_addresses:list[ipaddress.IPv4Address]=[ipaddress.IPv4Address('192.168.1.1')]ipv6_addresses:list[ipaddress.IPv6Address]=[ipaddress.IPv6Address('2001:db8::1')]domain_names=['example.com']issued_credential=issuer.issue_tls_server_credential(common_name=common_name,ipv4_addresses=ipv4_addresses,ipv6_addresses=ipv6_addresses,domain_names=domain_names,validity_days=validity_days,)assertisinstance(issued_credential,IssuedCredentialModel),('The returned object should be an IssuedCredentialModel')assertissued_credential.common_name==common_name,'The common name of the issued credential should match'assertissued_credential.device==device,'The issued credential should belong to the correct device'assertissued_credential.domain==device.domain,'The issued credential should belong to the correct domain'assertissued_credential.issued_credential_type==IssuedCredentialModel.IssuedCredentialType.APPLICATION_CREDENTIALassertissued_credential.issued_credential_purpose==IssuedCredentialModel.IssuedCredentialPurpose.TLS_SERVERdb_credential=IssuedCredentialModel.objects.get(pk=issued_credential.pk)assertdb_credential==issued_credential,'The credential should be saved correctly in the database'certificate=issued_credential.credential.get_certificate()san_extension=certificate.extensions.get_extension_for_class(SubjectAlternativeName).valuesan_ip_addresses=san_extension.get_values_for_type(IPAddress)foripinipv4_addresses:assertipinsan_ip_addresses,f'IPv4 address {ip} should be included in the SAN'san_dns_names=san_extension.get_values_for_type(DNSName)fordomainindomain_names:assertdomaininsan_dns_names,f'Domain name {domain} should be included in the SAN'