Skip to content

Commit

Permalink
simplify cli tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gilesknap committed May 31, 2024
1 parent 5568397 commit 7d3efce
Show file tree
Hide file tree
Showing 13 changed files with 51 additions and 91 deletions.
2 changes: 1 addition & 1 deletion docs/developer/explanations/entities.rst
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ Click the arrows to reveal the files.
<details>
<summary><a>all.ibek.ioc.yaml</a></summary>

.. include:: ../../../tests/samples/iocs/ibek-mo-ioc-01.yaml
.. include:: ../../../tests/samples/iocs/motorSim.ibek.ioc.yaml
:literal:

.. raw:: html
Expand Down
7 changes: 7 additions & 0 deletions src/ibek/args.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,13 @@ class Arg(BaseSettings):
)


class ListArg(Arg):
"""An argument with a float value"""

type: Literal["list"] = "list"
default: Optional[list] = None


class FloatArg(Arg):
"""An argument with a float value"""

Expand Down
6 changes: 3 additions & 3 deletions tests/generate_samples.sh
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,16 @@ echo making an ioc schema using ADCore and quadem support yaml
ibek ioc generate-schema --no-ibek-defs support/ADCore.ibek.support.yaml support/quadem.ibek.support.yaml --output schemas/quadem.ibek.ioc.schema.json

