From 047674acfe89a6d9386ef7d6c17e198c7c8ed23e Mon Sep 17 00:00:00 2001 From: perl_d Date: Fri, 20 Jun 2025 13:44:10 +0200 Subject: [PATCH] wip ioc stuff --- tests/test_psi_positioner_base.py | 40 ++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/tests/test_psi_positioner_base.py b/tests/test_psi_positioner_base.py index c03ad19..2a3bd2e 100644 --- a/tests/test_psi_positioner_base.py +++ b/tests/test_psi_positioner_base.py @@ -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 +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.signal import EpicsSignal 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(): class PSITestPositionerWOSignal(PSIPositionerBase): ... @@ -25,3 +59,7 @@ def test_cannot_isntantiate_without_required_signals(): dev = PSITestPositionerWithSignal("", name="") assert dev.user_setpoint.get() == 0 + + +def test_against_ioc(sim_motor): + assert 1