Commit Graph
508 Commits
Author SHA1 Message Date
Robert Schmidt 0f094a5a57 Remove any usage of UE* main.py parameters
The parameter is not used. Remove them.
2025-05-19 11:42:11 +02:00
Jaroslava Fiedlerova 77f2a2b678 CI: remove global PHYSIM and PhySim class
The cls_physim1.py is no longer needed. Function for physim deployment has
been migrated to the Cluster class. Log analysis functionality has been
moved to the Analysis class.
2025-05-16 16:38:54 +02:00
Robert Schmidt 1449bdd410 Merge remote-tracking branch 'origin/ci-refactor-core-handling' into integration_2025_w14_p1 (!3322)
Refactor core network handling in CI, harmonize code

Prior to change set, there is a highly heterogeneous situation for core
network management in CI code: some log collection is done from groovy
files (when it could be done in python, which is easier for local
development), there are multiple commands to start a CN from XML files,
the code for starting a CN is always different (no one unified way to
start "any" CN), Ping/Iperf require some support in ci_infra.yaml, ...

To help with the above, refactor the handling of core networks in the CI
code as follows:

- define all CNs in ci_infra.yaml (basically how to deploy, undeploy,
  collect logs, and on which node)
- make one Python class that reads from ci_infra.yaml and that allows to
  start/stop previously defined CNs (and add unit tests...)
- make one XML command for start/stop of CNs, leveraging above class
- leverage the CNs defined in ci_infra.yaml consistently in
  Ping()/Iperf()
- delete old code

Furthermore, the following supporting changes/bugfixes are done:

- repair Iperf2_Unidir() and add unit test
- fix a number of invalid escape sequence errors (there are some
  remaining, which I will do soon)
- various bug fixes
- remove unused XML steps
2025-04-03 10:10:58 +02:00
Robert Schmidt 1037f4ddd9 Remove epc.py and use from python files
All core networks have been migrated to a file-based configuration.
References to epc.py are not needed anymore. Remove all unused XML
steps.
2025-04-02 14:24:09 +02:00
Robert Schmidt b8020204a9 Remove LogCollectIperf option: not used 2025-04-02 14:24:09 +02:00
Robert Schmidt ed3f02bb64 Remove LogCollectPing option: not used 2025-04-02 14:24:09 +02:00
Robert Schmidt 96e20b1399 Remove LogCollectUE options: not used 2025-04-02 14:24:09 +02:00
Robert Schmidt 98ac540d57 CI: use svr_id for Ping in RFsim-based tests
This is not really used as of now, because most IPs are hardcoded. See
one of the next commits for the use of this.

To make sure that we have the correct IP, there is some code that
verifies that a hardcoded IP and the CN IP would be the same.

Note: need two separate ci_infra.yaml entries, because
- for FlexRIC, the container name is different (is the tutorial CN)
- for RFsim5G E1, we don't have ext-dn => ping UPF
2025-03-31 16:38:13 +02:00
Robert Schmidt 246ad2dda3 Add (Un)deployCoreNetwork in test framework 2025-03-31 16:38:13 +02:00
Robert Schmidt d1f58d1430 Use new core network class in Iperf()/Iperf2_Unidir()/Ping()
Use the core network class to configure one "end" of these tests. This
will make the tests more generic and predictable, as they are explicitly
configured through two ci_infra.yaml "entities", instead of some
implicit "EPC" IP address given in configuration.

As of this commit, no XML passes this info into the framework, so no XML
step will work. As it is many changes, the following commits will add
the necessary info one by one.
2025-03-31 16:38:12 +02:00
Robert Schmidt 703bf07c81 Remove EPC from InitializeNB()/TerminateeNB()
These two functions use the EPC class to potentially fill in
EPC/5GC-related information, or start a packet tracer (tshark). The only
pipeline that uses these functions is RAN-gNB-N300-Timing-Phytest-LDPC,
which does not use a core network. This functionality is not used, and
can therefore be removed.
2025-03-28 14:34:03 +01:00
Robert Schmidt 01d48c1d82 Add pull image with tag prefix and XML
After the parent commit, the registry might contain prefixed images.
This commit adds the functionality to pull such prefixed image. Since we
rename the pulled image (to have a consistent name, from whichever
registry we might pull), remove the prefix as well so that it can be
used with other CI functionality (remove image, use in test, ...)

