diff --git a/ci-scripts/buildOnVM.sh b/ci-scripts/buildOnVM.sh index ee5fc56c5f9711cce9c8477b9270041cf75799e1..e198032eb1a98c979418fef9719514721d5cfc91 100755 --- a/ci-scripts/buildOnVM.sh +++ b/ci-scripts/buildOnVM.sh @@ -25,7 +25,7 @@ function build_usage { echo " Original Author: Raphael Defosseux" echo " Requirements:" echo " -- uvtool uvtool-libvirt apt-cacher" - echo " -- xenial image already synced" + echo " -- $VM_OSREL image already synced" echo " Default:" echo " -- eNB with USRP" echo "" @@ -95,7 +95,7 @@ function build_on_vm { echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base" echo "############################################################" acquire_vm_create_lock - uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu $VM_CPU --unsafe-caching --template ci-scripts/template-host.xml + uvt-kvm create $VM_NAME release=$VM_OSREL --memory $VM_MEMORY --cpu $VM_CPU --unsafe-caching --template ci-scripts/template-host.xml echo "Waiting for VM to be started" uvt-kvm wait $VM_NAME --insecure diff --git a/ci-scripts/createVM.sh b/ci-scripts/createVM.sh index e693b07b913eadbf5b17cca0754545c025b89e9d..e0e1da4236cec1938468b83770563a561ce2b361 100755 --- a/ci-scripts/createVM.sh +++ b/ci-scripts/createVM.sh @@ -25,7 +25,7 @@ function create_usage { echo " Original Author: Raphael Defosseux" echo " Requirements:" echo " -- uvtool uvtool-libvirt apt-cacher" - echo " -- xenial image already synced" + echo " -- $VM_OSREL image already synced" echo " Default:" echo " -- eNB with USRP" echo "" @@ -90,7 +90,7 @@ function create_vm { echo "Creating VM ($VM_NAME) on Ubuntu Cloud Image base" echo "############################################################" acquire_vm_create_lock - uvt-kvm create $VM_NAME release=xenial --memory $VM_MEMORY --cpu $VM_CPU --unsafe-caching --template ci-scripts/template-host.xml + uvt-kvm create $VM_NAME release=$VM_OSREL --memory $VM_MEMORY --cpu $VM_CPU --unsafe-caching --template ci-scripts/template-host.xml echo "Waiting for VM to be started" uvt-kvm wait $VM_NAME --insecure diff --git a/ci-scripts/oai-ci-vm-tool b/ci-scripts/oai-ci-vm-tool index 7c5c02ba0bea31233c9e29e6c8048e4ce8824090..65640560016aee6eb4e79f251a46cde64563f598 100755 --- a/ci-scripts/oai-ci-vm-tool +++ b/ci-scripts/oai-ci-vm-tool @@ -20,35 +20,211 @@ # * contact@openairinterface.org # */ + function top_usage { echo "OAI CI VM script" echo " Original Author: Raphael Defosseux" echo " Requirements:" echo " -- uvtool uvtool-libvirt apt-cacher" - echo " -- xenial image already synced" + echo " -- $VM_OSREL image already synced" echo "" echo "Usage:" echo "------" - echo " oai-ci-vm-tool (-h|--help) {create,destroy,build,wait,test,report-build,report-test} ..." + echo " oai-ci-vm-tool (-h|--help) { `for i in "${COMMANDS_NAME[@]}"; do echo -n $i,;done` ..." } echo "" } function variant_usage { - echo " # OpenAirInterface Build Variants" - echo " --variant enb-usrp OR -v1" - echo " --variant basic-sim OR -v2" - echo " --variant phy-sim OR -v3" - echo " --variant cppcheck OR -v4" - echo " --variant enb-ethernet OR -v7" - echo " --variant ue-ethernet OR -v8" - echo " # non-OSA Build Variants" - echo " --variant flexran-rtc OR -v10" - echo " # OpenAirInterface Test Variants" - echo " --variant l1-sim OR -v20" - echo " --variant rf-sim OR -v21" - echo " --variant l2-sim OR -v22" + + for (( i=0 ; i<${#VARIANTS_LONG[@]} ; i++ )) + do + unset BUILD_OPTIONS + unset VARIANT_INFO + check_set_variant "${VARIANTS_SHORT[$i]}" + printf " --variant %-15s OR -%-3s" "${VARIANTS_LONG[$i]}" "${VARIANTS_SHORT[$i]}" + if [ "$BUILD_OPTIONS" = "" ] + then + echo -n " ( test " + else + echo -n " ( build and test " + fi + echo "$VARIANT_INFO )" + printf " VM_NAME=%-15s ARCHIVES_LOC=%-15s\n" "$VM_NAME" "$ARCHIVES_LOC" + printf " VM_MEMORY=%-15s VM_CPU=%-15s\n" "$VM_MEMORY" "$VM_CPU" + printf " NB_PATTERN_FILES=%-15s BUILD_OPTIONS=%-15s\n" "$NB_PATTERN_FILES" "\"$BUILD_OPTIONS\"" + printf " LOG_PATTERN=%-15s\n\n" "$LOG_PATTERN" + + done +} + +function setvar_usage { + echo "--setvar_<varname> <value> where varname is one of:" + for i in "$AUTHORIZED_VAR"; do echo " $i";done +} + +# functions variant__v<n>__<variant name> are used to define build or test variants +# The only thing to do to define a new variant is to add a function which name +# match this template. Note that "_" character in function <varriant name> part +# will be replaced by "-" character in build_variant_arrays function, this is +# for compatibility reasons + +function variant__v1__enb_usrp { + NB_PATTERN_FILES=9 + BUILD_OPTIONS="--eNB -w USRP --mu" +} + +function variant__v2__basic_sim { + NB_PATTERN_FILES=13 + BUILD_OPTIONS="--eNB --UE" + VM_MEMORY=8192 + RUN_OPTIONS="complex" } +function variant__v3__phy_sim { + NB_PATTERN_FILES=3 + BUILD_OPTIONS="--phy_simulators" + RUN_OPTIONS="./run_exec_autotests.bash -g \"01510*\" -q -np -b" +} + +function variant__v4__cppcheck { + VM_MEMORY=4096 + LOG_PATTERN=cppcheck.xml + NB_PATTERN_FILES=1 + BUILD_OPTIONS="--enable=warning --force --xml --xml-version=2 --suppressions-list=ci-scripts/cppcheck_suppressions.list -I common/utils -j4" +} + +function variant__v7__enb_ethernet { + VM_MEMORY=4096 + ARCHIVES_LOC=enb_eth + NB_PATTERN_FILES=8 + BUILD_OPTIONS="--eNB" +} +function variant__v8__ue_ethernet { + VM_MEMORY=4096 + ARCHIVES_LOC=ue_eth + NB_PATTERN_FILES=12 + BUILD_OPTIONS="--UE" +} + +function variant__v10__flexran_rtc { + ARCHIVES_LOC=flexran + NB_PATTERN_FILES=1 + BUILD_OPTIONS="cmake . && make -j2" + VARIANT_INFO="non-OSA" +} +function variant__v20__l1_sim { + ARCHIVES_LOC=l1_sim + RUN_OPTIONS="complex" +} + +function variant__v21__rf_sim { + RUN_OPTIONS="complex" +} + +function variant__v22__l2_sim { + RUN_OPTIONS="complex" +} + +# Following function lists all variant__v<n>__<variant name> functions +# and set the VARIANTS_SHORT and VARIANTS_LONG arrays from +# the function names +function build_variant_arrays { + VARIANTS=`declare -F` + VARIANTS=${VARIANTS//"declare -f "} + for i in $VARIANTS + do + if [ `expr match "$i" 'variant__v'` -eq 10 ] + then + IDX1=`expr match "$i" 'variant__v[0-9]\+__'` + VARIANTS_SHORT+=(${i:9:$((IDX1-11))}) + LONGNAME=${i:$IDX1} + VARIANTS_LONG+=(${LONGNAME//"_"/"-"}) + fi + done +} + +# check that the passed argument is a valid variant, set +# default values for variant related variables and then execute +# the corresponding variant__v<n>__<variant name> function +function check_set_variant { + for (( i=0 ; i<${#VARIANTS_SHORT[@]} ; i++ )) + do + if [ "$1" = "${VARIANTS_SHORT[$i]}" ] || [ "$1" = "${VARIANTS_LONG[$i]}" ] + then + VM_NAME=ci-${VARIANTS_LONG[$i]} + LOG_PATTERN=.$ASN1VER.txt + ARCHIVES_LOC=${VARIANTS_LONG[$i]//"-"/"_"} + VM_MEMORY=2048 + VM_CPU=4 + NBARGS=$[$NBARGS+$VARIANT_OPTID] + variant__${VARIANTS_SHORT[$i]}__${VARIANTS_LONG[$i]//"-"/"_"} + return 0 + fi + done + echo "$1" is not a valid variant + variant_usage + exit 1 + +} + +function check_command_options { + GIVEN_OPTIONS=$1 + declare -a MANDATORY_OPTIONS=("${!2}") + if [ ${MANDATORY_OPTIONS[1]} -eq 0 ] + then + MANDATORY_OPTIONS[1]=${MANDATORY_OPTIONS[0]} + fi + OPTIONAL_OPTIONS=$3 + if [ $(($GIVEN_OPTIONS & ${MANDATORY_OPTIONS[0]} )) -ne ${MANDATORY_OPTIONS[0]} ] && [ $(($GIVEN_OPTIONS & ${MANDATORY_OPTIONS[1]} )) -ne ${MANDATORY_OPTIONS[1]} ] + then + echo "Syntax Error: missing option(s) for $4 command" + $4_usage + exit 1 + fi + + if [ $(($GIVEN_OPTIONS | ${MANDATORY_OPTIONS[0]} | ${MANDATORY_OPTIONS[1]} | $OPTIONAL_OPTIONS )) -ne $(( ${MANDATORY_OPTIONS[0]} | ${MANDATORY_OPTIONS[1]} | $OPTIONAL_OPTIONS )) ] + then + echo "Syntax Error: unknown option(s) for $4 command" + $4_usage + exit 1 + fi +} + +function check_ipv4addr { + local ipaddr=$1 + local stat=1 + + if [[ $ipaddr =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]] + then + OIFS=$IFS + IFS='.' + ipaddr=($ipaddr) + IFS=$OIFS + [[ ${ipaddr[0]} -le 255 && ${ipaddr[1]} -le 255 \ + && ${ipaddr[2]} -le 255 && ${ipaddr[3]} -le 255 ]] + stat=$? + fi + if [ $stat -ne 0 ] + then + echo $ipaddr " is not a valid ip V4 address" + exit 1 + fi +} + +function check_setvar { + for i in $AUTHORIZED_VAR + do + if [ "$1" = "$i" ] + then + $1="$2" + return 0 + fi + done + echo " $1 is not a variable you can set" + setvar_usage + exit 1 +} + MY_DIR=$(dirname $(readlink -f $0)) . $MY_DIR/createVM.sh . $MY_DIR/buildOnVM.sh @@ -67,101 +243,208 @@ then fi VM_TEMPLATE=ci- +# look for default ASN1 release in cmake directives +# It will be the release used when building +ASN1VEROPT=( `grep "add_list2_option(RRC_ASN1_VERSION" cmake_targets/CMakeLists.txt` ) +ASN1VER=${ASN1VEROPT[1]//\"} +unset ASN1VEROPT + +# variable to identify and store the command (build, create ...) +# command index in the COMMAND and COMMANDS_NAME arrays +HELP_CMD=0 +CREATE_CMD=1 +BUILD_CMD=2 +WAIT_CMD=3 +DESTROY_CMD=4 +TEST_CMD=5 +REPORT_BUILD_CMD=6 +REPORT_TEST_CMD=7 + +COMMANDS_NAME=(help create build wait destroy test report-build report-test) + +#COMMAND will be used to save the command entered as argument +declare -A COMMAND +for i in "${COMMANDS_NAME[@]}" +do + COMMAND[$i]=0 +done + +# build the variant arrays +declare -a VARIANTS_SHORT +declare -a VARIANTS_LONG +build_variant_arrays + +#variables to process options, for each option we define a variable to store +# its value and a bit mask, used to check allowed options depending on +# the command JOB_NAME=XX +JOB_NAME_OPTID=1 BUILD_ID=XX -VM_NAME=ci-enb-usrp -VM_MEMORY=2048 -VM_CPU=4 -ARCHIVES_LOC=enb_usrp -LOG_PATTERN=.Rel14.txt -NB_PATTERN_FILES=7 -BUILD_OPTIONS="--eNB -w USRP" +BUILD_ID_OPTID=2 +JENKINS_WKSP_OPTID=4 KEEP_VM_ALIVE=0 +KEEP_VM_ALIVE_OPTID=8 RUN_OPTIONS="none" DAEMON=0 +DAEMON_OPTID=$((2**4)) +GITURL_OPTID=$((2**5)) +PU_OPTID=$((2**6)) +MR_OPTID=$((2**7)) +VARIANT_OPTID=$((2**8)) +SB_OPTID=$((2**10)) +SC_OPTID=$((2**11)) +TB_OPTID=$((2**12)) +TC_OPTID=$((2**13)) +BR_OPTID=$((2**14)) +CO_OPTID=$((2**15)) MR_TRIG=0 PU_TRIG=0 +EPC_IPADDR="" +EPC_IPADDR_OPTID=$((2**16)) -HELP_CMD=0 -CREATE_CMD=0 -BUILD_CMD=0 -WAIT_CMD=0 -DESTROY_CMD=0 -TEST_CMD=0 -REPORT_BUILD_CMD=0 -REPORT_TEST_CMD=0 +# list of variables that can be set via the --setvar option +AUTHORIZED_VAR="VM_OSREL" + +#variables to set which OS VM should use +#if [ -f "/etc/os-release" ] +#then +# source /etc/os-release +# VM_OS="$NAME" +# VM_OSREL="$VERSION_CODENAME" +# VM_ARCHI=`uname -m` +#else + VM_OS="ubuntu" + VM_OSREL="xenial" + VM_ARCHI="x86_64" +#fi + + +# variant option, ie the test variant which will be run triggers the +# variables listed below, used to configure the VM and to define what this +# VM will do. The variant can be specified by the --variant option or by a +# -V<xx> option. +VM_NAME="" +VM_MEMORY=0 +VM_CPU=0 +ARCHIVES_LOC="" +LOG_PATTERN="" +NB_PATTERN_FILES=0 +BUILD_OPTIONS="" +RUN_OPTIONS="" + + + +# NARGS is used to check that only valid options are used for the given command +# It is a bit mask, each bit set to 1 specifies the corresponding option +# has been entered on the command line. MANDATORY_OPTMASK and ALLOWED_OPTMASK define +# respectively the mandatory and optional parameters of the entered command NBARGS=0 +MANDATORY_OPTMASK=(0 0) # some command have two sets of mandatory options +ALLOWED_OPTMASK=0 while [[ $# -gt 0 ]] do key="$1" case $key in - -h|--help) - HELP_CMD=1 + --debug) + set -v + set -x + shift + ;; + -h|--help|help) + COMMAND["help"]=1 shift ;; create) - CREATE_CMD=1 + COMMAND[$key]=1 + # For create, mandatory options: jn, id. Optional: variant + MANDATORY_OPTMASK[0]=$(($JOB_NAME_OPTID + $BUILD_ID_OPTID )) + ALLOWED_OPTMASK=$(($VARIANT_OPTID)) # It is implied to keep the VM when creating it KEEP_VM_ALIVE=1 shift ;; build) - BUILD_CMD=1 + COMMAND[$key]=1 + # For build, mandatory options: jn, id, ws. Optional: variant, k, D + MANDATORY_OPTMASK[0]=$(($JOB_NAME_OPTID + $BUILD_ID_OPTID + $JENKINS_WKSP_OPTID)) + ALLOWED_OPTMASK=$(($KEEP_VM_ALIVE_OPTID + $DAEMON_OPTID + $VARIANT_OPTID)) shift ;; wait) - WAIT_CMD=1 + # For test, mandatory options: jn, id, ws. Optional: variant, k + COMMAND[$key]=1 + MANDATORY_OPTMASK[0]=$(($JOB_NAME_OPTID + $BUILD_ID_OPTID + $JENKINS_WKSP_OPTID)) + ALLOWED_OPTMASK=$(($KEEP_VM_ALIVE_OPTID + $VARIANT_OPTID)) shift ;; - test) - TEST_CMD=1 + test) + COMMAND[$key]=1 + # For test, mandatory options: jn, id, ws. Optional: variant, k, epc + MANDATORY_OPTMASK[0]=$(($JOB_NAME_OPTID + $BUILD_ID_OPTID + $JENKINS_WKSP_OPTID)) + ALLOWED_OPTMASK=$(($KEEP_VM_ALIVE_OPTID + $VARIANT_OPTID + $EPC_IPADDR_OPTID)) shift ;; destroy) - DESTROY_CMD=1 + COMMAND[$key]=1 + # For destroy, mandatory options: jn, id. + MANDATORY_OPTMASK[0]=$(($JOB_NAME_OPTID + $BUILD_ID_OPTID)) + ALLOWED_OPTMASK=0 shift ;; report-build) - REPORT_BUILD_CMD=1 + COMMAND[$key]=1 + # For report-build, mandatory options: jn, id, ws, gu, pu, br,co. + # or: jn, id, ws, gu, mr, sb, sc, tb, tc. + MANDATORY_OPTMASK[0]=$(($JOB_NAME_OPTID + $BUILD_ID_OPTID + $JENKINS_WKSP_OPTID + $GITURL_OPTID + $PU_OPTID + $BR_OPTID + $CO_OPTID)) + MANDATORY_OPTMASK[1]=$(($JOB_NAME_OPTID + $BUILD_ID_OPTID + $JENKINS_WKSP_OPTID)) + MANDATORY_OPTMASK[1]+=$(($GITURL_OPTID + $MR_OPTID + $SB_OPTID + $SC_OPTID)) + MANDATORY_OPTMASK[1]+=$(($GITURL_OPTID + $TB_OPTID + $TC_OPTID)) shift ;; - report-test) - REPORT_TEST_CMD=1 + report-test) + COMMAND[$key]=1 + # For report-test, mandatory options: jn, id, ws, gu, pu, br,co. + # or: jn, id, ws, gu, mr, sb, sc, tb, tc. + MANDATORY_OPTMASK[0]=$(($JOB_NAME_OPTID + $BUILD_ID_OPTID + $JENKINS_WKSP_OPTID)) + MANDATORY_OPTMASK[0]+=$(($GITURL_OPTID + $PU_OPTID + $BR_OPTID + $CO_OPTID)) + MANDATORY_OPTMASK[1]=$(($JOB_NAME_OPTID + $BUILD_ID_OPTID + $JENKINS_WKSP_OPTID)) + MANDATORY_OPTMASK[1]+=$(($GITURL_OPTID + $MR_OPTID + $SB_OPTID + $SC_OPTID)) + MANDATORY_OPTMASK[1]+=$(($GITURL_OPTID + $TB_OPTID + $TC_OPTID)) shift ;; -jn|--job-name) JOB_NAME="$2" - NBARGS=$[$NBARGS+1] + NBARGS=$[$NBARGS+$JOB_NAME_OPTID] shift shift ;; -id|--build-id) BUILD_ID="$2" - NBARGS=$[$NBARGS+2] + NBARGS=$[$NBARGS+$BUILD_ID_OPTID] shift shift ;; -ws|--workspace) JENKINS_WKSP="$2" - NBARGS=$[$NBARGS+4] + NBARGS=$[$NBARGS+$JENKINS_WKSP_OPTID] shift shift ;; -k|--keep-vm-alive) KEEP_VM_ALIVE=1 - NBARGS=$[$NBARGS+8] + NBARGS=$[$NBARGS+$KEEP_VM_ALIVE_OPTID] shift ;; -D|--daemon) DAEMON=1 - NBARGS=$[$NBARGS+16] + NBARGS=$[$NBARGS+$DAEMON_OPTID] shift ;; -gu|--git-url) GIT_URL="$2" - NBARGS=$[$NBARGS+32] + NBARGS=$[$NBARGS+$GITURL_OPTID] shift shift ;; @@ -188,236 +471,72 @@ case $key in ;; -mr) MR_TRIG=1 - NBARGS=$[$NBARGS+64] + NBARGS=$[$NBARGS+$MR_OPTID] shift ;; -pu) PU_TRIG=1 - NBARGS=$[$NBARGS+64] + NBARGS=$[$NBARGS+$PU_OPTID] shift ;; -sb|--src-branch) SOURCE_BRANCH="$2" - NBARGS=$[$NBARGS+1024] + NBARGS=$[$NBARGS+$SB_OPTID] shift shift ;; -sc|--src-commit) SOURCE_COMMIT_ID="$2" - NBARGS=$[$NBARGS+2048] + NBARGS=$[$NBARGS+$SC_OPTID] shift shift ;; -tb|--target-branch) TARGET_BRANCH="$2" - NBARGS=$[$NBARGS+4096] + NBARGS=$[$NBARGS+$TB_OPTID] shift shift ;; -tc|--target-commit) TARGET_COMMIT_ID="$2" - NBARGS=$[$NBARGS+8192] + NBARGS=$[$NBARGS+$TC_OPTID] shift shift ;; -br|--branch) SOURCE_BRANCH="$2" - NBARGS=$[$NBARGS+16384] + NBARGS=$[$NBARGS+$BR_OPTID] shift shift ;; -co|--commit) SOURCE_COMMIT_ID="$2" - NBARGS=$[$NBARGS+32768] + NBARGS=$[$NBARGS+$CO_OPTID] shift shift ;; - -v1) - VM_NAME=ci-enb-usrp - ARCHIVES_LOC=enb_usrp - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=9 - BUILD_OPTIONS="--eNB -w USRP --mu" - NBARGS=$[$NBARGS+256] + --epc) + check_ipv4addr "$2" + check_ipv4addr "$3" + EPC_IPADDR="$2" + EPC_TUN_IPADDR="$3" + NBARGS=$[$NBARGS+$EPC_IPADDR_OPTID] shift - ;; - -v2) - VM_NAME=ci-basic-sim - ARCHIVES_LOC=basic_sim - LOG_PATTERN=Rel14.txt - NB_PATTERN_FILES=13 - BUILD_OPTIONS="--eNB --UE" - VM_MEMORY=8192 - VM_CPU=4 - RUN_OPTIONS="complex" - NBARGS=$[$NBARGS+256] shift - ;; - -v3) - VM_NAME=ci-phy-sim - ARCHIVES_LOC=phy_sim - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=3 - BUILD_OPTIONS="--phy_simulators" - RUN_OPTIONS="./run_exec_autotests.bash -g \"01510*\" -q -np -b" - NBARGS=$[$NBARGS+256] shift ;; - -v4) - VM_NAME=ci-cppcheck - VM_MEMORY=4096 - ARCHIVES_LOC=cppcheck - LOG_PATTERN=cppcheck.xml - NB_PATTERN_FILES=1 - BUILD_OPTIONS="--enable=warning --force --xml --xml-version=2 --suppressions-list=ci-scripts/cppcheck_suppressions.list -I common/utils -j4" - NBARGS=$[$NBARGS+256] - shift - ;; - -v7) - VM_NAME=ci-enb-ethernet - VM_MEMORY=4096 - VM_CPU=4 - ARCHIVES_LOC=enb_eth - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=8 - BUILD_OPTIONS="--eNB" - NBARGS=$[$NBARGS+256] - shift - ;; - -v8) - VM_NAME=ci-ue-ethernet - VM_MEMORY=4096 - VM_CPU=4 - ARCHIVES_LOC=ue_eth - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=12 - BUILD_OPTIONS="--UE" - NBARGS=$[$NBARGS+256] - shift - ;; - -v10) - VM_NAME=ci-flexran-rtc - ARCHIVES_LOC=flexran - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=1 - BUILD_OPTIONS="cmake . && make -j2" - NBARGS=$[$NBARGS+256] + --setvar_*) + check_setvar "${key:9}" "$2" shift - ;; - -v20) - VM_NAME=ci-l1-sim - ARCHIVES_LOC=l1_sim - RUN_OPTIONS="complex" - NBARGS=$[$NBARGS+256] - shift - ;; - -v21) - VM_NAME=ci-rf-sim - ARCHIVES_LOC=rf_sim - RUN_OPTIONS="complex" - NBARGS=$[$NBARGS+256] shift ;; - -v22) - VM_NAME=ci-l2-sim - ARCHIVES_LOC=l2_sim - RUN_OPTIONS="complex" - NBARGS=$[$NBARGS+256] + -v[0-9] | -v[0-9][0-9]) + check_set_variant ${key//"-"} shift ;; --variant) - variant="$2" - case $variant in - enb-usrp) - VM_NAME=ci-enb-usrp - ARCHIVES_LOC=enb_usrp - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=9 - BUILD_OPTIONS="--eNB -w USRP --mu" - NBARGS=$[$NBARGS+256] - ;; - basic-sim) - VM_NAME=ci-basic-sim - ARCHIVES_LOC=basic_sim - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=13 - BUILD_OPTIONS="--UE --eNB" - VM_MEMORY=8192 - VM_CPU=4 - RUN_OPTIONS="complex" - NBARGS=$[$NBARGS+256] - ;; - phy-sim) - VM_NAME=ci-phy-sim - ARCHIVES_LOC=phy_sim - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=3 - BUILD_OPTIONS="--phy_simulators" - RUN_OPTIONS="./run_exec_autotests.bash -g \"01510*\" -q -np -b" - NBARGS=$[$NBARGS+256] - ;; - cppcheck) - VM_NAME=ci-cppcheck - VM_MEMORY=4096 - ARCHIVES_LOC=cppcheck - LOG_PATTERN=cppcheck.xml - NB_PATTERN_FILES=1 - BUILD_OPTIONS="--enable=warning --force --xml --xml-version=2 --suppressions-list=ci-scripts/cppcheck_suppressions.list -I common/utils -j4" - NBARGS=$[$NBARGS+256] - ;; - enb-ethernet) - VM_NAME=ci-enb-ethernet - VM_MEMORY=4096 - VM_CPU=4 - ARCHIVES_LOC=enb_eth - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=8 - BUILD_OPTIONS="--eNB" - NBARGS=$[$NBARGS+256] - ;; - ue-ethernet) - VM_NAME=ci-ue-ethernet - VM_MEMORY=4096 - VM_CPU=4 - ARCHIVES_LOC=ue_eth - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=12 - BUILD_OPTIONS="--UE" - NBARGS=$[$NBARGS+256] - ;; - flexran-rtc) - VM_NAME=ci-flexran-rtc - ARCHIVES_LOC=flexran - LOG_PATTERN=.Rel14.txt - NB_PATTERN_FILES=1 - BUILD_OPTIONS="cmake . && make -j2" - NBARGS=$[$NBARGS+256] - ;; - l1-sim) - VM_NAME=ci-l1-sim - ARCHIVES_LOC=l1_sim - RUN_OPTIONS="complex" - NBARGS=$[$NBARGS+256] - ;; - rf-sim) - VM_NAME=ci-rf-sim - ARCHIVES_LOC=rf_sim - RUN_OPTIONS="complex" - NBARGS=$[$NBARGS+256] - ;; - l2-sim) - VM_NAME=ci-l2-sim - ARCHIVES_LOC=l2_sim - RUN_OPTIONS="complex" - NBARGS=$[$NBARGS+256] - ;; - *) - echo "" - echo "Syntax Error: Invalid Variant option -> $variant" - echo "" - variant_usage - exit 1 - esac + variant="$2" + check_set_variant ${2} shift shift ;; @@ -429,117 +548,45 @@ case $key in esac done -MANY_CMDS=$[$CREATE_CMD+$BUILD_CMD+$WAIT_CMD+$DESTROY_CMD+$TEST_CMD+$REPORT_BUILD_CMD+$REPORT_TEST_CMD] -if [ $MANY_CMDS -gt 1 ] -then - echo "Syntax Error: too many commands" - top_usage - exit 1 -fi +i=0 +for (( COUNT=1 ; COUNT<${#COMMAND[@]} ; COUNT++ )) +do + if [ ${COMMAND[${COMMANDS_NAME[$COUNT]}]} -eq 1 ] + then + COMMAND_KEY[$i]=${COMMANDS_NAME[$COUNT]} + (( i++ )) + fi +done -if [ $HELP_CMD -eq 1 ] +if [ ${COMMAND["help"]} -eq 1 ] then - if [ $MANY_CMDS -eq 0 ] - then - top_usage - exit 0 - fi - if [ $CREATE_CMD -eq 1 ] - then - create_usage - exit 0 - fi - if [ $BUILD_CMD -eq 1 ] - then - build_usage - exit 0 - fi - if [ $WAIT_CMD -eq 1 ] - then - wait_usage - exit 0 - fi - if [ $TEST_CMD -eq 1 ] - then - run_test_usage - exit 0 - fi - if [ $DESTROY_CMD -eq 1 ] - then - destroy_usage - exit 0 - fi - if [ $REPORT_BUILD_CMD -eq 1 ] - then - report_build_usage - exit 0 - fi - if [ $REPORT_TEST_CMD -eq 1 ] + if [ ${#COMMAND_KEY[@]} -ne 1 ] then - report_test_usage - exit 0 - fi + top_usage + else + USAGE_KEY=`echo ${COMMAND_KEY[0]} | sed -e "s#-#_#g"` + ${USAGE_KEY[0]}_usage + fi + exit 0 else - if [ $MANY_CMDS -eq 0 ] + if [ ${#COMMAND_KEY[@]} -gt 1 ] then - echo "Syntax Error: no command" + echo "Syntax Error, too many commands: ${COMMAND_KEY[@]}" top_usage exit 1 fi - # For create, mandatory options: jn, id. Optional: variant - if [ $CREATE_CMD -eq 1 ] && [ $NBARGS -ne 3 ] && [ $NBARGS -ne 259 ] - then - echo "Syntax Error: unsupported option(s) for create command" - create_usage - exit 1 - fi - # For build, mandatory options: jn, id, ws. Optional: variant, k, D - if [ $BUILD_CMD -eq 1 ] && [ $NBARGS -ne 7 ] && [ $NBARGS -ne 263 ] && [ $NBARGS -ne 15 ] && [ $NBARGS -ne 271 ] && [ $NBARGS -ne 23 ] && [ $NBARGS -ne 279 ] && [ $NBARGS -ne 31 ] && [ $NBARGS -ne 287 ] - then - echo "Syntax Error: unsupported option(s) for build command" - build_usage - exit 1 - fi - # For wait, mandatory options: jn, id, ws. Optional: variant, k - if [ $WAIT_CMD -eq 1 ] && [ $NBARGS -ne 7 ] && [ $NBARGS -ne 263 ] && [ $NBARGS -ne 15 ] && [ $NBARGS -ne 271 ] - then - echo "Syntax Error: unsupported option(s) for wait command" - wait_usage - exit 1 - fi - # For test, mandatory options: jn, id, ws. Optional: variant, k - if [ $TEST_CMD -eq 1 ] && [ $NBARGS -ne 7 ] && [ $NBARGS -ne 263 ] && [ $NBARGS -ne 15 ] && [ $NBARGS -ne 271 ] - then - echo "Syntax Error: unsupported option(s) for test command" - run_test_usage - exit 1 - fi - # For destroy, mandatory options: jn, id. - if [ $DESTROY_CMD -eq 1 ] && [ $NBARGS -ne 3 ] - then - echo "Syntax Error: unsupported option(s) for destroy command" - destroy_usage - exit 1 - fi - # For report-build, mandatory options: jn, id, ws, gu, pu, br,co. - # or: jn, id, ws, gu, mr, sb, sc, tb, tc. - if [ $REPORT_BUILD_CMD -eq 1 ] && [ $NBARGS -ne 15463 ] && [ $NBARGS -ne 49255 ] - then - echo "Syntax Error: unsupported option(s) for report-build command" - report_build_usage - exit 1 - fi - # For report-test, mandatory options: jn, id, ws, gu, pu, br,co. - # or: jn, id, ws, gu, mr, sb, sc, tb, tc. - if [ $REPORT_TEST_CMD -eq 1 ] && [ $NBARGS -ne 15463 ] && [ $NBARGS -ne 49255 ] + + if [ -z "${COMMAND_KEY[0]}" ] then - echo "Syntax Error: unsupported option(s) for report-test command" - report_test_usage + echo "Syntax Error: no command, specify one of: ${COMMANDS_NAME[@]}" + top_usage exit 1 fi + + check_command_options $NBARGS MANDATORY_OPTMASK[@] $ALLOWED_OPTMASK ${COMMAND_KEY[0]} fi -if [ $REPORT_BUILD_CMD -ne 1 ] && [ $REPORT_TEST_CMD -ne 1 ] +if [ ${COMMAND[${COMMANDS_NAME[$REPORT_BUILD_CMD]}]} -ne 1 ] && [ ${COMMAND[${COMMANDS_NAME[$REPORT_TEST_CMD]}]} -ne 1 ] then # Checking uvt-kvm is installed UVT_KVM_PATH=`which uvt-kvm | grep -c uvt-kvm` @@ -563,7 +610,7 @@ VM_CMDS=${VM_NAME}_cmds.txt ARCHIVES_LOC=${JENKINS_WKSP}/archives/${ARCHIVES_LOC} STATUS=0 -if [ $CREATE_CMD -eq 1 ] +if [ ${COMMAND[${COMMANDS_NAME[$CREATE_CMD]}]} -eq 1 ] then if [[ $VM_NAME =~ .*-l2-sim.* ]] then @@ -573,7 +620,7 @@ then create_vm fi fi -if [ $BUILD_CMD -eq 1 ] +if [ ${COMMAND[${COMMANDS_NAME[$BUILD_CMD]}]} -eq 1 ] then if [[ $VM_NAME =~ .*-l2-sim.* ]] then @@ -587,7 +634,7 @@ then check_on_vm_build fi fi -if [ $WAIT_CMD -eq 1 ] +if [ ${COMMAND[${COMMANDS_NAME[$WAIT_CMD]}]} -eq 1 ] then if [[ $VM_NAME =~ .*-l2-sim.* ]] then @@ -601,7 +648,7 @@ then check_on_vm_build fi fi -if [ $TEST_CMD -eq 1 ] +if [ ${COMMAND[${COMMANDS_NAME[$TEST_CMD]}]} -eq 1 ] then # Comment out or delete the following lines if you want to run L1-simulator in your branch and/or merge request if [[ $VM_NAME =~ .*-l1-sim.* ]] @@ -613,26 +660,26 @@ then fi # end to comment out for L1-simulator # Comment out or delete the following lines if you want to run RF-simulator in your branch and/or merge request - if [[ $VM_NAME =~ .*-rf-sim.* ]] - then - echo "Currently RF-Simulator Testing is not implemented / enabled" - echo "Comment out these lines in ./ci-scripts/oai-ci-vm-tool if you want to run it" - echo "STATUS seems OK" - exit $STATUS - fi +# if [[ $VM_NAME =~ .*-rf-sim.* ]] +# then +# echo "Currently RF-Simulator Testing is not implemented / enabled" +# echo "Comment out these lines in ./ci-scripts/oai-ci-vm-tool if you want to run it" +# echo "STATUS seems OK" +# exit $STATUS +# fi # end to comment out for RF-simulator ARCHIVES_LOC=${ARCHIVES_LOC}/test run_test_on_vm fi -if [ $DESTROY_CMD -eq 1 ] +if [ ${COMMAND[${COMMANDS_NAME[$DESTROY_CMD]}]} -eq 1 ] then destroy_vm fi -if [ $REPORT_BUILD_CMD -eq 1 ] +if [ ${COMMAND[${COMMANDS_NAME[$REPORT_BUILD_CMD]}]} -eq 1 ] then report_build fi -if [ $REPORT_TEST_CMD -eq 1 ] +if [ ${COMMAND[${COMMANDS_NAME[$REPORT_TEST_CMD]}]} -eq 1 ] then report_test fi diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index 8dbbc9a5440ede75dd0c3ffc2db852612ec30691..0199544083eb4933d0acadf2113cb608abe4eed6 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -20,12 +20,12 @@ # * contact@openairinterface.org # */ -function run_test_usage { +function test_usage { echo "OAI CI VM script" echo " Original Author: Raphael Defosseux" echo " Requirements:" echo " -- uvtool uvtool-libvirt apt-cacher" - echo " -- xenial image already synced" + echo " -- $VM_OSREL image already synced" echo " Default:" echo " -- eNB with USRP" echo "" @@ -126,7 +126,7 @@ function start_basic_sim_ue { echo "echo \"cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/\"" > $1 echo "sudo chmod 777 /home/ubuntu/tmp/cmake_targets/lte_build_oai/build/" >> $1 echo "cd /home/ubuntu/tmp/cmake_targets/lte_build_oai/build" >> $1 - echo "echo \"./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_NB_RBS --log_config.global_log_options level,nocolor --basicsim\" > ./my-lte-uesoftmodem-run.sh" >> $1 + echo "echo \"./lte-uesoftmodem -C ${LOC_FREQUENCY}000000 -r $LOC_NB_RBS --log_config.global_log_options nocolor,level --basicsim\" > ./my-lte-uesoftmodem-run.sh" >> $1 echo "chmod 775 ./my-lte-uesoftmodem-run.sh" >> $1 echo "cat ./my-lte-uesoftmodem-run.sh" >> $1 echo "if [ -e /home/ubuntu/tmp/cmake_targets/log/$LOC_UE_LOG_FILE ]; then sudo sudo rm -f /home/ubuntu/tmp/cmake_targets/log/$LOC_UE_LOG_FILE; fi" >> $1 @@ -483,7 +483,7 @@ function install_epc_on_vm { echo "Creating test EPC VM ($LOC_EPC_VM_NAME) on Ubuntu Cloud Image base" echo "############################################################" acquire_vm_create_lock - uvt-kvm create $LOC_EPC_VM_NAME release=xenial --unsafe-caching + uvt-kvm create $LOC_EPC_VM_NAME release=$VM_OSREL --unsafe-caching echo "Waiting for VM to be started" uvt-kvm wait $LOC_EPC_VM_NAME --insecure release_vm_create_lock @@ -629,14 +629,19 @@ function retrieve_real_epc_ip_addr { local LOC_EPC_VM_CMDS=$2 local LOC_EPC_VM_IP_ADDR=$3 - if [ $LTEBOX -eq 1 ] + if [[ "$EPC_IPADDR" == "" ]] then - # in our configuration file, we are using pool 5 - echo "ifconfig tun5 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $LOC_EPC_VM_CMDS - REAL_EPC_IP_ADDR=`ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_EPC_VM_IP_ADDR < $LOC_EPC_VM_CMDS` - echo "EPC IP Address is : $REAL_EPC_IP_ADDR" - rm $LOC_EPC_VM_CMDS + if [ $LTEBOX -eq 1 ] + then + # in our configuration file, we are using pool 5 + echo "ifconfig tun5 | egrep \"inet addr\" | sed -e 's#^.*inet addr:##' -e 's# P-t-P:.*\$##'" > $LOC_EPC_VM_CMDS + REAL_EPC_IP_ADDR=`ssh -T -o StrictHostKeyChecking=no ubuntu@$LOC_EPC_VM_IP_ADDR < $LOC_EPC_VM_CMDS` + rm $LOC_EPC_VM_CMDS + fi + else + REAL_EPC_IP_ADDR=$EPC_TUN_IPADDR fi + echo "EPC IP Address is : $REAL_EPC_IP_ADDR" } function terminate_epc { @@ -1093,7 +1098,7 @@ function run_test_on_vm { echo "############################################################" echo "OAI CI VM script" echo "############################################################" - if [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-l2-sim.* )) || (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-rf-sim.* )) ]] + if [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-l2-sim.* )) ]] || [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-rf-sim.* )) ]] then ENB_VM_NAME=`echo $VM_NAME | sed -e "s#l2-sim#enb-ethernet#" -e "s#rf-sim#enb-ethernet#"` ENB_VM_CMDS=${ENB_VM_NAME}_cmds.txt @@ -1110,7 +1115,7 @@ function run_test_on_vm { echo "JENKINS_WKSP = $JENKINS_WKSP" echo "ARCHIVES_LOC = $ARCHIVES_LOC" - if [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-l2-sim.* )) || (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-rf-sim.* )) ]] + if [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-l2-sim.* )) ]] || [[ (( "$RUN_OPTIONS" == "complex" ) && ( $VM_NAME =~ .*-rf-sim.* )) ]] then echo "############################################################" echo "Waiting for ENB VM to be started" @@ -1142,7 +1147,7 @@ function run_test_on_vm { echo "No run on VM testing for this variant currently" return fi - + if [[ $RUN_OPTIONS =~ .*run_exec_autotests.* ]] then echo "############################################################" @@ -1261,17 +1266,28 @@ function run_test_on_vm { EPC_VM_NAME=`echo $VM_NAME | sed -e "s#basic-sim#epc#"` EPC_VM_CMDS=${EPC_VM_NAME}_cmds.txt LTEBOX=0 - install_epc_on_vm $EPC_VM_NAME $EPC_VM_CMDS - EPC_VM_IP_ADDR=`uvt-kvm ip $EPC_VM_NAME` + if [[ "$EPC_IPADDR" == "" ]] + then + # Creating a VM for EPC and installing SW + install_epc_on_vm $EPC_VM_NAME $EPC_VM_CMDS + EPC_VM_IP_ADDR=`uvt-kvm ip $EPC_VM_NAME` - # Starting EPC - start_epc $EPC_VM_NAME $EPC_VM_CMDS $EPC_VM_IP_ADDR + # Starting EPC + start_epc $EPC_VM_NAME $EPC_VM_CMDS $EPC_VM_IP_ADDR + else + echo "We will use EPC on $EPC_IPADDR" + EPC_VM_IP_ADDR=$EPC_IPADDR + fi + - # Retrieve EPC real IP address - retrieve_real_epc_ip_addr $EPC_VM_NAME $EPC_VM_CMDS $EPC_VM_IP_ADDR + # Retrieve EPC real IP address + retrieve_real_epc_ip_addr $EPC_VM_NAME $EPC_VM_CMDS $EPC_VM_IP_ADDR + - TRANS_MODES=("fdd" "tdd") - BW_CASES=(05 10 20) + #TRANS_MODES=("fdd" "tdd") + #BW_CASES=(05 10 20) + TRANS_MODES=("fdd") + BW_CASES=(05) for TMODE in ${TRANS_MODES[@]} do @@ -1311,7 +1327,10 @@ function run_test_on_vm { return fi get_ue_ip_addr $VM_CMDS $VM_IP_ADDR 1 - + + full_terminate + continue + echo "############################################################" echo "Pinging the UE" echo "############################################################" @@ -1453,7 +1472,10 @@ function run_test_on_vm { echo "Terminate EPC" echo "############################################################" - terminate_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR + if [[ "$EPC_IPADDR" == "" ]] + then + terminate_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR + fi full_basic_sim_destroy @@ -1481,43 +1503,53 @@ function run_test_on_vm { rm -Rf $ARCHIVES_LOC fi mkdir --parents $ARCHIVES_LOC - + if [[ "$EPC_IPADDR" == "" ]] + then # Creating a VM for EPC and installing SW - EPC_VM_NAME=`echo $VM_NAME | sed -e "s#rf-sim#epc#"` - EPC_VM_CMDS=${EPC_VM_NAME}_cmds.txt - LTEBOX=0 - install_epc_on_vm $EPC_VM_NAME $EPC_VM_CMDS - EPC_VM_IP_ADDR=`uvt-kvm ip $EPC_VM_NAME` - + EPC_VM_NAME=`echo $VM_NAME | sed -e "s#rf-sim#epc#"` + EPC_VM_CMDS=${EPC_VM_NAME}_cmds.txt + LTEBOX=0 + install_epc_on_vm $EPC_VM_NAME $EPC_VM_CMDS + EPC_VM_IP_ADDR=`uvt-kvm ip $EPC_VM_NAME` + fi # withS1 configuration is not working #EPC_CONFIGS=("wS1" "noS1") #TRANS_MODES=("fdd" "tdd") #BW_CASES=(05 10 20) - EPC_CONFIGS=("noS1") + EPC_CONFIGS=("noS1" "wS1") TRANS_MODES=("fdd") BW_CASES=(05) for CN_CONFIG in ${EPC_CONFIGS[@]} do if [[ $CN_CONFIG =~ .*wS1.* ]] then - echo "############################################################" - echo "Start EPC for the wS1 configuration" - echo "############################################################" - start_epc $EPC_VM_NAME $EPC_VM_CMDS $EPC_VM_IP_ADDR - - # Retrieve EPC real IP address - retrieve_real_epc_ip_addr $EPC_VM_NAME $EPC_VM_CMDS $EPC_VM_IP_ADDR - S1_NOS1_CFG=1 + if [[ "$EPC_IPADDR" == "" ]] + then + echo "############################################################" + echo "Start EPC for the wS1 configuration" + echo "############################################################" + start_epc $EPC_VM_NAME $EPC_VM_CMDS $EPC_VM_IP_ADDR + # Retrieve EPC real IP address + retrieve_real_epc_ip_addr $EPC_VM_NAME $EPC_VM_CMDS $EPC_VM_IP_ADDR + S1_NOS1_CFG=1 + else + echo "############################################################" + echo "Using external EPC " $EPC_IPADDR + echo "############################################################" + $EPC_VM_IP_ADDR=$EPC_IPADDR + S1_NOS1_CFG=1 + LTEBOX=0 + fi else - echo "############################################################" - echo "Terminate EPC" - echo "############################################################" - terminate_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR + echo "############################################################" + echo "Terminate EPC" + echo "############################################################" + terminate_epc $EPC_VM_CMDS $EPC_VM_IP_ADDR - echo "############################################################" - echo "Running now in a no-S1 configuration" - echo "############################################################" - S1_NOS1_CFG=0 + echo "############################################################" + echo "Running now in a no-S1 " + echo "############################################################" + S1_NOS1_CFG=0 fi for TMODE in ${TRANS_MODES[@]} do @@ -1539,7 +1571,7 @@ function run_test_on_vm { echo "${CN_CONFIG} : Starting the eNB in ${TMODE}-${BW}MHz mode" echo "############################################################" CURRENT_ENB_LOG_FILE=${TMODE}_${BW}MHz_${CN_CONFIG}_enb.log - start_rf_sim_enb $ENB_VM_CMDS $ENB_VM_IP_ADDR $EPC_VM_IP_ADDR $CURRENT_ENB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG + start_rf_sim_enb $ENB_VM_CMDS "$ENB_VM_IP_ADDR" "$EPC_VM_IP_ADDR" $CURRENT_ENB_LOG_FILE $PRB $CONF_FILE $S1_NOS1_CFG echo "############################################################" echo "${CN_CONFIG} : Starting the UE"