Skip to content

Commit

Permalink
ioc/tests/pvxs: test PVXS' QSRV2
Browse files Browse the repository at this point in the history
  • Loading branch information
minijackson committed Feb 2, 2024
1 parent 34e54df commit f7ae41f
Show file tree
Hide file tree
Showing 21 changed files with 465 additions and 0 deletions.
1 change: 1 addition & 0 deletions ioc/tests/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ with pkgs.lib;

support-autosave-simple = import ./support/autosave/simple args;
support-pvxs-ioc = import ./support/pvxs/ioc args;
support-pvxs-qsrv2 = import ./support/pvxs/qsrv2 args;
support-pvxs-standalone-server = import ./support/pvxs/standalone-server args;
support-seq-simple = import ./support/seq/simple args;
support-StreamDevice-simple = import ./support/StreamDevice/simple args;
Expand Down
100 changes: 100 additions & 0 deletions ioc/tests/support/pvxs/qsrv2/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
{pkgs, ...}: let
inherit (pkgs) epnixLib;
inherit (pkgs.stdenv.hostPlatform) system;

result = epnixLib.evalEpnixModules {
nixpkgsConfig.system = system;
epnixConfig.imports = [./pvxsQsrv2TestTop/epnix.nix];
};

service = result.config.epnix.nixos.services.ioc.config;

ioc = result.outputs.build;
in
pkgs.nixosTest {
name = "support-pvxs-standalone-server";
meta.maintainers = with epnixLib.maintainers; [minijackson];

nodes = {
client = {
environment.systemPackages = [
pkgs.epnix.epics-base
pkgs.epnix.support.pvxs
];
networking.firewall.allowedTCPPorts = [5075];
networking.firewall.allowedUDPPorts = [5076];
};
ioc = {
systemd.services.ioc = service;
networking.firewall.allowedTCPPorts = [5075];
networking.firewall.allowedUDPPorts = [5076];
};
};

testScript = ''
import json
start_all()
addr_list = "EPICS_PVA_ADDR_LIST=192.168.1.2"
p = "PVXS:QSRV2:"
def pvget(name: str):
return json.loads(client.succeed(f"{addr_list} pvget {name} -M json | cut -d' ' -f2-"))
def pvxget(name: str):
output = client.succeed(f"{addr_list} pvxget {name}")
return output.splitlines()[1].split()[-1]
def _pvput(utility: str, name: str, value: str):
client.succeed(f"{addr_list} {utility} {name} {value}")
def pvput(name: str, value: str):
_pvput("pvput", name, value)
def pvxput(name: str, value: str):
_pvput("pvxput", name, value)
with subtest("wait until IOC starts"):
ioc.wait_for_unit("ioc.service")
client.wait_until_succeeds(f"{addr_list} pvget {p}ai", timeout=60)
with subtest("Check initial data"):
# JSON seems broken here?
#value = pvget(f"{p}ai")
#assert value["value"] == 42
#assert value["display"]["description"] == "An ai"
value = pvget(f"{p}stringin")
assert value["value"] == "hello"
assert value["display"]["description"] == "An stringin"
value = pvget(f"{p}waveform")
assert value["value"] == ""
assert value["display"]["description"] == "An waveform"
with subtest("PVs can be set"):
#pvput(f"{p}ai", "1337")
#assert pvget("{p}ai")["value"] == 1337
pvput(f"{p}stringin", "world")
assert pvget(f"{p}stringin")["value"] == "world"
pvput(f"{p}waveform", '"some long text"')
assert pvget(f"{p}waveform")["value"] == "some long text"
with subtest("PVXS command-line utilities work"):
# assert pvxget(f"{p}ai") == "1337"
assert pvxget(f"{p}ai") == "42"
pvxput(f"{p}ai", "153")
assert pvxget(f"{p}ai") == "153"
pvxput(f"{p}waveform", "something")
assert pvxget(f"{p}waveform") == '"something"'
print(client.succeed(f"{addr_list} pvxinfo {p}waveform"))
'';

passthru = {
inherit ioc;
};
}
29 changes: 29 additions & 0 deletions ioc/tests/support/pvxs/qsrv2/pvxsQsrv2TestTop/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Install directories
/bin/
/cfg/
/db/
/dbd/
/html/
/include/
/lib/
/templates/

