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.')