Examples for renaming:
- pull from internal_registry for x86
  internal_registry/oai-gnb:branchA => oai-ci/oai-gnb:branchA
- pull from internal registry for ARM with "arm_" prefix
  internal_registry/oai-gnb:arm_branchA => oai-ci/oai-gnb:branchA
- pull from x86 other registry (e.g., openshift)
  openshift/namespace/oai-gnb:branchA => oai-ci/oai-gnb:branchA
2025-03-24 09:19:30 +01:00
Robert Schmidt d67d5793ce Add push image with tag prefix
The only currently viable way to push ARM images to our registry is to
use a custom tag prefix. Modify the python test code to specify such a
tag, and default to "" (no prefix).
2025-03-24 09:19:30 +01:00
Robert Schmidt 7f55a11045 Fix: when calling unknown test case class, fail pipeline 2025-03-19 14:49:22 +01:00
Guido Casati 2333cdabda Add check on force_local in custom_command handling
* The force_local flag was introduced earlier in the main CI script
  in order to run a CI test locally. The flag was missing in the
  Custom_Command handling, which was still targeting the node specified
  in the test configuration file. With this commit, if force_local
  is enabled the node for the Custom_Command is set to localhost.
2025-02-12 15:40:20 +01:00
Bartosz Podrygajlo 650b2dc6eb A script to run CI tests locally.
Added ./run_locally.sh script. The script takes one argument being the testcase
that one wants to run. The testcase is run locally. This means that some testcases that
utilize hardware resources will not run. However most if not all rfsimulator testcases
should run as in CI.

To this end, the CI python scripting framework was updated, adding --local flag which changes
the script behavior as follows:
 - overrides <node> and <srv_node> XML elements to 'localhost' so all commands are executed locally
 - Avoid running image pull, image cleanup and workspace creation steps of the scripts:
   user is responsible for that
2024-12-19 16:55:38 +01:00
Jaroslava Fiedlerova f786d92bc9 CI: Allow restart of the container if it fails on the first attempt
In CI we sometimes encouter fail of the gNB/UE deployment (and fail of
the pipeline) caused by unsuccsessful initialization of the USRP N310.
Restart the container if the health check fails during initialization.

Introduce a configurable parameter (from XML) to set max number of
attempts for the container deployment.

Store logs from failed deployment attempts.
2024-12-05 14:13:22 +01:00
Robert Schmidt 7bf706bc9a CI: harmonize pull/clean with flexric hack
If we are pulling FlexRIC, overwrite the tag to use with what has been
provided on the command line. This is because we hardcode the tag schema
"branchname-commitId[0:8]" everywhere else, but this does not apply for
FlexRIC, and we have to overwrite this here.
2024-11-25 15:33:41 +01:00
Robert Schmidt 644990a225 CI: Clean_Test_Server_Images(): harmonize code
- pass parameter directly instead of indirectly via class
- harmonize to svr_id to read through common code in the next commits
- pass images to express which images will be deleted
- refactor function to use "with" for cls_cmd, and return success (or
  not)
2024-11-25 15:33:41 +01:00
Robert Schmidt 74317e805d CI: PullClusterImage(): harmonize code
- reuse cls_containerize.Containerize.PullImage()
- pass parameter directly instead of indirectly via class
- always read node name and use this instead of "sometimes" looking it
  up from a class member. With "sometimes" I mean that if no node name
  is given, it will take it from self.eNBIPAddress, which is confusing
  at best if we can give the node name directly
