ophyd_devices/tests/test_delay_generator.py

76 lines
2.3 KiB
Python

import threading
from unittest import mock
import ophyd
import pytest
from ophyd_devices.devices.delay_generator_645 import (
DelayGenerator,
DelayGeneratorError,
TriggerSource,
)
from ophyd_devices.tests.utils import (
MockPV,
patch_dual_pvs,
patch_functions_required_for_connection,
)
@pytest.fixture(scope="function")
def mock_ddg():
name = "ddg"
prefix = "X12SA-CPCL-DDG3:"
with mock.patch.object(ophyd, "cl") as mock_cl:
mock_cl.get_pv = MockPV
mock_cl.thread_class = threading.Thread
ddg = DelayGenerator(name=name, prefix=prefix)
patch_functions_required_for_connection(ddg)
patch_dual_pvs(ddg)
yield ddg
def test_ddg_init(mock_ddg):
"""This test the initialization of the DelayGenerator"""
assert mock_ddg.name == "ddg"
assert mock_ddg.prefix == "X12SA-CPCL-DDG3:"
def test_set_trigger(mock_ddg):
"""This test the set_trigger method of the DelayGenerator"""
mock_ddg.set_trigger(TriggerSource.SINGLE_SHOT)
assert mock_ddg.source.get() == 5
mock_ddg.set_trigger(TriggerSource.INTERNAL)
assert mock_ddg.source.get() == 0
def test_burst_enable(mock_ddg):
"""This test the burst_enable method of the DelayGenerator"""
count = 10
delay = 0.1
period = 0.2
mock_ddg.burst_enable(count=count, delay=delay, period=period)
assert mock_ddg.burstMode.get() == 1
assert mock_ddg.burstCount.get() == count
assert mock_ddg.burstDelay.get() == delay
assert mock_ddg.burstPeriod.get() == period
assert mock_ddg.burstConfig.get() == 0
with pytest.raises(DelayGeneratorError):
delay = -1
mock_ddg.burst_enable(count=count, delay=delay, period=period)
with pytest.raises(DelayGeneratorError):
delay = 0
period = 0
mock_ddg.burst_enable(count=count, delay=delay, period=period)
def test_check_if_ddg_okay(mock_ddg):
"""This test the is_ddg_okay method of the DelayGenerator"""
# Test for when the status is okay
mock_ddg.status._read_pv.mock_data = "STATUS OK"
assert mock_ddg.check_if_ddg_okay() is None
# Test for when the status is not okay
mock_ddg.status._read_pv.mock_data = "STATUS NOT OK"
with pytest.raises(DelayGeneratorError):
mock_ddg.check_if_ddg_okay()