wip ioc stuff

This commit is contained in:
2025-06-20 13:44:10 +02:00
parent 245328adf1
commit 047674acfe

View File

@ -1,6 +1,12 @@
from unittest.mock import MagicMock import sys
import time
from multiprocessing import Process
from unittest.mock import MagicMock, patch
import pytest import pytest
from caproto.ioc_examples import fake_motor_record as fmr
from caproto.server import ioc_arg_parser, run
from caproto.sync.client import read
from ophyd.device import Component as Cpt from ophyd.device import Component as Cpt
from ophyd.signal import EpicsSignal from ophyd.signal import EpicsSignal
from ophyd.sim import FakeEpicsSignal, FakeEpicsSignalRO from ophyd.sim import FakeEpicsSignal, FakeEpicsSignalRO
@ -11,6 +17,34 @@ from ophyd_devices.interfaces.base_classes.psi_positioner_base import (
) )
@pytest.fixture
def sim_motor():
with patch.object(sys, "argv", [sys.executable]):
ioc_options, run_options = ioc_arg_parser(
default_prefix="sim:", desc=fmr.FakeMotorIOC.__doc__
)
ioc = fmr.FakeMotorIOC(**ioc_options)
p = Process(target=fmr.run, args=[ioc.pvdb], kwargs=run_options, daemon=True)
p.start()
import epics
start = time.monotonic()
time.sleep(0.1)
while True:
try:
rd = epics.caget("sim:mtr1.RBV")
except Exception as e:
print(e)
rd = None
rd
if time.monotonic() - start > 100:
raise TimeoutError("Failed waiting for IOC to start")
yield
p.kill()
p.join()
def test_cannot_isntantiate_without_required_signals(): def test_cannot_isntantiate_without_required_signals():
class PSITestPositionerWOSignal(PSIPositionerBase): ... class PSITestPositionerWOSignal(PSIPositionerBase): ...
@ -25,3 +59,7 @@ def test_cannot_isntantiate_without_required_signals():
dev = PSITestPositionerWithSignal("", name="") dev = PSITestPositionerWithSignal("", name="")
assert dev.user_setpoint.get() == 0 assert dev.user_setpoint.get() == 0
def test_against_ioc(sim_motor):
assert 1