Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unit tests #295

Merged
merged 7 commits into from
Nov 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions config/test.json

This file was deleted.

193 changes: 193 additions & 0 deletions config/tests/issue309.data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
<?xml version="1.0" encoding="ASCII"?>

<!-- oks-data version 2.2 -->


<!DOCTYPE oks-data [
<!ELEMENT oks-data (info, (include)?, (comments)?, (obj)+)>
<!ELEMENT info EMPTY>
<!ATTLIST info
name CDATA #IMPLIED
type CDATA #IMPLIED
num-of-items CDATA #REQUIRED
oks-format CDATA #FIXED "data"
oks-version CDATA #REQUIRED
created-by CDATA #IMPLIED
created-on CDATA #IMPLIED
creation-time CDATA #IMPLIED
last-modified-by CDATA #IMPLIED
last-modified-on CDATA #IMPLIED
last-modification-time CDATA #IMPLIED
>
<!ELEMENT include (file)*>
<!ELEMENT file EMPTY>
<!ATTLIST file
path CDATA #REQUIRED
>
<!ELEMENT comments (comment)*>
<!ELEMENT comment EMPTY>
<!ATTLIST comment
creation-time CDATA #REQUIRED
created-by CDATA #REQUIRED
created-on CDATA #REQUIRED
author CDATA #REQUIRED
text CDATA #REQUIRED
>
<!ELEMENT obj (attr | rel)*>
<!ATTLIST obj
class CDATA #REQUIRED
id CDATA #REQUIRED
>
<!ELEMENT attr (data)*>
<!ATTLIST attr
name CDATA #REQUIRED
type (bool|s8|u8|s16|u16|s32|u32|s64|u64|float|double|date|time|string|uid|enum|class|-) "-"
val CDATA ""
>
<!ELEMENT data EMPTY>
<!ATTLIST data
val CDATA #REQUIRED
>
<!ELEMENT rel (ref)*>
<!ATTLIST rel
name CDATA #REQUIRED
class CDATA ""
id CDATA ""
>
<!ELEMENT ref EMPTY>
<!ATTLIST ref
class CDATA #REQUIRED
id CDATA #REQUIRED
>
]>

<oks-data>

<info name="" type="" num-of-items="6" oks-format="data" oks-version="862f2957270" created-by="gjc" created-on="thinkpad" creation-time="20231207T105549" last-modified-by="eflumerf" last-modified-on="ironvirt9.IRONDOMAIN.local" last-modification-time="20241022T175827"/>

<include>
<file path="schema/confmodel/dunedaq.schema.xml"/>
<file path="config/daqsystemtest/ccm.data.xml"/>
<file path="config/daqsystemtest/hosts.data.xml"/>
</include>

<comments>
<comment creation-time="20240826T084126" created-by="maroda" created-on="np04-srv-015.cern.ch" author="maroda" text="Correct cern stream"/>
<comment creation-time="20240909T081245" created-by="glehmann" created-on="np04-srv-024.cern.ch" author="glehmann" text=" "/>
<comment creation-time="20240909T082108" created-by="glehmann" created-on="np04-srv-024.cern.ch" author="glehmann" text=" "/>
<comment creation-time="20240918T124331" created-by="maroda" created-on="np04-srv-015.cern.ch" author="maroda" text="change local session opmon URI"/>
</comments>

<obj class="Service" id="controller-0_control">
<attr name="protocol" type="string" val="grpc"/>
<attr name="port" type="u16" val="0"/>
</obj>

<obj class="Service" id="controller-1_control">
<attr name="protocol" type="string" val="grpc"/>
<attr name="port" type="u16" val="0"/>
</obj>

<obj class="Service" id="controller-2_control">
<attr name="protocol" type="string" val="grpc"/>
<attr name="port" type="u16" val="0"/>
</obj>
<obj class="Service" id="controller-3_control">
<attr name="protocol" type="string" val="grpc"/>
<attr name="port" type="u16" val="0"/>
</obj>

<obj class="RCApplication" id="controller-0">
<attr name="application_name" type="string" val="drunc-controller"/>
<rel name="runs_on" class="VirtualHost" id="vlocalhost"/>
<rel name="exposes_service">
<ref class="Service" id="controller-0_control"/>
</rel>
<rel name="opmon_conf" class="OpMonConf" id="slow-all-monitoring"/>
<rel name="fsm" class="FSMconfiguration" id="fsmConf-test"/>
</obj>

<obj class="RCApplication" id="controller-1">
<attr name="application_name" type="string" val="drunc-controller"/>
<rel name="runs_on" class="VirtualHost" id="vlocalhost"/>
<rel name="exposes_service">
<ref class="Service" id="controller-1_control"/>
</rel>
<rel name="opmon_conf" class="OpMonConf" id="slow-all-monitoring"/>
<rel name="fsm" class="FSMconfiguration" id="FSMconfiguration_noAction"/>
</obj>

<obj class="RCApplication" id="controller-2">
<attr name="application_name" type="string" val="drunc-controller"/>
<rel name="runs_on" class="VirtualHost" id="vlocalhost"/>
<rel name="exposes_service">
<ref class="Service" id="controller-2_control"/>
</rel>
<rel name="opmon_conf" class="OpMonConf" id="slow-all-monitoring"/>
<rel name="fsm" class="FSMconfiguration" id="FSMconfiguration_noAction"/>
</obj>