- consistently put the node name in the xml file
2024-11-25 15:33:41 +01:00
Robert Schmidt dee9ce26db CI: Pull_Image_from_Registry(): harmonize code
- pass parameter directly instead of indirectly via class
- call it simply "images", to harmonize with clean-function later
- harmonize to svr_id as in the previous commit
- rewrite function to use with-statement with cls_cmd
- optionally pass a tag to use (which will be used in a test, and can be
  used to pull flexric)
- Introduce Pull_Image() which does the actual pulling, can pull from
  any registry, and will be reused in the case of pulling from cluster.
2024-11-25 15:33:41 +01:00
Robert Schmidt a48728ba35 CI: Push_Image_to_Local_Registry(): harmonize code
- pass parameter directly instead of indirectly via class
- harmonize to svr_id to harmonize parameter with parameters in the next
  commit (and towards a future harmonization of directly taking node
  names instead of "IDs")
2024-11-22 08:23:48 +01:00
Raphael Defosseux 5730df9ffc CI: Avoid python warning about wrong escape sequence 2024-11-22 08:23:48 +01:00
Robert Schmidt a80c17cc31 CI: Remove useless parameter 2024-11-22 08:23:48 +01:00
Robert Schmidt c847ac786f Merge remote-tracking branch 'origin/ci-cls-physim-cleanup' into integration_2024_w45 (!3074)
CI: Cleanup of cls_physim.py

- Remove unused code and file
- Rework functions for CUDA and T2 log analysis
- Check if test was successful for nr_ulsim and nr_dlsim in
  RAN-gNB-N300-Timing-Phytest-LDPC pipeline
2024-11-13 09:57:49 +01:00
Robert Schmidt e7225e12cb Remove CheckAndAddRoute(), replace with scripts on machines
Remove CheckAndAddRoute(), as it is complicated to read, uses a
multitude of hostname/IP/password combinations. Replace with scripts on
the machines, which, as of this commit, are:

- porcepix: ~/after-reboot.sh
- ofqot: ~/after-reboot.sh
- nepes: ~/after-reboot.sh
- obelix: ~/how-to-resetup-obelix-out-of-reboot.sh
2024-11-12 17:20:14 +01:00
Jaroslava Fiedlerova 14a41df0ec CI: Harmonize LDPC CUDA and T2 test/analysis in physim
- Introduce "Run_Physim" function for running ldpctest (with CUDA) and
nr_dlsim/nr_ulsim (with T2) in RAN-gNB-N300-Timing-Phytest-LDPC test
pipeline.
- Create "cls_analysis.py" and introduce "analyze_physim" for
log analysis of physim tests.
- Define patterns to be searched in the physim logs.
- Extract and print information about total gNB RX/TX PHY processing time
from nr_ulsim/nr_dlsim logs.
- Remove "cls_physim.py" as it is not used anymore, cleanup "main.py".
2024-11-12 12:02:03 +01:00
Robert Schmidt 7d7011f3f8 Remove use of SSHConnection(): not used in this file 2024-11-09 12:44:09 +01:00
Jaroslava Fiedlerova d0f9d4c028 CI: Remove unused Build_Physim 2024-11-07 20:33:04 +01:00
Jaroslava Fiedlerova f75e107d08 CI: remove unused Run_NRulsimTest 2024-11-07 20:33:04 +01:00
Robert Schmidt 670e1fb8b4 CI: remove unknown imports and uses of names
pyflakes warns about various errors, addressed here. For cls_cluster.py,
remove (unknown) sys.exit and replace through Exception, as sys.exit()
has the unwanted effect that the CI script would stop.  Instead, raise
an Exception that would show the problem in the HTML, and ensures that
the script runs until the end.