# Local configuration files
/configure/*.local

# iocBoot generated files
/iocBoot/*ioc*/cdCommands
/iocBoot/*ioc*/dllPath.bat
/iocBoot/*ioc*/envPaths
/iocBoot/*ioc*/relPaths.sh

# Build directories
O.*/

# Common files created by other tools
/QtC-*
/.vscode/
*.orig
*.log
.*.swp
.DS_Store
31 changes: 31 additions & 0 deletions ioc/tests/support/pvxs/qsrv2/pvxsQsrv2TestTop/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Makefile at top of application tree
TOP = .
include $(TOP)/configure/CONFIG

# Directories to build, any order
DIRS += configure
DIRS += $(wildcard *Sup)
DIRS += $(wildcard *App)
DIRS += $(wildcard *Top)
DIRS += $(wildcard iocBoot)

# The build order is controlled by these dependency rules:

# All dirs except configure depend on configure
$(foreach dir, $(filter-out configure, $(DIRS)), \
$(eval $(dir)_DEPEND_DIRS += configure))

# Any *App dirs depend on all *Sup dirs
$(foreach dir, $(filter %App, $(DIRS)), \
$(eval $(dir)_DEPEND_DIRS += $(filter %Sup, $(DIRS))))

# Any *Top dirs depend on all *Sup and *App dirs
$(foreach dir, $(filter %Top, $(DIRS)), \
$(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS))))

# iocBoot depends on all *App dirs
iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS))

# Add any additional dependency rules here:

include $(TOP)/configure/RULES_TOP
45 changes: 45 additions & 0 deletions ioc/tests/support/pvxs/qsrv2/pvxsQsrv2TestTop/configure/CONFIG
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# CONFIG - Load build configuration data
#
# Do not make changes to this file!

# Allow user to override where the build rules come from
RULES = $(EPICS_BASE)

# RELEASE files point to other application tops
include $(TOP)/configure/RELEASE
-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common

ifdef T_A
-include $(TOP)/configure/RELEASE.Common.$(T_A)
-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A)
endif

# Check EPICS_BASE is set properly
ifneq (file,$(origin EPICS_BASE))
$(error EPICS_BASE must be set in a configure/RELEASE file)
else
ifeq ($(wildcard $(EPICS_BASE)/configure/CONFIG_BASE),)
$(error EPICS_BASE does not point to an EPICS installation)
endif
endif

CONFIG = $(RULES)/configure
include $(CONFIG)/CONFIG

# Override the Base definition:
INSTALL_LOCATION = $(TOP)

# CONFIG_SITE files contain local build configuration settings
include $(TOP)/configure/CONFIG_SITE

# Host-arch specific settings
-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common

ifdef T_A
# Target-arch specific settings
-include $(TOP)/configure/CONFIG_SITE.Common.$(T_A)

# Host & target specific settings
-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)
endif

Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# CONFIG_SITE

# Make any application-specific changes to the EPICS build
# configuration variables in this file.
#
# Host/target specific settings can be specified in files named
# CONFIG_SITE.$(EPICS_HOST_ARCH).Common
# CONFIG_SITE.Common.$(T_A)
# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A)

# CHECK_RELEASE controls the consistency checking of the support
# applications pointed to by the RELEASE* files.
# Normally CHECK_RELEASE should be set to YES.
# Set CHECK_RELEASE to NO to disable checking completely.
# Set CHECK_RELEASE to WARN to perform consistency checking but
# continue building even if conflicts are found.
CHECK_RELEASE = YES

# Set this when you only want to compile this application
# for a subset of the cross-compiled target architectures
# that Base is built for.
#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32

# To install files into a location other than $(TOP) define
# INSTALL_LOCATION here.
#INSTALL_LOCATION=</absolute/path/to/install/top>

# Set this when the IOC and build host use different paths
# to the install location. This may be needed to boot from
# a Microsoft FTP server say, or on some NFS configurations.
#IOCS_APPL_TOP = </IOC's/absolute/path/to/install/top>

# For application debugging purposes, override the HOST_OPT and/
# or CROSS_OPT settings from base/configure/CONFIG_SITE
#HOST_OPT = NO
#CROSS_OPT = NO

# These allow developers to override the CONFIG_SITE variable
# settings without having to modify the configure/CONFIG_SITE
# file itself.
-include $(TOP)/../CONFIG_SITE.local
-include $(TOP)/configure/CONFIG_SITE.local

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
TOP=..

