From e2e025cbbc2b3bd394188b15a26b2f690ba44367 Mon Sep 17 00:00:00 2001 From: smathis Date: Wed, 23 Jul 2025 08:21:56 +0200 Subject: [PATCH] Further changes as part of MVPwq! --- ioc/motors/masterMacs1.cmd | 4 ++-- ioc/motors/turboPmac1.cmd | 4 ++-- ioc/pystartioc.py | 13 ++++++++++--- ioc/st.cmd | 4 ++-- ioc/startioc | 2 +- tests/conftest.py | 8 ++++---- tests/sinqMotor/turboPmac/rot1/conftest.py | 2 +- 7 files changed, 22 insertions(+), 15 deletions(-) mode change 100644 => 100755 ioc/startioc diff --git a/ioc/motors/masterMacs1.cmd b/ioc/motors/masterMacs1.cmd index d02b416..ff624e8 100755 --- a/ioc/motors/masterMacs1.cmd +++ b/ioc/motors/masterMacs1.cmd @@ -3,10 +3,10 @@ epicsEnvSet("NAME","masterMacs1") epicsEnvSet("ASYN_PORT","p$(NAME)") -drvAsynIPPortConfigure("$(ASYN_PORT)","$(ASYN_PORT)","$(MASTERMACS1_IP):$(MASTERMACS1_PORT)") +drvAsynIPPortConfigure("$(ASYN_PORT)","$(MASTERMACS1_IP):$(MASTERMACS1_PORT)") masterMacsController("$(NAME)","$(ASYN_PORT)",8,0.05,0.05,0.3); masterMacsAxis("$(NAME)",1); # masterMacsAxis("$(NAME)",2); epicsEnvSet("SINQDBPATH","$(masterMacs_DB)/sinqMotor.db") -dbLoadTemplate("$(IOCDIR)/motors/$(NAME).substitutions", "INSTR=$(PVPREFIX)$(NAME):,CONTROLLER=$(NAME)") +dbLoadTemplate("$(IOCDIR)/motors/$(NAME).substitutions", "INSTR=$(PVPREFIX):$(NAME):,CONTROLLER=$(NAME)") diff --git a/ioc/motors/turboPmac1.cmd b/ioc/motors/turboPmac1.cmd index 83b9a46..dd7f99b 100755 --- a/ioc/motors/turboPmac1.cmd +++ b/ioc/motors/turboPmac1.cmd @@ -39,6 +39,6 @@ setMaxSubsequentTimeouts("$(NAME)", 20); setThresholdComTimeout("$(NAME)", 100, 1); epicsEnvSet("SINQDBPATH","$(turboPmac_DB)/sinqMotor.db") -dbLoadTemplate("$(IOCDIR)/motors/$(NAME).substitutions", "INSTR=$(PVPREFIX)$(NAME):,CONTROLLER=$(NAME)") +dbLoadTemplate("$(IOCDIR)/motors/$(NAME).substitutions", "INSTR=$(PVPREFIX):$(NAME):,CONTROLLER=$(NAME)") epicsEnvSet("SINQDBPATH","$(turboPmac_DB)/turboPmac.db") -dbLoadTemplate("$(IOCDIR)/motors/$(NAME).substitutions", "INSTR=$(PVPREFIX)$(NAME):,CONTROLLER=$(NAME)") +dbLoadTemplate("$(IOCDIR)/motors/$(NAME).substitutions", "INSTR=$(PVPREFIX):$(NAME):,CONTROLLER=$(NAME)") diff --git a/ioc/pystartioc.py b/ioc/pystartioc.py index 74c08d9..d20923e 100755 --- a/ioc/pystartioc.py +++ b/ioc/pystartioc.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + # This script is used to start the test IOC and is usually run as part of a # test startup procedure. It autogenerates an IOC shell script from motors.yaml # which contains the IP adresses and ports of the motor controllers. @@ -18,7 +20,7 @@ def startioc(): # General configuration out.write( - f'epicsEnvSet("PVPREFIX"," {config["pvprefix"]})\n') + f'epicsEnvSet("PVPREFIX", "{config["pvprefix"]}")\n') out.write( f'epicsEnvSet("IOCDIR", "{root_dir + "ioc"}" )\n') @@ -36,9 +38,14 @@ def startioc(): out.write( f'epicsEnvSet("MASTERMACS1_PORT", "{config["controllers"]["masterMacs1"]["port"]}")\n') - # Start the IOC itself - subprocess.run(root_dir + 'ioc/startioc') + # Start the IOC itself and keep it running in the background. + # We need to start a new session so Pytest doesn't kill the process + proc = subprocess.Popen([root_dir + 'ioc/startioc'], start_new_session=True) + print(f"Started IOC with PID {proc.pid}") + + # Yield control back to the test + # yield if __name__ == '__main__': startioc() diff --git a/ioc/st.cmd b/ioc/st.cmd index e696ad7..7cd36c8 100755 --- a/ioc/st.cmd +++ b/ioc/st.cmd @@ -11,9 +11,9 @@ require masterMacs, $(MASTERMACS_VERSION) # Initialize the motors itself < motors/turboPmac1.cmd -< motors/masterMacs1.cmd +#< motors/masterMacs1.cmd # Create the test record which is used to detect if the IOC is running -dbLoadRecords("$(IOCDIR)/db/ready.db", "P=$(PVPREFIX)") +dbLoadRecords("$(IOCDIR)/db/ready.db", "PVPREFIX=$(PVPREFIX)") iocInit() diff --git a/ioc/startioc b/ioc/startioc old mode 100644 new mode 100755 index 6b8e47a..814fa6d --- a/ioc/startioc +++ b/ioc/startioc @@ -9,4 +9,4 @@ SCRIPT_DIR=$(dirname "$(realpath "$0")") cd "$SCRIPT_DIR" || exit 1 # Run the IOC shell script -st.cmd \ No newline at end of file +st.cmd diff --git a/tests/conftest.py b/tests/conftest.py index b0de487..ca0b9fd 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,13 +1,13 @@ import time from caproto.sync.client import read, write -from ioc.startioc import startioc +from ioc.pystartioc import startioc import pytest from common import read_config -TIMEOUT_IOC_STARTUP = 30 -TIMEOUT_READ = 3.0 +TIMEOUT_IOC_STARTUP = 10 +TIMEOUT_READ = 2 @pytest.fixture(autouse=True) @@ -32,7 +32,7 @@ def prepare_ioc(): # Check periodically if the IOC started successfully now = time.time() - while now + TIMEOUT_IOC_STARTUP < time.time(): + while now + TIMEOUT_IOC_STARTUP > time.time(): try: read(f'{pvprefix}:IOCREADY', timeout=TIMEOUT_READ) return diff --git a/tests/sinqMotor/turboPmac/rot1/conftest.py b/tests/sinqMotor/turboPmac/rot1/conftest.py index 75299de..eaaba85 100644 --- a/tests/sinqMotor/turboPmac/rot1/conftest.py +++ b/tests/sinqMotor/turboPmac/rot1/conftest.py @@ -9,7 +9,7 @@ def motor(): config = read_config() return TurboPMAC(config['controllers']['turboPmac1']['ip'], config['controllers']['turboPmac1']['port'], - config['pvprefix'] + 'turboPmac1:rot1') + config['pvprefix'] + ':turboPmac1:rot1') def reset(motor):