Files
motorDriverTests/tests/conftest.py
2025-07-22 14:05:31 +02:00

44 lines
1.2 KiB
Python

import time
from caproto.sync.client import read, write
from ioc.startioc import startioc
import pytest
from common import read_config
TIMEOUT_IOC_STARTUP = 30
TIMEOUT_READ = 3.0
@pytest.fixture(autouse=True)
def prepare_ioc():
config = read_config()
"""
This function checks if the test IOC is already running and attempts to
start it, if that is not the case.
"""
try:
read(f'{config['pvprefix']}:IOCREADY', timeout=TIMEOUT_READ)
# Reading the check recird was successfull -> We assume that the IOC
# is running
return
except TimeoutError:
# Received a timeout error -> Start the IOC
startioc()
# Check periodically if the IOC started successfully
now = time.time()
while now + TIMEOUT_IOC_STARTUP < time.time():
try:
read(f'{config['pvprefix']}:IOCREADY', timeout=TIMEOUT_READ)
return
except TimeoutError:
time.sleep(0.5)
# IOC startup failed in the given time -> Raise an error
raise TimeoutError(
f'Starting the IOC within {TIMEOUT_IOC_STARTUP} seconds failed.')