Source code for devices.tests.test_models.test_device_model
"""Tests for the DeviceModel model."""fromtypingimportAnyimportpytestfromdjango.dbimportIntegrityErrorfromdevices.modelsimport(DeviceModel,OnboardingConfigModel,OnboardingProtocol,OnboardingPkiProtocol,NoOnboardingConfigModel,NoOnboardingPkiProtocol,OnboardingStatus)@pytest.mark.django_db
[docs]deftest_no_onboarding_with_est_password(domain_instance:dict[str,Any])->None:"""Test for no onboarding configuration with EST Password PKI protocol."""domain=domain_instance['domain']no_onboarding_config=NoOnboardingConfigModel(est_password='test_est_password')# noqa: S106no_onboarding_config.add_pki_protocol(NoOnboardingPkiProtocol.EST_USERNAME_PASSWORD)no_onboarding_config.full_clean()no_onboarding_config.save()device=DeviceModel.objects.create(common_name='NoOnboarding_EST',serial_number='SN_NO_EST',domain=domain,no_onboarding_config=no_onboarding_config,)# Assertionsassertdevice.idisnotNoneassertdevice.common_name=='NoOnboarding_EST'assertdevice.no_onboarding_config.get_pki_protocols()==[NoOnboardingPkiProtocol.EST_USERNAME_PASSWORD]assertdevice.no_onboarding_config.est_password=='test_est_password'# noqa: S105
@pytest.mark.django_db
[docs]deftest_no_onboarding_with_cmp_shared_secret(domain_instance:dict[str,Any])->None:"""Test for no onboarding configuration with CMP Shared Secret PKI protocol."""domain=domain_instance['domain']no_onboarding_config=NoOnboardingConfigModel(cmp_shared_secret='test_cmp_secret')# noqa: S106no_onboarding_config.add_pki_protocol(NoOnboardingPkiProtocol.CMP_SHARED_SECRET)no_onboarding_config.full_clean()no_onboarding_config.save()device=DeviceModel.objects.create(common_name='NoOnboarding_CMP',serial_number='SN_NO_CMP',domain=domain,no_onboarding_config=no_onboarding_config,)# Assertionsassertdevice.idisnotNoneassertdevice.common_name=='NoOnboarding_CMP'assertdevice.no_onboarding_config.get_pki_protocols()==[NoOnboardingPkiProtocol.CMP_SHARED_SECRET]assertdevice.no_onboarding_config.cmp_shared_secret=='test_cmp_secret'# noqa: S105
@pytest.mark.django_db
[docs]deftest_est_onboarding_with_client_certificate(domain_instance:dict[str,Any])->None:"""Test for EST onboarding configuration with EST Client Certificate PKI protocol."""domain=domain_instance['domain']onboarding_pki_protocols=[OnboardingPkiProtocol.EST]onboarding_config_model=OnboardingConfigModel(onboarding_protocol=OnboardingProtocol.EST_IDEVID)onboarding_config_model.set_pki_protocols(onboarding_pki_protocols)onboarding_config_model.full_clean()onboarding_config_model.save()device=DeviceModel.objects.create(common_name='EST_Onboarding',serial_number='SN_EST_ONBOARD',domain=domain,onboarding_config=onboarding_config_model)# Assertionsassertdevice.idisnotNoneassertdevice.common_name=='EST_Onboarding'assertdevice.onboarding_config.onboarding_status==OnboardingStatus.PENDINGassertdevice.onboarding_config.onboarding_protocol==OnboardingProtocol.EST_IDEVIDassertdevice.onboarding_config.get_pki_protocols()==[OnboardingPkiProtocol.EST]
@pytest.mark.django_db
[docs]deftest_cmp_onboarding_with_client_certificate(domain_instance:dict[str,Any])->None:"""Test for CMP onboarding configuration with CMP Client Certificate PKI protocol."""domain=domain_instance['domain']onboarding_pki_protocols=[OnboardingPkiProtocol.CMP]onboarding_config_model=OnboardingConfigModel(onboarding_protocol=OnboardingProtocol.CMP_IDEVID)onboarding_config_model.set_pki_protocols(onboarding_pki_protocols)onboarding_config_model.full_clean()onboarding_config_model.save()device=DeviceModel.objects.create(common_name='CMP_Onboarding',serial_number='SN_CMP_ONBOARD',domain=domain,onboarding_config=onboarding_config_model)# Assertionsassertdevice.idisnotNoneassertdevice.common_name=='CMP_Onboarding'assertdevice.onboarding_config.onboarding_status==OnboardingStatus.PENDINGassertdevice.onboarding_config.onboarding_protocol==OnboardingProtocol.CMP_IDEVIDassertdevice.onboarding_config.get_pki_protocols()==[OnboardingPkiProtocol.CMP]
@pytest.mark.django_db
[docs]deftest_generic_device_no_onboarding(domain_instance:dict[str,Any])->None:"""Test for a generic device with no onboarding configurations."""domain=domain_instance['domain']no_onboarding_config=NoOnboardingConfigModel()no_onboarding_config.add_pki_protocol(NoOnboardingPkiProtocol.MANUAL)no_onboarding_config.full_clean()no_onboarding_config.save()device=DeviceModel.objects.create(common_name='GenericDevice_NoOnboarding',serial_number='GENERIC_NO_ONBOARD',domain=domain,no_onboarding_config=no_onboarding_config,)# Assertionsassertdevice.idisnotNoneassertdevice.common_name=='GenericDevice_NoOnboarding'assertdevice.no_onboarding_config.get_pki_protocols()==[NoOnboardingPkiProtocol.MANUAL]assertdevice.no_onboarding_config.est_password==''
@pytest.mark.django_db
[docs]deftest_device_opc_ua_gds(domain_instance:dict[str,Any])->None:"""Test for a device with OPC UA GDS type."""domain=domain_instance['domain']onboarding_pki_protocols=[OnboardingPkiProtocol.EST]onboarding_config_model=OnboardingConfigModel(onboarding_protocol=OnboardingProtocol.EST_IDEVID)onboarding_config_model.set_pki_protocols(onboarding_pki_protocols)onboarding_config_model.full_clean()onboarding_config_model.save()device=DeviceModel.objects.create(common_name='OPCUA_Device',serial_number='SN_OPCUA',domain=domain,device_type=DeviceModel.DeviceType.OPC_UA_GDS,onboarding_config=onboarding_config_model)# Assertionsassertdevice.idisnotNoneassertdevice.common_name=='OPCUA_Device'assertdevice.serial_number=='SN_OPCUA'assertdevice.device_type==DeviceModel.DeviceType.OPC_UA_GDSassertdevice.onboarding_config.onboarding_status==OnboardingStatus.PENDINGassertdevice.onboarding_config.onboarding_protocol==OnboardingProtocol.EST_IDEVIDassertdevice.onboarding_config.get_pki_protocols()==[OnboardingPkiProtocol.EST]
@pytest.mark.django_db
[docs]deftest_device_without_domain()->None:"""Test for a device with no assigned domain."""device=DeviceModel.objects.create(common_name='NoDomain_Device',serial_number='NO_DOMAIN',domain=None,)# Assertionsassertdevice.idisnotNoneassertdevice.common_name=='NoDomain_Device'assertdevice.serial_number=='NO_DOMAIN'assertdevice.domainisNone
@pytest.mark.django_db
[docs]deftest_device_creation_without_common_name(domain_instance:dict[str,Any])->None:"""Test for device creation without a common name."""domain=domain_instance['domain']withpytest.raises(IntegrityError,match='NOT NULL constraint failed: devices_devicemodel.common_name'):DeviceModel.objects.create(common_name=None,# type: ignore[misc]serial_number='MISSING_COMMON_NAME',domain=domain,)