vm_based_simulator_main_scripts.md 8.06 KB
OAI CI Virtual-Machine-based Test Environment: the Main Script

Table of Contents

  1. Introduction
  2. Sub BASH scripts
  3. Main script features

1. Introduction

The file name is ./ci-scripts/oai-ci-vm-tool from the workspace root.

$ cd /tmp/CI-raphael
$ ./ci-scripts/oai-ci-vm-tool --help
OAI CI VM script
   Original Author: Raphael Defosseux
   Requirements:
     -- uvtool uvtool-libvirt apt-cacher
     -- xenial image already synced

Usage:
------
    oai-ci-vm-tool (-h|--help) {create,destroy,build,wait,test,report-build,report-test} ...

This is a BASH script.

2. Sub BASH scripts

The main script is including a bunch of sub BASH scripts.

  • ci-scripts/createVM.sh
  • ci-scripts/buildOnVM.sh
  • ci-scripts/waitBuildOnVM.sh
  • ci-scripts/destroyAllRunningVM.sh
  • ci-scripts/runTestOnVM.sh
  • ci-scripts/reportBuildLocally.sh
  • ci-scripts/reportTestLocally.sh

NOTE: ci-scripts/runTestOnVM.sh is getting big and will certainly be split to facilitate maintenance. Start functions will be also factorized.

3. Main script features

The main purpose of the main script is decipher the options and launch the requested function.

It is also testing if uvtool and apt-cacher are installed.

It finally provides parameters to the requested functions. Parameter definition is centralized there.

For example:

for VM instance creation:

  • the instance name: VM_NAME
  • the RAM and number of CPUs: VM_MEMORY, VM_CPU

for OAI variant build:

  • build options: BUILD_OPTIONS
  • build log file to parse: LOG_PATTERN
  • the number of log files to parse: NB_PATTERN_FILES

You can get the list of variant specific variables specifying the variant argument when asking for help:

./ci-scripts/oai-ci-vm-tool help variant
    --variant flexran-rtc     OR -v10    ( build and test non-OSA )
               VM_NAME=ci-flexran-rtc           ARCHIVES_LOC=flexran        
               VM_MEMORY=2048                   VM_CPU=4              
               NB_PATTERN_FILES=1               BUILD_OPTIONS="cmake . && make -j2"
               LOG_PATTERN=.Rel15.txt     

    --variant enb-usrp        OR -v1     ( build and test  )
               VM_NAME=ci-enb-usrp              ARCHIVES_LOC=enb_usrp       
               VM_MEMORY=2048                   VM_CPU=4              
               NB_PATTERN_FILES=9               BUILD_OPTIONS="--eNB -w USRP --mu"
               LOG_PATTERN=.Rel15.txt     

    --variant l1-sim          OR -v20    ( test  )
               VM_NAME=ci-l1-sim                ARCHIVES_LOC=l1_sim         
               VM_MEMORY=2048                   VM_CPU=4              
               NB_PATTERN_FILES=9               BUILD_OPTIONS=""             
               LOG_PATTERN=.Rel15.txt     

    --variant rf-sim          OR -v21    ( test  )
               VM_NAME=ci-rf-sim                ARCHIVES_LOC=rf_sim         
               VM_MEMORY=2048                   VM_CPU=4              
               NB_PATTERN_FILES=9               BUILD_OPTIONS=""             
               LOG_PATTERN=.Rel15.txt     

    --variant l2-sim          OR -v22    ( test  )
               VM_NAME=ci-l2-sim                ARCHIVES_LOC=l2_sim         
               VM_MEMORY=2048                   VM_CPU=4              
               NB_PATTERN_FILES=9               BUILD_OPTIONS=""             
               LOG_PATTERN=.Rel15.txt     

    --variant phy-sim         OR -v3     ( build and test  )
               VM_NAME=ci-phy-sim               ARCHIVES_LOC=phy_sim        
               VM_MEMORY=2048                   VM_CPU=4              
               NB_PATTERN_FILES=3               BUILD_OPTIONS="--phy_simulators"
               LOG_PATTERN=.Rel15.txt     

    --variant cppcheck        OR -v4     ( build and test  )
               VM_NAME=ci-cppcheck              ARCHIVES_LOC=cppcheck       
               VM_MEMORY=4096                   VM_CPU=4              
               NB_PATTERN_FILES=1               BUILD_OPTIONS="--enable=warning --force --xml --xml-version=2 --suppressions-list=ci-scripts/cppcheck_suppressions.list -I common/utils -j4"
               LOG_PATTERN=cppcheck.xml   

    --variant enb-ethernet    OR -v7     ( build and test  )
               VM_NAME=ci-enb-ethernet          ARCHIVES_LOC=enb_eth        
               VM_MEMORY=4096                   VM_CPU=4              
               NB_PATTERN_FILES=8               BUILD_OPTIONS="--eNB"        
               LOG_PATTERN=.Rel15.txt     

    --variant ue-ethernet     OR -v8     ( build and test  )
               VM_NAME=ci-ue-ethernet           ARCHIVES_LOC=ue_eth         
               VM_MEMORY=4096                   VM_CPU=4              
               NB_PATTERN_FILES=12              BUILD_OPTIONS="--UE"         
               LOG_PATTERN=.Rel15.txt     

