From 43697c8953bbf3ad6e0c7d392bb0a4d8c2baa55e Mon Sep 17 00:00:00 2001 From: Hugo Jean Ponsin Date: Tue, 5 May 2026 08:12:48 +0200 Subject: [PATCH] adding test + install script + cleanup --- .gitignore | 5 +++++ db/feedback_records.db | 8 ++++---- db/socket_record.db | 10 +++++----- db/template4.substitutions | 18 +++++++++--------- db/template8.substitutions | 26 +++++++++++++------------- maketestenv.sh | 9 +++++++++ st.cmd | 10 +++++----- tests/test_main8.py | 20 ++++++++++++++++++++ 8 files changed, 70 insertions(+), 36 deletions(-) create mode 100644 .gitignore create mode 100755 maketestenv.sh create mode 100644 tests/test_main8.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d5abac8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +O.* +.cvsignore +testenv/ +__pycache__ +.pytest_cache \ No newline at end of file diff --git a/db/feedback_records.db b/db/feedback_records.db index 38759f1..55d980e 100644 --- a/db/feedback_records.db +++ b/db/feedback_records.db @@ -1,12 +1,12 @@ -record(longout, "$(DEVICE)_config_$(CONFIG_PARAMETER_NAME)") { +record(longout, "$(DEVICE_NAME)_config_$(CONFIG_PARAMETER_NAME)") { field(VAL, "$(OUTLET_NUMBER)") } -record(scalcout, "$(DEVICE)_outlet_getter") { +record(scalcout, "$(DEVICE_NAME)_outlet_getter") { field(DTYP, "stream") field(SCAN, "1 second") field(CALC, "0") - field(OUT, "@$(PROTO) get$(OUTLET_NUMBER)() $(PORT)") - field(FLNK, "$(DEVICE)_get_outlet_0") + field(OUT, "@$(DB)command.proto get$(OUTLET_NUMBER)() $(PORT)") + field(FLNK, "$(DEVICE_NAME)_get_outlet_0") } diff --git a/db/socket_record.db b/db/socket_record.db index abf0785..aa7bdf6 100644 --- a/db/socket_record.db +++ b/db/socket_record.db @@ -1,13 +1,13 @@ -record(stringout, "$(DEVICE)_set_$(PARAMETER_NAME)_$(PARAMETER_ID)") { +record(stringout, "$(DEVICE_NAME)_set_$(PARAMETER_NAME)_$(PARAMETER_ID)") { field(DTYP, "stream") field(VAL, "Off") field(PINI, "YES") - field(OUT, "@$(PROTO) set($(PARAMETER_ID)) $(PORT)") + field(OUT, "@$(DB)command.proto set($(PARAMETER_ID)) $(PORT)") } -record(stringin, "$(DEVICE)_get_$(PARAMETER_NAME)_$(PARAMETER_ID)") { - field(INP, "$(DEVICE)_outlet_getter.$(SCALCOUT_FIELD_INPUT) NPP MS") - field(FLNK, "$(DEVICE)_get_$(PARAMETER_NAME)_$(FORWARDED_ID)") +record(stringin, "$(DEVICE_NAME)_get_$(PARAMETER_NAME)_$(PARAMETER_ID)") { + field(INP, "$(DEVICE_NAME)_outlet_getter.$(SCALCOUT_FIELD_INPUT) NPP MS") + field(FLNK, "$(DEVICE_NAME)_get_$(PARAMETER_NAME)_$(FORWARDED_ID)") } diff --git a/db/template4.substitutions b/db/template4.substitutions index a756269..25839a8 100644 --- a/db/template4.substitutions +++ b/db/template4.substitutions @@ -1,16 +1,16 @@ -file db/socket_record.db +file socket_record.db { pattern - { DEVICE, PARAMETER_NAME, PARAMETER_ID, SCALCOUT_FIELD_INPUT, FORWARDED_ID} - { "$(DEVICE_NAME)", "outlet", 0, "AA", 1} - { "$(DEVICE_NAME)", "outlet", 1, "BB", 2} - { "$(DEVICE_NAME)", "outlet", 2, "CC", 3} - { "$(DEVICE_NAME)", "outlet", 3, "DD", 3} + { PARAMETER_NAME, PARAMETER_ID, SCALCOUT_FIELD_INPUT, FORWARDED_ID} + { "outlet", 0, "AA", 1} + { "outlet", 1, "BB", 2} + { "outlet", 2, "CC", 3} + { "outlet", 3, "DD", 3} } -file db/feedback_records.db +file feedback_records.db { pattern - { DEVICE, CONFIG_PARAMETER_NAME, OUTLET_NUMBER, GETTER_OUTPUT_PARAMETER_NAME} - { "$(DEVICE_NAME)", "maxOutlet", 4, "outlet"} + { CONFIG_PARAMETER_NAME, OUTLET_NUMBER, GETTER_OUTPUT_PARAMETER_NAME} + { "maxOutlet", 4, "outlet"} } \ No newline at end of file diff --git a/db/template8.substitutions b/db/template8.substitutions index 13c4b32..0fca9a4 100644 --- a/db/template8.substitutions +++ b/db/template8.substitutions @@ -1,20 +1,20 @@ -file db/socket_record.db +file socket_record.db { pattern - { DEVICE, PARAMETER_NAME, PARAMETER_ID, SCALCOUT_FIELD_INPUT, FORWARDED_ID} - { "$(DEVICE_NAME)", "outlet", 0, "AA", 1} - { "$(DEVICE_NAME)", "outlet", 1, "BB", 2} - { "$(DEVICE_NAME)", "outlet", 2, "CC", 3} - { "$(DEVICE_NAME)", "outlet", 3, "DD", 4} - { "$(DEVICE_NAME)", "outlet", 4, "EE", 5} - { "$(DEVICE_NAME)", "outlet", 5, "FF", 6} - { "$(DEVICE_NAME)", "outlet", 6, "GG", 7} - { "$(DEVICE_NAME)", "outlet", 7, "HH", 7} + { PARAMETER_NAME, PARAMETER_ID, SCALCOUT_FIELD_INPUT, FORWARDED_ID} + { "outlet", 0, "AA", 1} + { "outlet", 1, "BB", 2} + { "outlet", 2, "CC", 3} + { "outlet", 3, "DD", 4} + { "outlet", 4, "EE", 5} + { "outlet", 5, "FF", 6} + { "outlet", 6, "GG", 7} + { "outlet", 7, "HH", 7} } -file db/feedback_records.db +file feedback_records.db { pattern - {DEVICE, CONFIG_PARAMETER_NAME, OUTLET_NUMBER, GETTER_OUTPUT_PARAMETER_NAME} - { "$(DEVICE_NAME)", "maxOutlet", 8, "outlet"} + {CONFIG_PARAMETER_NAME, OUTLET_NUMBER, GETTER_OUTPUT_PARAMETER_NAME} + {"maxOutlet", 8, "outlet"} } \ No newline at end of file diff --git a/maketestenv.sh b/maketestenv.sh new file mode 100755 index 0000000..a04c176 --- /dev/null +++ b/maketestenv.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +/usr/bin/python3.11 -m venv "testenv" +source testenv/bin/activate + +pip install 'caproto' +pip install 'pytest' +pip install 'pyyaml' +pip install 'numpy' \ No newline at end of file diff --git a/st.cmd b/st.cmd index 35c6255..a511b66 100644 --- a/st.cmd +++ b/st.cmd @@ -1,12 +1,12 @@ -require stream +require ePowerSwitch,ponsin_h -epicsEnvSet("ASYN_PORT","myDriverPort") +epicsEnvSet("ASYN_PORT", "myDriverPort") +epicsEnvSet("EPOWERSWITCH_SOCKET_NUMBER", 8) +epicsEnvSet("DB", "$(ePowerSwitch_DB)") # I use HTTP to use TCP and disconnect after, but no disconnection is done, so I disconnect manually. drvAsynIPPortConfigure("$(ASYN_PORT)","127.0.0.1:55555 http", 0, 0, 0) -dbLoadTemplate("db/template$(EPOWERSWITCH_SOCKET_NUMBER).substitutions", "PORT=$(ASYN_PORT), DEVICE_NAME=ePowerSwitch, PROTO=db/command.proto") - +dbLoadTemplate("$(DB)template$(EPOWERSWITCH_SOCKET_NUMBER).substitutions", "PORT=$(ASYN_PORT), DEVICE_NAME=ePowerSwitch, DB=$(DB)") iocInit() - diff --git a/tests/test_main8.py b/tests/test_main8.py new file mode 100644 index 0000000..aff49f8 --- /dev/null +++ b/tests/test_main8.py @@ -0,0 +1,20 @@ +from caproto.threading.client import Context + + +def test_main(): + assert(0 == 1) + +class CaprotoWrapper: + def __init__(self, timeout = 3.0): + self._pvs = {} + self._ctx = Context() + + def connect_pv(self, pvname): + if pvname in self._pvs: + return + pv = self._ctx.get_pvs(pvname) + self._pvs[pvname] = pv + + def get_pv_value(self, pvname): + self.connect_pv(pvname) + pv = self._pvs[pvname]