37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
from caproto.sync.client import read, write
|
|
from ioc.startioc import startioc
|
|
import pytest
|
|
|
|
TIMEOUT_IOC_STARTUP = 30
|
|
TIMEOUT_READ = 3.0
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def prepare_ioc():
|
|
"""
|
|
This function checks if the test IOC is already running and attempts to
|
|
start it, if that is not the case.
|
|
"""
|
|
try:
|
|
read('MOTORDRIVERTESTS: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 every few seconds if the IOC started successfully
|
|
now = time.time()
|
|
while now + TIMEOUT_IOC_STARTUP < time.time():
|
|
try:
|
|
read('MOTORDRIVERTESTS: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.')
|