These are the warnings flagged by pyflakes.

    cls_cluster.py:297:4: undefined name 'sys'

    cls_containerize.py:39:1: 'subprocess' imported but unused
    cls_containerize.py:41:1: 'threading' imported but unused
    cls_containerize.py:43:1: 'multiprocessing.Process' imported but unused
    cls_containerize.py:43:1: 'multiprocessing.Lock' imported but unused
    cls_containerize.py:43:1: 'multiprocessing.SimpleQueue' imported but unused
    cls_containerize.py:49:1: 'cls_cluster as OC' imported but unused
    cls_containerize.py:50:1: redefinition of unused 'cls_cmd' from line 42

    cls_module.py:28:1: 'os' imported but unused
    cls_module.py:29:1: 'sys' imported but unused
    cls_module.py:34:1: 'subprocess' imported but unused
    cls_module.py:35:1: 'datetime.datetime' imported but unused
    cls_module.py:211:11: undefined name 'sshconnection'

    cls_oaicitest.py:37:1: 'pexpect' imported but unused
    cls_oaicitest.py:47:1: 'cls_cluster as OC' imported but unused
    cls_oaicitest.py:54:1: 'matplotlib.pyplot as plt' imported but unused
    cls_oaicitest.py:55:1: 'numpy as np' imported but unused

    cls_oai_html.py:34:1: 'sys' imported but unused
    cls_oai_html.py:41:1: 'multiprocessing.Process' imported but unused
    cls_oai_html.py:41:1: 'multiprocessing.Lock' imported but unused
    cls_oai_html.py:41:1: 'multiprocessing.SimpleQueue' imported but unused

    cls_physim.py:37:1: 'multiprocessing.SimpleQueue' imported but unused

    cls_static_code_analysis.py:39:1: 'time' imported but unused
    cls_static_code_analysis.py:40:1: 'multiprocessing.Process' imported but unused
    cls_static_code_analysis.py:40:1: 'multiprocessing.Lock' imported but unused
    cls_static_code_analysis.py:40:1: 'multiprocessing.SimpleQueue' imported but unused

    epc.py:41:1: 'multiprocessing.Process' imported but unused
    epc.py:41:1: 'multiprocessing.Lock' imported but unused
    epc.py:41:1: 'multiprocessing.SimpleQueue' imported but unused

    main.py:60:1: 'pexpect' imported but unused
    main.py:66:1: 'datetime' imported but unused
    main.py:68:1: redefinition of unused 'subprocess' from line 63
    main.py:70:1: 'multiprocessing.Process' imported but unused
    main.py:70:1: 'multiprocessing.Lock' imported but unused
    main.py:70:1: 'multiprocessing.SimpleQueue' imported but unused

    provideUniqueImageTag.py:2:1: 'os' imported but unused
2024-10-22 09:51:23 +02:00
Robert Schmidt a736bec570 Remove eNB_Trace: it is not used by the CI 2024-10-22 09:23:21 +02:00
Robert Schmidt f8b480be3e Remove stats_monitor.py: it is not used by the CI 2024-10-22 09:23:01 +02:00
Robert Schmidt 0e23b795b7 CI: use Custom_Script to execute SR-IOV/setup scripts for FHI72 pipeline 2024-09-30 16:08:58 +02:00
Robert Schmidt 5201a5c37a Reimplement DeployObject()/UndeployObject()
This reimplements the CI deployment functions, and makes them a bit more
robust.  Concretely:

- Introduce a generic "deployment tag" option that can be used to
  override the tag to use for specific images. By default, it is the
  current "branch-commitID[0:8]" tag name (requires the change from
  function ImageTagToUse() to CreateTag(), impacting also pull/push
  image functions)
- Avoid sed for image names, and use an .env file that docker-compose
  picks up automatically; the deployment analyzes a potentially existing
  .env file and updates instead of simply overriding. For instance, some
  pipelines might use -asan images for the gNB and "normal" (non-asan)
  images for UE, and a simple overwriting might make the -asan image
  name tag disappear for the gNB, resulting in deployment failures).
  Finally, undeployment removes the .env file, so that there are no
  modifications in the repository after undeployment.
- Redo the previous behavior of autodetecting asan, and use that (the
  current function always uses asan, no matter what)
- Remove deployKind/displayedNewTags globals, as they are not necessary
- Make the usedImage output in HTML slimmer
- On undeployment, print service names next to undeploy analysis, and
  return success/failure.
