Source code for devices.tests.test_issuer.test_opcua_client_credential
"""Test suite for validating the OPC UA Client Credential functionality."""fromtypingimportAnyimportpytestfromcryptography.x509importSubjectAlternativeName,UniformResourceIdentifierfromdevices.issuerimportOpcUaClientCredentialIssuerfromdevices.modelsimportIssuedCredentialModel@pytest.mark.django_db
[docs]deftest_issue_opc_ua_client_credential(device_instance:dict[str,Any])->None:"""Test that issuing an OPC UA client credential works without mocks."""device=device_instance['device']issuer=OpcUaClientCredentialIssuer(device=device,domain=device.domain)# Input parameterscommon_name='Test OPC UA Client Credential'application_uri='urn:example:opc-ua:client'validity_days=365issued_credential=issuer.issue_opc_ua_client_credential(common_name=common_name,application_uri=application_uri,validity_days=validity_days,)assertisinstance(issued_credential,IssuedCredentialModel),('The returned object should be an IssuedCredentialModel')assertissued_credential.common_name==common_name,'The common name should match the input'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'assert(issued_credential.issued_credential_type==IssuedCredentialModel.IssuedCredentialType.APPLICATION_CREDENTIAL),'The issued_credential_type should be APPLICATION_CREDENTIAL'assertissued_credential.issued_credential_purpose==IssuedCredentialModel.IssuedCredentialPurpose.OPCUA_CLIENT,('The issued_credential_purpose should be OPCUA_CLIENT')db_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_uris=san_extension.get_values_for_type(UniformResourceIdentifier)assertapplication_uriinsan_uris,f'The application URI {application_uri} should be present in the SAN'cert_chain=issued_credential.credential.get_certificate_chain()assertisinstance(cert_chain,list),'The certificate chain should be a list'assertlen(cert_chain)>0,'The certificate chain should not be empty'assertall(certisnotNoneforcertincert_chain),'All certificates in the chain should be valid'