To define a new variant you just need to define a function which name conforms to function variant__v<n>__<variant_name> where n and variant_name will respectively define the short and long options for your variant. The function only needs to define the variant dependent variables. For many variables, default values are set in the check_set_variant function. When a variant doesn't define the BUILD_OPTIONS variable it cannot be used for the build wait and create commands.

The main scripts also allows the definition of non variant-dependant variable via the --setvar_<variable name> <variable value> options. You can get the list of these variables by using help setvar:

./ci-scripts/oai-ci-vm-tool help setvar
--setvar_<varname> <value> where varname is one of:
            VM_OSREL :     OS release to use in virtual machines
    RUN_EXPERIMENTAL :     Enforce execution of variants with EXPERIMENTAL variable set to "true"

To add a new non-variant dependant variable you need:

  • Add an item to the AUTHORIZED_VAR array
  • In the setvar_usagefunction, add your help string in the HELP_VAR[""] variable.
  • Write the bash code for your variable.

Example of non variant dependent usage:

./ci-scripts/oai-ci-vm-tool test -v21  -ws /usr/local/oai/enhance_CI_extEPC/openairinterface5g -id 1 -jn testci
Currently testci-b1-rf-sim Testing is not implemented / enabled
Comment out these lines in ./ci-scripts/oai-ci-vm-tool if you want to run it
 or use option --setvar_RUN_EXPERIMENTAL=true to test it


 ./ci-scripts/oai-ci-vm-tool test -v21  -ws /usr/local/oai/enhance_CI_extEPC/openairinterface5g -id 1 -jn testci --setvar_RUN_EXPERIMENTAL true
 Setting RUN_EXPERIMENTAL to true...
 ############################################################
 OAI CI VM script
 ############################################################
 ENB_VM_NAME         = testci-b1-enb-ethernet
 ENB_VM_CMD_FILE     = testci-b1-enb-ethernet_cmds.txt
 UE_VM_NAME          = testci-b1-ue-ethernet
 UE_VM_CMD_FILE      = testci-b1-ue-ethernet_cmds.txt
 JENKINS_WKSP        = /usr/local/oai/enhance_CI_extEPC/openairinterface5g
 ARCHIVES_LOC        = /usr/local/oai/enhance_CI_extEPC/openairinterface5g/archives/rf_sim/test
 ############################################################
 Waiting for ENB VM to be started
...........................

In the same way, you can set the variable VM_OSREL to run the test in virtual machines of the specified OS release:

./ci-scripts/oai-ci-vm-tool test -v21  -ws /usr/local/oai/enhance_CI_extEPC/openairinterface5g -id 1 -jn testci --setvar_VM_OSREL bionic

Next step: how to create one or several VM instances

You can also go back to the CI dev main page