- Make the functions generally less verbose and easier to read

Note that as of and only in this commit, deployment does not work, as
all the YAML files have not been updated to work with this updated
version.  The next commit adds tests for the new deployment, and updates
one YAML file (also being used in the tests). The follow-up commit then
modifies all YAML files.
2024-09-28 12:46:04 +02:00
Robert Schmidt d81abdaf7b Reimplement Native Build (CI step Build_eNB)
The BuildeNB steps either does things that are already implemented
(created workspace), or things that we don't use (separate build_wait),
and is generally quite convoluted when all it does is calling build_oai.
Reimplement by reusing Create_Workspace, and make build_oai in a single
step. To clean up, make a new module in which this function does not
need a class instantiation. Instead, we give all necessary parameters
directly.
2024-09-28 12:45:34 +02:00
Robert Schmidt 8bdc399b27 Remove AutoTerminateUEeNB() functions, use auto_exec to make CI always undeploy 2024-09-28 12:45:07 +02:00
Robert Schmidt 041b2b2d7a Remove prematureExit/exitStatus, and implement in task main loop
Use the previous commit on returning success from each task execution
function, and implement handling of errors in the main loop. Add a
script with which this is visible using Custom_Commands.
2024-09-28 12:45:07 +02:00
Robert Schmidt e969ddb897 IdleSleep(): no need for class members 2024-09-28 12:45:07 +02:00
Robert Schmidt 71807db4ab Custom_Command(): no need for class members 2024-09-28 12:45:07 +02:00
Robert Schmidt 61ea76e7af Remove CI repeatCount XML property
The repeatCount property is useless: it would be enough to specify the
same XML multiple times to achieve the same thing.
2024-09-28 12:45:07 +02:00
Robert Schmidt d108648312 Handle parameter reading and test case execution together
For reasons I don't understand, the XML option reading and actual test
case execution are at different places in the code. This is problematic,
because what this led to is that options are not passed as function
arguments, but indirectly through class members. This led to a lot of
"indirect code"; it's a total mess

To improve this, move them together, so that parameters can be passed
directly as function arguments later on.

Because we reference the globals, mark them inside
ExecuteActionWithParam(). That is a Python antipattern, but necessary at
this moment. I believe that we can remove the following globals over
time:

- SSH (with new cls_cmd, which we don't need to pass)
- EPC (replaced through a class similar to ue_module, i.e., refer to
  core networks on specific hosts through an ID, instead of a global)
- HTML (should use templating, where individual functions give back a
  dictionary of what they want to print, and a final pass assembles the
  entire HTML file)
- RAN/SCA/PHYSIM/CLUSTER/ldpc (can be replaced with stateless scripts
  build/run eNB/gNB on a specific node)
2024-09-28 12:45:07 +02:00
Robert Schmidt 1620994f0a DeployObject: EPC not needed 2024-09-27 19:59:54 +02:00
Robert Schmidt cded721189 Remove unused CI XML and Python code 2024-09-27 19:50:41 +02:00
Robert Schmidt b9e56104d8 Remove unused CI code 2024-09-26 16:53:04 +02:00
Robert Schmidt 6147a83f0b Remove unused Perform_X2_Handover XML step: no XML uses this 2024-09-23 12:19:49 +02:00
Robert Schmidt ec64826fde Remove unused Terminate_OAI_UE XML step: no XML uses this
- Fix Jenkinsfile-tmp-full-ran: python test stage TerminateOAIUE() has been removed
2024-09-23 12:19:38 +02:00
Robert Schmidt 99226fc66c Remove unused Initialize_OAI_UE XML step: no XML uses this 2024-09-18 15:13:13 +02:00
Robert Schmidt aeb6442f71 Remove unused Build_OAI_UE XML step: no XML uses this 2024-09-18 15:13:13 +02:00
Bipin f3033533bb moving module id and node checks to parameter checks 2024-09-04 15:45:18 +02:00