<obj class="RCApplication" id="controller-3">
<attr name="application_name" type="string" val="drunc-controller"/>
<rel name="runs_on" class="VirtualHost" id="vlocalhost"/>
<rel name="exposes_service">
<ref class="Service" id="controller-3_control"/>
</rel>
<rel name="opmon_conf" class="OpMonConf" id="slow-all-monitoring"/>
<rel name="fsm" class="FSMconfiguration" id="FSMconfiguration_noAction"/>
</obj>

<obj class="DetectorConfig" id="dummy-detector">
<attr name="tpg_channel_map" type="string" val="PD2HDChannelMap"/>
<attr name="clock_speed_hz" type="u32" val="62500000"/>
<attr name="op_env" type="string" val="test"/>
<attr name="offline_data_stream" type="string" val="cosmics"/>
</obj>

<obj class="Segment" id="segment-0">
<rel name="segments">
<ref class="Segment" id="segment-1"/>
</rel>
<rel name="controller" class="RCApplication" id="controller-0"/>
</obj>

<obj class="Segment" id="segment-1">
<rel name="segments">
<ref class="Segment" id="segment-2"/>
</rel>
<rel name="controller" class="RCApplication" id="controller-1"/>
</obj>

<obj class="Segment" id="segment-2">
<rel name="segments">
<ref class="Segment" id="segment-3"/>
</rel>
<rel name="controller" class="RCApplication" id="controller-2"/>
</obj>

<obj class="Segment" id="segment-3">
<rel name="controller" class="RCApplication" id="controller-3"/>
</obj>

<obj class="Session" id="deep-segments-config">
<attr name="data_request_timeout_ms" type="u32" val="1000"/>
<attr name="data_rate_slowdown_factor" type="u32" val="1"/>
<attr name="controller_log_level" type="enum" val="INFO"/>
<rel name="connectivity_service" class="ConnectivityService" id="local-connectivity-service-config"/>
<rel name="environment">
<ref class="Variable" id="local-env-ers-verb"/>
<ref class="Variable" id="local-env-ers-info"/>
<ref class="Variable" id="local-env-ers-warning"/>
<ref class="Variable" id="local-env-ers-error"/>
<ref class="Variable" id="local-env-ers-fatal"/>
</rel>
<rel name="segment" class="Segment" id="segment-0"/>
<rel name="infrastructure_applications">
<ref class="ConnectionService" id="local-connection-server"/>
</rel>
<rel name="detector_configuration" class="DetectorConfig" id="dummy-detector"/>
<rel name="opmon_uri" class="OpMonURI" id="local-opmon-uri"/>
</obj>


</oks-data>
8 changes: 8 additions & 0 deletions docs/FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,13 @@ This will tell you which server you cannot `ssh` to.
## What SSH commands are actually run?
The simplest to know how the processes are started is to add the option `--log-level debug` for the process manager shell or the unified shell.

## Do you have unit tests?
Sure,
```bash
cd drunc/
pytest
```
All of the tests are in `tests` and follow the same hierarchy as the code (so for example, the unit tests of the module `drunc.utils.utils` is in `tests/utils/test_utils.py`).

## So empty...
If you have a question, please reach out to developers or fill an issue [here](https://github.com/DUNE-DAQ/drunc/issues).
4 changes: 2 additions & 2 deletions src/drunc/fsm/action_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ def get_action(self, action_name, configuration):
from drunc.fsm.actions.usvc_provided_run_number import UsvcProvidedRunNumber
iface = UsvcProvidedRunNumber(configuration)
case 'test-action':
from drunc.fsm.actions.test_action import TestAction
iface = TestAction(configuration)
from drunc.fsm.actions.some_test_action import SomeTestAction
iface = SomeTestAction(configuration)
case "file-logbook":
from drunc.fsm.actions.file_logbook import FileLogbook
iface = FileLogbook(configuration)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ class an_enum(Enum):
ONE=1
TWO=2

class TestAction(FSMAction):
class SomeTestAction(FSMAction):
def __init__(self, configuration):
super().__init__(
name = "test-action"
Expand Down
77 changes: 0 additions & 77 deletions src/drunc/tests/__main_fsm__.py

This file was deleted.

File renamed without changes.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
1 change: 1 addition & 0 deletions src/drunc/tests/controller/children_interface/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
42 changes: 42 additions & 0 deletions src/drunc/tests/create_skeleton_test
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/usr/bin/env python3
import os
from pathlib import Path
from rich import print

drunc_srcs = (Path(os.path.abspath(__file__)) / ".." / "..").resolve()
test_dir = (Path(os.path.abspath(__file__)) / "..").resolve()
print(f"test_dir {test_dir}")
ignore_prefix_dirs = [drunc_srcs/"apps", drunc_srcs/"tests", drunc_srcs/"data", drunc_srcs/"apps"]
ignore_prefix_dirs = list(map(str, ignore_prefix_dirs))
ignore_dirs = ['__pycache__']

for root, directories, files in os.walk(drunc_srcs):

ignored_dir = any([ignore_dir in root for ignore_dir in ignore_prefix_dirs])
ignored_dir |= any([ignore_dir in root for ignore_dir in ignore_dirs])

if ignored_dir:
continue
print(f"Processing {root}")

for fi in files:
if not fi.endswith(".py") or fi == '__init__.py':
continue

if root == str(drunc_srcs):
test_root_dir = test_dir
else:
test_root_dir = test_dir / root.replace(str(drunc_srcs)+"/", "")

if not test_root_dir.exists():
print(f"Creating {test_root_dir}, based on {root}")
test_root_dir.mkdir(parents=True)
init_file = test_root_dir/"__init__.py"
init_file.touch()

test_file = test_root_dir / f"test_{fi}"

if not test_file.exists():
print(f"Creating {test_file}, based on {fi}")
test_file.touch()

Loading