44 lines
1.2 KiB
Python
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.')
|