echo making ioc based on ibek-mo-ioc-01.yaml
EPICS_ROOT=`pwd`/epics ibek runtime generate iocs/ibek-mo-ioc-01.yaml support/asyn.ibek.support.yaml support/motorSim.ibek.support.yaml
EPICS_ROOT=`pwd`/epics ibek runtime generate iocs/motorSim.ibek.ioc.yaml support/asyn.ibek.support.yaml support/motorSim.ibek.support.yaml
mv `pwd`/epics/{runtime,opi}/* `pwd`/outputs/motorSim

echo making ioc based on utils support yaml
EPICS_ROOT=`pwd`/epics ibek runtime generate iocs/utils.ibek.ioc.yaml support/utils.ibek.support.yaml
mv `pwd`/epics/{runtime,opi}/* `pwd`/outputs/utils

echo making ioc based on ipac support yaml
EPICS_ROOT=`pwd`/epics ibek runtime generate iocs/ipac-test.yaml support/ipac.ibek.support.yaml support/epics.ibek.support.yaml
mv `pwd`/epics/{runtime,opi}/* `pwd`/outputs/ipac
EPICS_ROOT=`pwd`/epics ibek runtime generate iocs/ipac-test.ibek.ioc.yaml support/ipac.ibek.support.yaml support/epics.ibek.support.yaml
mv `pwd`/epics/{runtime,opi}/* `pwd`/outputs/ipac-test

echo making ioc based on gauges support yaml
EPICS_ROOT=`pwd`/epics ibek runtime generate iocs/gauges.ibek.ioc.yaml support/asyn.ibek.support.yaml support/gauges.ibek.support.yaml
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
4 changes: 2 additions & 2 deletions tests/samples/outputs/motorSim/index.bob
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<display version="2.0.0">
<name>ibek-mo-ioc-01</name>
<name>motorSim.ibek.ioc</name>
<x>0</x>
<y use_class="true">0</y>
<width>388</width>
Expand All @@ -9,7 +9,7 @@
<widget type="label" version="2.0.0">
<name>Title</name>
<class>TITLE</class>
<text>ibek-mo-ioc-01</text>
<text>motorSim.ibek.ioc</text>
<x use_class="true">0</x>
<y use_class="true">0</y>
<width>388</width>
Expand Down
2 changes: 1 addition & 1 deletion tests/samples/outputs/motorSim/ioc.subst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ pattern
file "basic_asyn_motor.db" {
pattern
{ "P", "M", "DTYP", "PORT", "ADDR", "DESC", "EGU", "DIR", "VELO", "VMAX", "MRES", "DHLM", "DLLM", "INIT" }
{ "IBEK-MO-TST-01:", "M0", "asynMotor", "controllerOne", "0", "Motor 0 for ioc ibek-mo-ioc-01", "degrees", "0", "10.0", "10.0", ".01", "20000", "-20000", "" }
{ "IBEK-MO-TST-01:", "M0", "asynMotor", "controllerOne", "0", "Motor 0 for ioc motorSim.ibek.ioc", "degrees", "0", "10.0", "10.0", ".01", "20000", "-20000", "" }
{ "IBEK-MO-TST-01:", "M1", "asynMotor", "controllerOne", "1", "Motor 1 {{enclosed in escaped curly braces}} ", "degrees", "0", "10.0", "10.0", ".01", "20000", "-20000", "" }
{ "IBEK-MO-TST-01:", "M2", "asynMotor", "controllerOne", "2", "Motor 2", "degrees", "0", "10.0", "10.0", ".01", "20000", "-20000", "" }
{ "IBEK-MO-TST-01:", "M3", "asynMotor", "controllerOne", "3", "Motor 3", "degrees", "0", "10.0", "10.0", ".01", "20000", "-20000", "" }
Expand Down
6 changes: 0 additions & 6 deletions tests/samples/outputs/technosoft/reference.cmd

This file was deleted.

114 changes: 36 additions & 78 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,50 +88,25 @@ def test_build_runtime_motorSim(tmp_epics_root: Path, samples: Path):
Also verifies database subst file generation for multiple
entity instantiations.
"""
ioc_yaml = samples / "iocs" / "ibek-mo-ioc-01.yaml"
support_yaml1 = samples / "support" / "asyn.ibek.support.yaml"
support_yaml2 = samples / "support" / "motorSim.ibek.support.yaml"
expected_outputs = samples / "outputs" / "motorSim"

generate(ioc_yaml, [support_yaml1, support_yaml2])

example_boot = (expected_outputs / "st.cmd").read_text()
actual_boot = (tmp_epics_root / "runtime" / "st.cmd").read_text()
assert example_boot == actual_boot

example_db = (expected_outputs / "ioc.subst").read_text()
actual_db = (tmp_epics_root / "runtime" / "ioc.subst").read_text()
assert example_db == actual_db

example_index = (expected_outputs / "index.bob").read_text()
actual_index = (tmp_epics_root / "opi" / "index.bob").read_text()
assert example_index == actual_index

example_bob = (expected_outputs / "simple.pvi.bob").read_text()
actual_bob = (tmp_epics_root / "opi" / "simple.pvi.bob").read_text()
assert example_bob == actual_bob

example_template = (expected_outputs / "simple.pvi.template").read_text()
actual_template = (tmp_epics_root / "runtime" / "simple.pvi.template").read_text()
assert example_template == actual_template
generic_generate(
tmp_epics_root,
samples,
"motorSim",
["motorSim", "asyn"],
)


def test_build_utils_features(tmp_epics_root: Path, samples: Path):
"""
build an ioc runtime script to verify utils features
"""
ioc_yaml = samples / "iocs" / "utils.ibek.ioc.yaml"
support_yaml = samples / "support" / "utils.ibek.support.yaml"

run_cli("runtime", "generate", ioc_yaml, support_yaml)

example_boot = (samples / "outputs" / "utils" / "st.cmd").read_text()
actual_boot = (tmp_epics_root / "runtime" / "st.cmd").read_text()
assert example_boot == actual_boot

example_db = (samples / "outputs" / "utils" / "ioc.subst").read_text()
actual_db = (tmp_epics_root / "runtime" / "ioc.subst").read_text()
assert example_db == actual_db
generic_generate(
tmp_epics_root,
samples,
"utils",
["utils"],
)


def test_generate_links_ibek(samples: Path, mocker: MockerFixture):
Expand All @@ -152,57 +127,41 @@ def test_ipac(tmp_epics_root: Path, samples: Path):
Tests that an id argument can include another argument in its default value
"""

ioc_yaml = samples / "iocs" / "ipac-test.yaml"
support_yaml1 = samples / "support" / "ipac.ibek.support.yaml"
support_yaml2 = samples / "support" / "epics.ibek.support.yaml"
expected_outputs = samples / "outputs" / "ipac"

# reset the InterruptVector counter to its initial state (if already used)
if "InterruptVector" in utils.UTILS.counters:
utils.UTILS.counters["InterruptVector"].current = 192

generate(ioc_yaml, [support_yaml1, support_yaml2])

example_boot = (expected_outputs / "st.cmd").read_text()
actual_boot = (tmp_epics_root / "runtime" / "st.cmd").read_text()
assert example_boot == actual_boot
generic_generate(
tmp_epics_root,
samples,
"ipac-test",
["ipac", "epics"],
)


def test_gauges(tmp_epics_root: Path, samples: Path):
"""
Tests that an id argument can include another argument in its default value
"""
ioc_yaml = samples / "iocs" / "gauges.ibek.ioc.yaml"
support_yaml1 = samples / "support" / "asyn.ibek.support.yaml"
support_yaml2 = samples / "support" / "gauges.ibek.support.yaml"
expected_outputs = samples / "outputs" / "gauges"

generate(ioc_yaml, [support_yaml1, support_yaml2])

example_boot = (expected_outputs / "st.cmd").read_text()
actual_boot = (tmp_epics_root / "runtime" / "st.cmd").read_text()
assert example_boot == actual_boot
generic_generate(
tmp_epics_root,
samples,
"gauges",
["asyn", "gauges"],
)


def test_quadem(tmp_epics_root: Path, samples: Path):
"""
Tests the use of CollectionDefinitions in an IOC instance
this example uses the tetramm beam position monitor module
"""
ioc_yaml = samples / "iocs" / "quadem.ibek.ioc.yaml"
support_yaml1 = samples / "support" / "ADCore.ibek.support.yaml"
support_yaml2 = samples / "support" / "quadem.ibek.support.yaml"
expected_outputs = samples / "outputs" / "quadem"

generate(ioc_yaml, [support_yaml1, support_yaml2])

example_boot = (expected_outputs / "st.cmd").read_text()
actual_boot = (tmp_epics_root / "runtime" / "st.cmd").read_text()
assert example_boot == actual_boot

example_db = (samples / "outputs" / "quadem" / "ioc.subst").read_text()
actual_db = (tmp_epics_root / "runtime" / "ioc.subst").read_text()
assert example_db == actual_db
generic_generate(
tmp_epics_root,
samples,
"quadem",
["ADCore", "quadem"],
)


def generic_generate(
Expand All @@ -216,13 +175,12 @@ def generic_generate(

generate(ioc_yaml, support_yamls)

example_boot = (expected_outputs / "st.cmd").read_text()
actual_boot = (epics_root / "runtime" / "st.cmd").read_text()
assert example_boot == actual_boot

example_db = (expected_outputs / "ioc.subst").read_text()
actual_db = (epics_root / "runtime" / "ioc.subst").read_text()
assert example_db == actual_db
for output in expected_outputs.glob("*"):
actual = epics_root / "runtime" / output.name
if not actual.exists():
actual = epics_root / "opi" / output.name
assert actual.exists(), "Missing output file"
assert output.read_text() == actual.read_text()


def test_andreas_motors(tmp_epics_root: Path, samples: Path):
Expand Down
1 change: 1 addition & 0 deletions tests/test_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ def test_symlink_ibek(tmp_path: Path, samples: Path):
"epics.ibek.support.yaml",
"gauges.ibek.support.yaml",
"ipac.ibek.support.yaml",
"listarg.ibek.support.yaml",
"motorSim.ibek.support.yaml",
"quadem.ibek.support.yaml",
"technosoft.ibek.support.yaml",
Expand Down

0 comments on commit 7d3efce

Please sign in to comment.