45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
import time
|
|
|
|
from caproto.sync.client import read, write
|
|
from ioc.pystartioc import startioc
|
|
import pytest
|
|
|
|
from common import read_config
|
|
|
|
TIMEOUT_IOC_STARTUP = 10
|
|
TIMEOUT_READ = 2
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def prepare_ioc():
|
|
|
|
config = read_config()
|
|
pvprefix = config['pvprefix']
|
|
|
|
"""
|
|
This function checks if the test IOC is already running and attempts to
|
|
start it, if that is not the case.
|
|
"""
|
|
try:
|
|
read(f'{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'{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.')
|