include $(TOP)/configure/CONFIG

TARGETS = $(CONFIG_TARGETS)
CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS)))

include $(TOP)/configure/RULES
42 changes: 42 additions & 0 deletions ioc/tests/support/pvxs/qsrv2/pvxsQsrv2TestTop/configure/RELEASE
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# RELEASE - Location of external support modules
#
# IF YOU CHANGE ANY PATHS in this file or make API changes to
# any modules it refers to, you should do a "make rebuild" in
# this application's top level directory.
#
# The EPICS build process does not check dependencies against
# any files from outside the application, so it is safest to
# rebuild it completely if any modules it depends on change.
#
# Host- or target-specific settings can be given in files named
# RELEASE.$(EPICS_HOST_ARCH).Common
# RELEASE.Common.$(T_A)
# RELEASE.$(EPICS_HOST_ARCH).$(T_A)
#
# This file is parsed by both GNUmake and an EPICS Perl script,
# so it may ONLY contain definititions of paths to other support
# modules, variable definitions that are used in module paths,
# and include statements that pull in other RELEASE files.
# Variables may be used before their values have been set.
# Build variables that are NOT used in paths should be set in
# the CONFIG_SITE file.

# Variables and paths to dependent modules:
#MODULES = /path/to/modules
#MYMODULE = $(MODULES)/my-module

# If using the sequencer, point SNCSEQ at its top directory:
#SNCSEQ = $(MODULES)/seq-ver

# EPICS_BASE should appear last so earlier modules can override stuff:
EPICS_BASE = /nix/store/07lczf4kwn5mpnyp9rnn3hn6qfghykxm-epics-base-7.0.7

# Set RULES here if you want to use build rules from somewhere
# other than EPICS_BASE:
#RULES = $(MODULES)/build-rules

# These lines allow developers to override these RELEASE settings
# without having to modify this file directly.
-include $(TOP)/../RELEASE.local
-include $(TOP)/../RELEASE.$(EPICS_HOST_ARCH).local
-include $(TOP)/configure/RELEASE.local
6 changes: 6 additions & 0 deletions ioc/tests/support/pvxs/qsrv2/pvxsQsrv2TestTop/configure/RULES
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# RULES

include $(CONFIG)/RULES

# Library should be rebuilt because LIBOBJS may have changed.
$(LIBNAME): ../Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#RULES.ioc
include $(CONFIG)/RULES.ioc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#RULES_DIRS
include $(CONFIG)/RULES_DIRS
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#RULES_TOP
include $(CONFIG)/RULES_TOP

13 changes: 13 additions & 0 deletions ioc/tests/support/pvxs/qsrv2/pvxsQsrv2TestTop/epnix.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{pkgs, ...}: {
epnix = {
meta.name = "checks-support-pvxs-qsrv2";
buildConfig.src = ./.;

support.modules = with pkgs.epnix.support; [pvxs];

nixos.services.ioc = {
app = "simple";
ioc = "iocSimple";
};
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
TOP = ..
include $(TOP)/configure/CONFIG
DIRS += $(wildcard *ioc*)
DIRS += $(wildcard as*)
include $(CONFIG)/RULES_DIRS

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
TOP = ../..
include $(TOP)/configure/CONFIG
ARCH = $(EPICS_HOST_ARCH)
TARGETS = envPaths
include $(TOP)/configure/RULES.ioc
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!../../bin/linux-x86_64/simple

#- You may have to change simple to something else
#- everywhere it appears in this file

< envPaths

## Register all support components
dbLoadDatabase "../../dbd/simple.dbd"
simple_registerRecordDeviceDriver(pdbbase)

## Load record instances
dbLoadRecords("${TOP}/db/simple.db", "P=PVXS:QSRV2:")

iocInit()

## Start any sequence programs
#seq sncsimple,"user=minijackson"
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
TOP=../..
include $(TOP)/configure/CONFIG
#----------------------------------------
# ADD MACRO DEFINITIONS AFTER THIS LINE

#----------------------------------------------------
# Create and install (or just install) into <top>/db
# databases, templates, substitutions like this
DB += simple.db

#----------------------------------------------------
# If <anyname>.db template is not named <anyname>*.template add
# <anyname>_template = <templatename>

include $(TOP)/configure/RULES
#----------------------------------------
# ADD RULES AFTER THIS LINE

Loading

0 comments on commit f7ae41f

Please sign in to comment.