From c8a5aeadbffe78a8e37a191d81cf3fc07d38e8a0 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 27 Oct 2015 10:07:12 +0100 Subject: [PATCH 01/49] updated xml file for lte-softmodem tests --- cmake_targets/autotests/test_case_list.xml | 39 ++++++++-------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 1425eb56a9..9bc669e106 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -1,6 +1,6 @@ -mozart stevens calisson nano amerique +stevens calisson nano /mnt/sradio/TEST_RESULTS https://gitlab.eurecom.fr/oai/openairinterface5g.git https://gitlab.eurecom.fr/oai/openair-cn.git @@ -755,35 +755,23 @@ 300 /tmp - $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code 1 - $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code 208 - $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code 95 - - + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code 2 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code 9 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP - iperf + iperf $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + /tmp - - - $OPENAIR_DIR/cmake_targets/build_oai - --eNB -w USRP - iperf - - $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem - - - - - /tmp - - + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code 4 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code 5 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code 6 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP iperf @@ -794,10 +782,11 @@ /tmp - - - $OPENAIR_DIR/cmake_targets/build_oai - --eNB -w USRP + BUILD/EPC/epc.local.enb.conf.in MCC 7 + BUILD/EPC/epc.local.enb.conf.in MNC 8 + BUILD/EPC/epc.local.enb.conf.in TAC 9 + SCRIPTS/build_epc -c -SCRIPTS/build_hss -c -l + iperf $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem From 36c9872e992bbe4b9b958d472650a1b4f6c0cf54 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 27 Oct 2015 10:33:49 +0100 Subject: [PATCH 02/49] fixed minor bugs in perf_oai script --- cmake_targets/tools/perf_oai.bash | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake_targets/tools/perf_oai.bash b/cmake_targets/tools/perf_oai.bash index 2254f64ea3..42d6be0716 100755 --- a/cmake_targets/tools/perf_oai.bash +++ b/cmake_targets/tools/perf_oai.bash @@ -68,7 +68,7 @@ declare MAX_RATE=1000 # set paths to the required binaries and check if the required binaries are available ENB_CONFIG=$OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -OAISIM_EXEC=$OPENAIR_DIR/targets/bin/oaisim_nos1 +OAISIM_EXEC=$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 BYPASSE_ITTI=0 OTGPLOT="$OPENAIR2_DIR/UTIL/OTG/OTGplot" PS2PDF="ps2pdf" @@ -301,8 +301,8 @@ oaisim_otg_stats(){ sync if [ ! -f $OAISIM_EXEC ]; then - echo_info "3.1 compiling OAISIM ($OPENAIR_TARGETS/cmake_targets/build_oai --oaisim -c)" - ($OPENAIR_TARGETS/cmake_targets/build_oai --oaisim -c >> results/perf_log.txt 2>&1 ) + echo_info "3.1 compiling OAISIM ($OPENAIR_DIR/cmake_targets/build_oai --oaisim -c --noS1)" + ($OPENAIR_DIR/cmake_targets/build_oai --oaisim -c --noS1 >> results/perf_log.txt 2>&1 ) build_stats=$? if [ $build_stats != 0 ] ; then echo_error "$OAISIM_EXEC cannot be built, check results/perf_log.txt file" From 49c70ff96a07190891935719d4bffe5ba0cf1b6b Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 27 Oct 2015 15:24:35 +0100 Subject: [PATCH 03/49] fixed sudo permission issue of autotests --- .../autotests/run_exec_autotests.bash | 45 ++++++------------- cmake_targets/build_oai | 9 +++- cmake_targets/tools/build_helper | 35 +++++++++++++++ cmake_targets/tools/init_nas_nos1 | 0 4 files changed, 56 insertions(+), 33 deletions(-) mode change 100644 => 100755 cmake_targets/tools/init_nas_nos1 diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash index c4d11b7ba4..cccce16b33 100755 --- a/cmake_targets/autotests/run_exec_autotests.bash +++ b/cmake_targets/autotests/run_exec_autotests.bash @@ -7,8 +7,11 @@ else exit 1 fi +trap handle_ctrl_c INT + source $OPENAIR_DIR/cmake_targets/tools/test_helper + #SUDO="sudo -E " tdir=$OPENAIR_DIR/cmake_targets/autotests rm -fr $tdir/bin $tdir/log @@ -36,7 +39,7 @@ cd $tdir #\param $12 -> class of the test case (compilation, execution) #\param $13 -> output of compilation program that needs to be found for test case to pass #\param $14 -> tags to help identify the test case for readability in output xml file -test_compile() { +function test_compile() { xUnit_start test_case_name=$1 @@ -130,8 +133,9 @@ test_compile() { #\param $12 -> class of the test case (compilation, execution) #\param $13 -> output of compilation program that needs to be found for test case to pass #\param $14 -> tags to help identify the test case for readability in output xml file +#\param $15 => password for the user to run certain commands as sudo -test_compile_and_run() { +function test_compile_and_run() { xUnit_start test_case_name=$1 log_dir=$tdir/log @@ -149,16 +153,13 @@ test_compile_and_run() { class=${12} compile_prog_out=${13} tags=${14} + mypassword=${15} build_dir=$tdir/$1/build exec_file=$build_dir/$6 #Temporary log file where execution log is stored. temp_exec_log=$log_dir/temp_log.txt - - - - #echo "log_dir = $log_dir" #echo "log_file = $log_file" #echo "exec_file = $exec_file" @@ -217,7 +218,8 @@ test_compile_and_run() { echo "" >> $log_file 2>&1 if [ -n "$pre_exec_file" ]; then - { eval "source $pre_exec_file $pre_exec_args"; } >> $log_file 2>&1 + { eval " echo '$mypassword' |sudo -S -E $pre_exec_file $pre_exec_args " ; }>> $log_file 2>&1 + fi echo "Executing $exec_file $main_exec_args_array_index " echo "Executing $exec_file $main_exec_args_array_index " >> $log_file @@ -280,29 +282,8 @@ test_compile_and_run() { dbin=$OPENAIR_DIR/cmake_targets/autotests/bin dlog=$OPENAIR_DIR/cmake_targets/autotests/log -run_test() { -case=case$1; shift -cmd=$1; shift -expected=$3; shift -echo "expected = $expected" -exit -$cmd > $dlog/$case.txt 2>&1 -if [ $expected = "true" ] ; then - if $* $dlog/$case.txt; then - echo_success "test $case, command: $cmd ok" - else - echo_error "test $case, command: $cmd Failed" - fi -else - if $* $dlog/$case.txt; then - echo_error "test $case, command: $cmd Failed" - else - echo_success "test $case, command: $cmd ok" - fi -fi -} -print_help() { +function print_help() { echo_info ' This program runs automated test case system for OpenAirInterface You should have ubuntu 14.xx, updated, and the Linux kernel >= 3.14 @@ -314,11 +295,13 @@ Options ' } -main () { +function main () { RUN_GROUP=0 test_case_group="" test_case_group_array=() test_case_array=() +echo_info "Note that the user should be sudoer for executing certain commands, for example loading kernel modules" +read -s -p "Enter Password: " mypassword until [ -z "$1" ] do @@ -421,7 +404,7 @@ for search_expr in "${test_case_array[@]}" if [ "$class" == "compilation" ]; then test_compile "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" elif [ "$class" == "execution" ]; then - test_compile_and_run "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" + test_compile_and_run "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" "$mypassword" else echo "Unexpected class of test case...Exiting...." fi diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index af147d682a..f92b69c00d 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -54,6 +54,8 @@ CFLAGS_PROCESSOR_USER="" RUN_GROUP=0 TEST_CASE_GROUP="" +trap handle_ctrl_c INT + function print_help() { echo_info ' This program installs OpenAirInterface Software @@ -583,13 +585,16 @@ function main() { ##################### if [ "$OAI_TEST" = "1" ]; then echo_info "10. Running OAI pre commit tests (pre-ci) ..." + echo_info "The log file for the autotests is located here: $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log " + echo_info "You can hit CTRL-C any time to terminate the autotests..." rm -fr $OPENAIR_DIR/cmake_targets/autotests/log mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log if [ "$RUN_GROUP" -eq "1" ]; then - $SUDO $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" + $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log & else - $SUDO $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash + $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log & fi + wait else echo_info "10. Bypassing the Tests ..." fi diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 46997c2773..2e0e54f82b 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -319,3 +319,38 @@ set_openair_env(){ export OPENAIR_TARGETS=$openair_path/targets } +################################ +# Function to killall the subprocesses when Ctrl-C Key is hit +############################### +function handle_ctrl_c(){ +CURPID=$$ +ppid=$$ +arraycounter=1 +echo_info "** Trapped CTRL-C. Killing all subprocesses now..." +while true +do + FORLOOP=FALSE + # Get all the child process id + for i in `ps -ef| awk '$3 == '$ppid' { print $2 }'` + do + if [ $i -ne $CURPID ] ; then + procid[$arraycounter]=$i + arraycounter=`expr $arraycounter + 1` + ppid=$i + FORLOOP=TRUE + fi + done + if [ "$FORLOOP" = "FALSE" ] ; then + arraycounter=`expr $arraycounter - 1` + ## We want to kill child process id first and then parent id's + while [ $arraycounter -ne 0 ] + do + $SUDO kill -9 "${procid[$arraycounter]}" >/dev/null + arraycounter=`expr $arraycounter - 1` + done + exit + fi +done +} + + diff --git a/cmake_targets/tools/init_nas_nos1 b/cmake_targets/tools/init_nas_nos1 old mode 100644 new mode 100755 From a725a3a86b11743c70bd1b650330e8977cc42d70 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Wed, 28 Oct 2015 11:17:58 +0100 Subject: [PATCH 04/49] some error checks in ulsim added --- openair1/SIMULATION/LTE_PHY/ulsim.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index dd697899b8..978511f556 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -581,6 +581,10 @@ int main(int argc, char **argv) sprintf(bler_fname,"ULbler_mcs%d_nrb%d_ChannelModel%d_nsim%d.csv",mcs,nb_rb,chMod,n_frames); bler_fd = fopen(bler_fname,"w"); + if (bler_fd==NULL) { + fprintf(stderr,"Problem creating file %s\n",bler_fname); + exit(-1); + } fprintf(bler_fd,"#SNR;mcs;nb_rb;TBS;rate;errors[0];trials[0];errors[1];trials[1];errors[2];trials[2];errors[3];trials[3]\n"); @@ -589,13 +593,16 @@ int main(int argc, char **argv) hostname[1023] = '\0'; gethostname(hostname, 1023); printf("Hostname: %s\n", hostname); - char dirname[FILENAME_MAX]; - sprintf(dirname, "%s//SIMU/USER/pre-ci-logs-%s", getenv("OPENAIR_TARGETS"),hostname); - mkdir(dirname, 0777); - sprintf(time_meas_fname,"%s/time_meas_prb%d_mcs%d_antrx%d_channel%s_tx%d.csv", - dirname, + //char dirname[FILENAME_MAX]; + //sprintf(dirname, "%s//SIMU/USER/pre-ci-logs-%s", getenv("OPENAIR_TARGETS"),hostname); + //mkdir(dirname, 0777); + sprintf(time_meas_fname,"time_meas_prb%d_mcs%d_antrx%d_channel%s_tx%d.csv", N_RB_DL,mcs,n_rx,channel_model_input,transmission_mode); time_meas_fd = fopen(time_meas_fname,"w"); + if (time_meas_fd==NULL) { + fprintf(stderr,"Cannot create file %s!\n",time_meas_fname); + exit(-1); + } } if(abstx) { From 1ee0fe7bfe05d10e8015c3668d8d90e2b5ebf13f Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 28 Oct 2015 11:37:36 +0100 Subject: [PATCH 05/49] updated build script for removing build files, updating log files --- .../autotests/run_exec_autotests.bash | 5 ++-- cmake_targets/autotests/test_case_list.xml | 27 ++++++++++++------- cmake_targets/build_oai | 9 ++++--- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash index cccce16b33..498b733c6b 100755 --- a/cmake_targets/autotests/run_exec_autotests.bash +++ b/cmake_targets/autotests/run_exec_autotests.bash @@ -14,8 +14,8 @@ source $OPENAIR_DIR/cmake_targets/tools/test_helper #SUDO="sudo -E " tdir=$OPENAIR_DIR/cmake_targets/autotests -rm -fr $tdir/bin $tdir/log -mkdir -p $tdir/bin $tdir/log +rm -fr $tdir/bin +mkdir -p $tdir/bin results_file="$tdir/log/results_autotests.xml" updated=$(svn st -q $OPENAIR_DIR) @@ -277,6 +277,7 @@ function test_compile_and_run() { let "tags_array_index++" done # End of for loop (nindex) fi + rm -fr $build_dir } dbin=$OPENAIR_DIR/cmake_targets/autotests/bin diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 9bc669e106..906bee963a 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -753,18 +753,18 @@ nano oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* ltebox* 300 - /tmp targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code 2 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code 9 - $OPENAIR_DIR/cmake_targets/build_oai + $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP - iperf + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem - + iperf + @@ -774,10 +774,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code 6 $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP - iperf + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + iperf + @@ -785,12 +787,19 @@ BUILD/EPC/epc.local.enb.conf.in MCC 7 BUILD/EPC/epc.local.enb.conf.in MNC 8 BUILD/EPC/epc.local.enb.conf.in TAC 9 - SCRIPTS/build_epc -c -SCRIPTS/build_hss -c -l - - iperf + SCRIPTS/build_epc + -c -l + SCRIPTS/build_hss + -c -l + + - $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + SCRITPTS/run_epc -l + SCRIPTS/run_hss -l + + iperf + 2 diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index f92b69c00d..f1dbad1c82 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -585,14 +585,17 @@ function main() { ##################### if [ "$OAI_TEST" = "1" ]; then echo_info "10. Running OAI pre commit tests (pre-ci) ..." - echo_info "The log file for the autotests is located here: $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log " + read -s -p "Enter Password: " mypassword + echo -e "\n" + echo_info "The log file for the autotest script for debugging is located here: $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log " + echo_info "The results of autotests results is located here: $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " echo_info "You can hit CTRL-C any time to terminate the autotests..." rm -fr $OPENAIR_DIR/cmake_targets/autotests/log mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log if [ "$RUN_GROUP" -eq "1" ]; then - $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log & + echo '$mypassword' | $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash -g "$TEST_CASE_GROUP" >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log & else - $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log & + echo '$mypassword' | $OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash >& $OPENAIR_DIR/cmake_targets/autotests/log/autotests.log & fi wait else From ffb486a5cb741d883fae090d4d76b3a87b8a0cdb Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 28 Oct 2015 11:52:27 +0100 Subject: [PATCH 06/49] removed references to EPC compilation in build script --- cmake_targets/build_oai | 36 +++--------------------------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index f1dbad1c82..6d337c6d52 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -82,8 +82,6 @@ Options Makes the LTE softmodem --UE Makes the UE specific parts (ue_ip, usim, nvram) ---EPC - Makes the EPC (MME-SPGW, HSS) --RRH Makes the RRH -r | --3gpp-release @@ -118,8 +116,8 @@ Options Usage (first build): oaisim (eNB + UE): ./build_oai -I -g --oaisim -x --install-system-files - Eurecom EXMIMO + COTS UE : ./build_oai -I -g --eNB --EPC -x --install-system-files - NI/ETTUS B201 + COTS UE : ./build_oai -I -g --eNB --EPC -x --install-system-files -w USRP + Eurecom EXMIMO + COTS UE : ./build_oai -I -g --eNB -x --install-system-files + NI/ETTUS B201 + COTS UE : ./build_oai -I -g --eNB -x --install-system-files -w USRP Usage (Regular): oaisim : ./build_oai --oaisim -x Eurecom EXMIMO + OAI ENB : ./build_oai --eNB -x @@ -161,10 +159,6 @@ function main() { UE=1 echo_info "Will compile UE" shift;; - --EPC) - EPC=1 - echo_info "Will compile EPC" - shift;; --RRH) RRH=1 echo_info "Will compile RRH" @@ -418,7 +412,7 @@ function main() { # EXMIMO drivers & firmware loader ############### - if [ "$HW" = "EXMIMO" -a "$EPC" = "0" ] ; then + if [ "$HW" = "EXMIMO" ] ; then echo_info "Compiling Express MIMO 2 board drivers" compilations \ @@ -556,30 +550,6 @@ function main() { rrh_gw $dbin/rrh_gw fi - # EPC compilation - ################## - if [ "$EPC" = "1" ] ; then - echo_info "Compiling EPC" - # Example HSS and EPC run on the same host - if [ "$CLEAN" = "1" ]; then - $OPENAIR_DIR/cmake_targets/tools/build_epc --clean --debug --transport-tcp-only --transport-prefer-tcp --s6a-server - $OPENAIR_DIR/cmake_targets/tools/build_hss --clean --debug --transport-tcp-only --transport-prefer-tcp --fqdn `hostname --fqdn` --connect-to-mme `hostname --fqdn` - else - $OPENAIR_DIR/cmake_targets/tools/build_epc --debug --transport-tcp-only --transport-prefer-tcp --s6a-server - $OPENAIR_DIR/cmake_targets/tools/build_hss --debug --transport-tcp-only --transport-prefer-tcp --fqdn `hostname --fqdn` --connect-to-mme `hostname --fqdn` - fi - - # if [ "$INSTALL_SYSTEM_FILES" = "1" ] ;then - # if [ -f $dbin/hss.conf ] ; then - # sed -e 's/ *= */=/' $dbin/hss.conf > $dconf/hss.conf.nospace - # source $dconf/hss.conf.nospace - # rm -f $dconf/hss.conf.nospace - # create_hss_database root linux "$MYSQL_user" "$MYSQL_pass" "$MYSQL_db" - # else - # echo_warning "not created HSS database: config not found" - # fi - # fi - fi # Auto-tests ##################### From 5ca76645ca1233a4549107bd4b2d0b46b3dbf07b Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Thu, 29 Oct 2015 12:33:15 +0100 Subject: [PATCH 07/49] added python-pip, paramiko installation for autotests --- cmake_targets/tools/build_helper | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 2e0e54f82b..e6cdd87585 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -255,7 +255,8 @@ check_install_oai_software() { openssl \ python \ subversion \ - xmlstarlet + xmlstarlet \ + python-pip $SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so if [ `lsb_release -rs` = '12.04' ] ; then install_nettle_from_source @@ -263,6 +264,7 @@ check_install_oai_software() { else $SUDO apt-get install -y libgnutls-dev nettle-dev nettle-bin fi + $SUDO pip install paramiko install_asn1c_from_source } From 2704037a65e9c23853302bf3463d33d513a46ecc Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 30 Oct 2015 14:12:56 +0100 Subject: [PATCH 08/49] added minor options to ctr-c handler in build script --- cmake_targets/tools/build_helper | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index e6cdd87585..d45f0fedbc 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -346,7 +346,11 @@ do arraycounter=`expr $arraycounter - 1` ## We want to kill child process id first and then parent id's while [ $arraycounter -ne 0 ] - do + do + echo "first we send ctrl-c to program" + $SUDO kill -INT "${procid[$arraycounter]}" + sleep 5 + echo "Now we force kill if that didn't work" $SUDO kill -9 "${procid[$arraycounter]}" >/dev/null arraycounter=`expr $arraycounter - 1` done From dc440717cdc3a0a0eba1884a2989dc5a289bd3f0 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 10 Nov 2015 02:37:09 +0100 Subject: [PATCH 09/49] added fixes for controlling bandrich UE remotely --- cmake_targets/autotests/test_case_list.xml | 38 +++--- .../tools/configure_cots_bandrich_ue.py | 118 ++++++++++++++++++ cmake_targets/autotests/tools/search_repl.py | 32 +++++ .../autotests/tools/wdial.bandrich.conf | 36 ++++++ cmake_targets/tools/build_helper | 5 +- 5 files changed, 212 insertions(+), 17 deletions(-) create mode 100644 cmake_targets/autotests/tools/configure_cots_bandrich_ue.py create mode 100644 cmake_targets/autotests/tools/search_repl.py create mode 100644 cmake_targets/autotests/tools/wdial.bandrich.conf diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 906bee963a..0163918520 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -1,11 +1,11 @@ -stevens calisson nano +stevens calisson amerique /mnt/sradio/TEST_RESULTS https://gitlab.eurecom.fr/oai/openairinterface5g.git https://gitlab.eurecom.fr/oai/openair-cn.git feature-34-test_framework - develop + feature-17-test_framework oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* ltebox* @@ -750,20 +750,24 @@ calisson stevens - nano + amerique oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* ltebox* - 300 + 60 /tmp targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code 9 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code 208 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code 92 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code 208 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code 92 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address ({ipv4="192.168.12.26";ipv6="192:168:30::17";active="yes";preference="ipv4";}) $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem - - iperf + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf + iperf -s @@ -776,17 +780,19 @@ --eNB -w USRP - $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue --start-ue - iperf + ping 192.172.0.1 /tmp - BUILD/EPC/epc.local.enb.conf.in MCC 7 - BUILD/EPC/epc.local.enb.conf.in MNC 8 - BUILD/EPC/epc.local.enb.conf.in TAC 9 + BUILD/EPC/epc.local.enb.conf.in MCC 208 + BUILD/EPC/epc.local.enb.conf.in MNC 92 + BUILD/EPC/epc.local.enb.conf.in TAC 1 + BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI eth1 + BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI 192.168.12.82/24 SCRIPTS/build_epc -c -l SCRIPTS/build_hss @@ -794,11 +800,11 @@ - SCRITPTS/run_epc -l + /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox - SCRIPTS/run_hss -l + /opt/hss_sim0609/starthss - iperf + iperf -s diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py new file mode 100644 index 0000000000..6408ef5aee --- /dev/null +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -0,0 +1,118 @@ +import time +import serial +import os +from pyroute2 import IPRoute +import sys +import re +import threading +import signal +import traceback + +# configure the serial connections (the parameters differs on the device you are connecting to) +serial_port = '/dev/ttyUSB2' +bandrich_ppd_config = '$OPENAIR_DIR/cmake_targets/autotests/tools/wdial.bandrich.conf' + +exit_flag=0 + +def signal_handler(signal, frame): + print('You pressed Ctrl+C!') + print('Resetting the UE to detached state') + timeout=10 + exit_flag=1 + send_command('AT+CGATT=0' , 'OK' , timeout) + sys.exit(0) + +signal.signal(signal.SIGINT, signal_handler) + +ser = serial.Serial( + port=serial_port, + #baudrate=9600, + #parity=serial.PARITY_ODD, + #stopbits=serial.STOPBITS_TWO, + #bytesize=serial.EIGHTBITS +) + +#ser.open() +#ser.isOpen() + +class pppThread (threading.Thread): + def __init__(self, threadID, name, counter): + threading.Thread.__init__(self) + self.threadID = threadID + self.name = name + self.counter = counter + def run(self): + print "Starting " + self.name + #Here we keep running pppd thread in indefinite loop as this script terminates sometimes + #while 1: + while 1: + time.sleep(5) #Hard coded, do not reduce this number! + print "Starting wvdial now..." + print 'exit_flag = ' + str(exit_flag) + send_command('AT+CGATT=1','OK', 300) + os.system('wvdial -C ' + bandrich_ppd_config + '' ) + if exit_flag == 1: + print "Exit flag set to true. Exiting pppThread now" + print "Terminating wvdial now..." + +def send_command (cmd, response, timeout): + count=0 + sleep_duration = 1 + while count <= timeout: + ser.write (cmd + '\r\n') + out = '' + time.sleep(sleep_duration) + count = count + sleep_duration + while ser.inWaiting() > 0: + out += ser.read(1) + print 'out = <' + out + '> response = <' + response + '> \n' + if re.search(response, out): + break + + + +def start_ue () : + #print 'Enter your commands below.\r\nInsert "exit" to leave the application.' + timeout=60 #timeout in seconds + send_command('AT', 'OK' , timeout) + send_command('AT+CGATT=0' , 'OK' , timeout) + send_command('AT+CGATT=1','OK', 300) + #os.system('wvdial -C ' + bandrich_ppd_config + ' &' ) + + thread_ppp = pppThread(1, "ppp_thread", 1) + thread_ppp.start() + + iface='ppp0' + + while 1: + time.sleep ( 2) + #Now we check if ppp0 interface is up and running + try: + if exit_flag == 1: + break + ip = IPRoute() + idx = ip.link_lookup(ifname=iface)[0] + os.system ('route add 192.172.0.1 ppp0') + break + except Exception, e: + error = ' Interface ' + iface + 'does not exist...' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + + thread_ppp.join() + +def stop_ue(): + timeout=60 + os.system('killall wvdial') + send_command('AT', 'OK' , timeout) + send_command('AT+CGATT=0' , 'OK' , timeout) + +for arg in sys.argv[1:]: + if arg == '--start-ue' : + start_ue() + elif arg == '--stop-ue' : + stop_ue() + else : + print " Script called with wrong arguments, arg = " + arg + sys.exit() diff --git a/cmake_targets/autotests/tools/search_repl.py b/cmake_targets/autotests/tools/search_repl.py new file mode 100644 index 0000000000..9c49bcc4e5 --- /dev/null +++ b/cmake_targets/autotests/tools/search_repl.py @@ -0,0 +1,32 @@ +#!/usr/bin/python +import sys +import re + +#Arg 1 name of file +#Arg 2 keyword +#arg 3 replacement text +#Note that these should be seperated by spaces +if len(sys.argv) != 4: + print "search_repl.py: Wrong number of arguments. This program needs 3 arguments" + sys.exit() +filename = sys.argv[1] +keyword = sys.argv[2] +replacement_text = sys.argv[3] + +file = open(filename, 'r') +string = file.read() +file.close() + + +if keyword == 'mme_ip_address': + #string = (re.sub(r"mme_ip_address\s*=\s*\([^\$]+)\)\s*;\s*", r"<% tex \1 %>", t, re.M) + replacement_text = keyword + ' = ' + replacement_text + ' ; ' + string = re.sub(r"mme_ip_address\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M) +else : + replacement_text = keyword + ' = \" ' + replacement_text + '\" ; ' + string = re.sub(r"%s\s*=\s*\"([^\$]+?)\"\s*;" % keyword , replacement_text, string, re.M) + +file = open(filename, 'w') +file.write(string) +file.close() + diff --git a/cmake_targets/autotests/tools/wdial.bandrich.conf b/cmake_targets/autotests/tools/wdial.bandrich.conf new file mode 100644 index 0000000000..e1b64568f9 --- /dev/null +++ b/cmake_targets/autotests/tools/wdial.bandrich.conf @@ -0,0 +1,36 @@ +[Dialer Defaults] +Modem = /dev/ttyUSB0 +ISDN = off +Modem Type = Analog Modem +Baud = 9600 +Init = ATZ +Init2 = AT+CPIN? +Init3 = AT+CGREG? +Init4 = AT+COPS? +Init5 = AT+CSQ +Init6 = +Init7 = AT+CGATT=1 +Init8 = +Init9 = +Phone = *99***1# +Phone1 = +Phone2 = +Phone3 = +Phone4 = +Dial Prefix = +Dial Attempts = 1 +Dial Command = ATM1L3DT +Ask Password = off +Password = '' +Username = ImaginLab +Auto Reconnect = off +Abort on Busy = off +Carrier Check = on +Check Def Route = on +Abort on No Dialtone = on +Stupid Mode = on +Idle Seconds = 0 +Auto DNS = on +;Minimize = off +;Dock = off +;Do NOT edit this file by hand! diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index d45f0fedbc..d58d7018ed 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -256,7 +256,9 @@ check_install_oai_software() { python \ subversion \ xmlstarlet \ - python-pip + python-pip \ + pydb \ + wvdial $SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so if [ `lsb_release -rs` = '12.04' ] ; then install_nettle_from_source @@ -265,6 +267,7 @@ check_install_oai_software() { $SUDO apt-get install -y libgnutls-dev nettle-dev nettle-bin fi $SUDO pip install paramiko + $SUDO pip install pyroute2 install_asn1c_from_source } From cd71443d1b5b537d7b378ab55eb4969e29d943c9 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 10 Nov 2015 10:49:38 +0100 Subject: [PATCH 10/49] added keyword to handle numeric substitution --- cmake_targets/autotests/tools/search_repl.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake_targets/autotests/tools/search_repl.py b/cmake_targets/autotests/tools/search_repl.py index 9c49bcc4e5..43b023fccc 100644 --- a/cmake_targets/autotests/tools/search_repl.py +++ b/cmake_targets/autotests/tools/search_repl.py @@ -22,6 +22,9 @@ if keyword == 'mme_ip_address': #string = (re.sub(r"mme_ip_address\s*=\s*\([^\$]+)\)\s*;\s*", r"<% tex \1 %>", t, re.M) replacement_text = keyword + ' = ' + replacement_text + ' ; ' string = re.sub(r"mme_ip_address\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M) +elif keyword == 'N_RB_DL': + replacement_text = keyword + ' = ' + replacement_text + ' ; ' + string = re.sub(r"%s\s*=\s*([^\$]+?)\s*;" % keyword , replacement_text, string, re.M) else : replacement_text = keyword + ' = \" ' + replacement_text + '\" ; ' string = re.sub(r"%s\s*=\s*\"([^\$]+?)\"\s*;" % keyword , replacement_text, string, re.M) From 4b4e221323ebc481392a33ad75e37aaf9f994fbb Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 10 Nov 2015 16:18:42 +0100 Subject: [PATCH 11/49] fixed bugs related to COTS UE --- .../tools/configure_cots_bandrich_ue.py | 25 +++++++++++-------- cmake_targets/autotests/tools/search_repl.py | 2 +- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py index 6408ef5aee..7cc1f20f53 100644 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -59,16 +59,21 @@ def send_command (cmd, response, timeout): count=0 sleep_duration = 1 while count <= timeout: - ser.write (cmd + '\r\n') - out = '' - time.sleep(sleep_duration) - count = count + sleep_duration - while ser.inWaiting() > 0: - out += ser.read(1) - print 'out = <' + out + '> response = <' + response + '> \n' - if re.search(response, out): - break - + try: + ser.write (cmd + '\r\n') + out = '' + time.sleep(sleep_duration) + count = count + sleep_duration + while ser.inWaiting() > 0: + out += ser.read(1) + print 'out = <' + out + '> response = <' + response + '> \n' + if re.search(response, out): + break + except Exception, e: + error = ' cmd : ' + cmd + ' response : ' + response + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error def start_ue () : diff --git a/cmake_targets/autotests/tools/search_repl.py b/cmake_targets/autotests/tools/search_repl.py index 43b023fccc..ee6b77e123 100644 --- a/cmake_targets/autotests/tools/search_repl.py +++ b/cmake_targets/autotests/tools/search_repl.py @@ -20,7 +20,7 @@ file.close() if keyword == 'mme_ip_address': #string = (re.sub(r"mme_ip_address\s*=\s*\([^\$]+)\)\s*;\s*", r"<% tex \1 %>", t, re.M) - replacement_text = keyword + ' = ' + replacement_text + ' ; ' + replacement_text = keyword + ' = ({' + replacement_text + ')} ; ' string = re.sub(r"mme_ip_address\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M) elif keyword == 'N_RB_DL': replacement_text = keyword + ' = ' + replacement_text + ' ; ' From c3f3d1ac96037d4aa78bda8baad2435b4b01d2b6 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 10 Nov 2015 16:27:32 +0100 Subject: [PATCH 12/49] fixed a bug to search for an open port --- .../autotests/tools/configure_cots_bandrich_ue.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py index 7cc1f20f53..7ba02bc0b1 100644 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -7,9 +7,20 @@ import re import threading import signal import traceback +import os # configure the serial connections (the parameters differs on the device you are connecting to) -serial_port = '/dev/ttyUSB2' +#First we find an open port to work with +serial_port='' +max_ports=100 +for port in range(1,100): + serial_port = '/dev/ttyUSB'+str(port) + if os.path.exists(serial_port) == True: + break + +print 'Using Serial port : ' + serial_port + +#serial_port = '/dev/ttyUSB2' bandrich_ppd_config = '$OPENAIR_DIR/cmake_targets/autotests/tools/wdial.bandrich.conf' exit_flag=0 From 65ee1824dbce0b4512e0c5ca4015471641848f55 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 10 Nov 2015 17:07:48 +0100 Subject: [PATCH 13/49] updated files for configuring COTS UE --- cmake_targets/autotests/test_case_list.xml | 19 +++++++----- .../tools/configure_cots_bandrich_ue.py | 30 +++++++++++-------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 0163918520..fdce1b0c4a 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -1,12 +1,13 @@ -stevens calisson amerique +amerique stevens calisson /mnt/sradio/TEST_RESULTS https://gitlab.eurecom.fr/oai/openairinterface5g.git https://gitlab.eurecom.fr/oai/openair-cn.git feature-34-test_framework feature-17-test_framework - oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* ltebox* + oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* hss hss_sim + /opt/ltebox/tools/stop_ltebox compilation @@ -25,7 +26,7 @@ compilation - Build oaisim.Rel8 + network device driver(nasmesh_fix) + Build oaisim.Rel8 + network device driver(nasmesh_fix) oaisim_nos1 @@ -760,7 +761,7 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code 208 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code 92 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address ({ipv4="192.168.12.26";ipv6="192:168:30::17";active="yes";preference="ipv4";}) + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "({ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";})" $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP @@ -771,6 +772,7 @@ + True /tmp targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code 4 @@ -780,12 +782,13 @@ --eNB -w USRP - $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue --start-ue + python $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; python $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue ping 192.172.0.1 + True /tmp BUILD/EPC/epc.local.enb.conf.in MCC 208 @@ -800,14 +803,16 @@ - /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox + /opt/ltebox/tools/stop_ltebox ; /opt/ltebox/tools/start_ltebox ; sleep 3000 - /opt/hss_sim0609/starthss + /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000 iperf -s + True + 2 diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py index 7ba02bc0b1..9a8b95d4d9 100644 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -12,12 +12,20 @@ import os # configure the serial connections (the parameters differs on the device you are connecting to) #First we find an open port to work with serial_port='' -max_ports=100 -for port in range(1,100): - serial_port = '/dev/ttyUSB'+str(port) - if os.path.exists(serial_port) == True: - break +ser='' +def find_open_port(serial_port): + max_ports=100 + if os.path.exists(serial_port) == True: + return serial_port + for port in range(1,100): + serial_port = '/dev/ttyUSB'+str(port) + ser = serial.Serial(port=serial_port) + if os.path.exists(serial_port) == True: + print 'New Serial Port : ' + serial_port + break + return serial_port +serial_port = find_open_port('') print 'Using Serial port : ' + serial_port #serial_port = '/dev/ttyUSB2' @@ -35,13 +43,7 @@ def signal_handler(signal, frame): signal.signal(signal.SIGINT, signal_handler) -ser = serial.Serial( - port=serial_port, - #baudrate=9600, - #parity=serial.PARITY_ODD, - #stopbits=serial.STOPBITS_TWO, - #bytesize=serial.EIGHTBITS -) + #ser.open() #ser.isOpen() @@ -71,6 +73,10 @@ def send_command (cmd, response, timeout): sleep_duration = 1 while count <= timeout: try: + #Sometimes the port does not exist coz of reset in modem. + #In that case, we need to search for this port again + if os.path.exists(serial_port) == False: + serial_port = find_open_port(serial_port) ser.write (cmd + '\r\n') out = '' time.sleep(sleep_duration) From f13b40c65fcadbe39bbd09452d00c445c803d048 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 11 Nov 2015 14:56:35 +0100 Subject: [PATCH 14/49] fixed some bugs for UE configuration --- .../tools/configure_cots_bandrich_ue.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py index 9a8b95d4d9..067a2913cc 100644 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -12,20 +12,22 @@ import os # configure the serial connections (the parameters differs on the device you are connecting to) #First we find an open port to work with serial_port='' -ser='' -def find_open_port(serial_port): +ser=serial.Serial() +def find_open_port(): + global serial_port, ser max_ports=100 if os.path.exists(serial_port) == True: return serial_port - for port in range(1,100): + for port in range(2,100): serial_port = '/dev/ttyUSB'+str(port) - ser = serial.Serial(port=serial_port) if os.path.exists(serial_port) == True: print 'New Serial Port : ' + serial_port break - return serial_port -serial_port = find_open_port('') + ser = serial.Serial(port=serial_port) + return + +find_open_port() print 'Using Serial port : ' + serial_port #serial_port = '/dev/ttyUSB2' @@ -71,12 +73,14 @@ class pppThread (threading.Thread): def send_command (cmd, response, timeout): count=0 sleep_duration = 1 + print 'In function: send_command: cmd ' + cmd + '> response: <' + response + '> \n' + global serial_port, ser while count <= timeout: try: #Sometimes the port does not exist coz of reset in modem. #In that case, we need to search for this port again if os.path.exists(serial_port) == False: - serial_port = find_open_port(serial_port) + find_open_port() ser.write (cmd + '\r\n') out = '' time.sleep(sleep_duration) From d09051a83aecbe5ab6cf4b69ec0dd68b203e81c7 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 11 Nov 2015 15:10:49 +0100 Subject: [PATCH 15/49] fixed a bug in python search/replace script --- cmake_targets/autotests/tools/search_repl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake_targets/autotests/tools/search_repl.py b/cmake_targets/autotests/tools/search_repl.py index ee6b77e123..ac62e15eb5 100644 --- a/cmake_targets/autotests/tools/search_repl.py +++ b/cmake_targets/autotests/tools/search_repl.py @@ -20,7 +20,7 @@ file.close() if keyword == 'mme_ip_address': #string = (re.sub(r"mme_ip_address\s*=\s*\([^\$]+)\)\s*;\s*", r"<% tex \1 %>", t, re.M) - replacement_text = keyword + ' = ({' + replacement_text + ')} ; ' + replacement_text = keyword + ' = ( { ' + replacement_text + ' } ) ; ' string = re.sub(r"mme_ip_address\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M) elif keyword == 'N_RB_DL': replacement_text = keyword + ' = ' + replacement_text + ' ; ' From eee5c2e25d3b4397ea9cde351696651fd19ebf2c Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 11 Nov 2015 18:01:26 +0100 Subject: [PATCH 16/49] updated python script to run as executable --- cmake_targets/autotests/tools/configure_cots_bandrich_ue.py | 2 ++ 1 file changed, 2 insertions(+) mode change 100644 => 100755 cmake_targets/autotests/tools/configure_cots_bandrich_ue.py diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py old mode 100644 new mode 100755 index 067a2913cc..df78e341f7 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -1,3 +1,5 @@ +#!/usr/bin/python + import time import serial import os From 75e6b8bf54a40221f366bf0ce100409cfe85f1f5 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 11 Nov 2015 18:05:43 +0100 Subject: [PATCH 17/49] minor cleanup --- cmake_targets/autotests/tools/configure_cots_bandrich_ue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py index df78e341f7..2f959be55c 100755 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -75,7 +75,7 @@ class pppThread (threading.Thread): def send_command (cmd, response, timeout): count=0 sleep_duration = 1 - print 'In function: send_command: cmd ' + cmd + '> response: <' + response + '> \n' + print 'In function: send_command: cmd = <' + cmd + '> response: <' + response + '> \n' global serial_port, ser while count <= timeout: try: From f7099ef96dfced59f580e3266b05bc2ef11477c4 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 11 Nov 2015 18:56:57 +0100 Subject: [PATCH 18/49] fixed a bug in search/replace python script --- cmake_targets/autotests/tools/search_repl.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) mode change 100644 => 100755 cmake_targets/autotests/tools/search_repl.py diff --git a/cmake_targets/autotests/tools/search_repl.py b/cmake_targets/autotests/tools/search_repl.py old mode 100644 new mode 100755 index ac62e15eb5..0a91945c77 --- a/cmake_targets/autotests/tools/search_repl.py +++ b/cmake_targets/autotests/tools/search_repl.py @@ -22,12 +22,12 @@ if keyword == 'mme_ip_address': #string = (re.sub(r"mme_ip_address\s*=\s*\([^\$]+)\)\s*;\s*", r"<% tex \1 %>", t, re.M) replacement_text = keyword + ' = ( { ' + replacement_text + ' } ) ; ' string = re.sub(r"mme_ip_address\s*=\s*\(([^\$]+?)\)\s*;", replacement_text, string, re.M) -elif keyword == 'N_RB_DL': +else : replacement_text = keyword + ' = ' + replacement_text + ' ; ' string = re.sub(r"%s\s*=\s*([^\$]+?)\s*;" % keyword , replacement_text, string, re.M) -else : - replacement_text = keyword + ' = \" ' + replacement_text + '\" ; ' - string = re.sub(r"%s\s*=\s*\"([^\$]+?)\"\s*;" % keyword , replacement_text, string, re.M) +#else : +# replacement_text = keyword + ' =\"' + replacement_text + '\" ; ' +# string = re.sub(r"%s\s*=\s*\"([^\$]+?)\"\s*;" % keyword , replacement_text, string, re.M) file = open(filename, 'w') file.write(string) From 111714460a05980151998c4d4f067b1e509a6822 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 11 Nov 2015 23:45:55 +0100 Subject: [PATCH 19/49] updated for handling lte-softmodem tests --- cmake_targets/autotests/README.txt | 17 +- cmake_targets/autotests/test_case_list.xml | 199 +++++++++++++++++++-- 2 files changed, 196 insertions(+), 20 deletions(-) diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt index c983933125..25f0c499bb 100644 --- a/cmake_targets/autotests/README.txt +++ b/cmake_targets/autotests/README.txt @@ -88,7 +88,22 @@ Obj.# Case# Test# Description 01 51 06 mbmssim (TBD) -01 55 lte-softmodem tests +01 55 lte-softmodem tests with ALU EPC w/ Bandrich COTS UE +01 55 00 FDD 5MHz UL Throughput for 60 sec +01 55 00 FDD 10MHz UL Throughput for 60 sec +01 55 00 FDD 20MHz UL Throughput for 60 sec +01 55 00 FDD 5MHz DL Throughput for 60 sec +01 55 00 FDD 10MHz DL Throughput for 60 sec +01 55 00 FDD 20MHz DL Throughput for 60 sec + + +01 56 lte-softmodem tests with OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE + + +01 57 lte-softmodem tests with OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE + + +01 58 lte-softmodem-noS1 tests 02 Functional test case diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index fdce1b0c4a..f402b38f26 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -1,12 +1,12 @@ -amerique stevens calisson +amerique stevens calisson nano /mnt/sradio/TEST_RESULTS https://gitlab.eurecom.fr/oai/openairinterface5g.git https://gitlab.eurecom.fr/oai/openair-cn.git feature-34-test_framework feature-17-test_framework - oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* hss hss_sim + oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* hss hss_sim configure_cots_bandrich_ue* wvdial* /opt/ltebox/tools/stop_ltebox @@ -755,13 +755,14 @@ oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* ltebox* 60 /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code 208 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code 92 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code 208 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code 92 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "({ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";})" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP @@ -775,14 +776,14 @@ True /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code 4 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code 5 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code 6 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"4\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\" $OPENAIR_DIR/cmake_targets/build_oai --eNB -w USRP - python $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; python $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue + $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue ping 192.172.0.1 @@ -791,11 +792,11 @@ True /tmp - BUILD/EPC/epc.local.enb.conf.in MCC 208 - BUILD/EPC/epc.local.enb.conf.in MNC 92 - BUILD/EPC/epc.local.enb.conf.in TAC 1 - BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI eth1 - BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI 192.168.12.82/24 + BUILD/EPC/epc.local.enb.conf.in MCC \"208\" + BUILD/EPC/epc.local.enb.conf.in MNC \"92\" + BUILD/EPC/epc.local.enb.conf.in TAC \"1\" + BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\" + BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\" SCRIPTS/build_epc -c -l SCRIPTS/build_hss @@ -813,9 +814,169 @@ True - 2 + 3 + + + lte-softmodem + + calisson + stevens + nano + oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* ltebox* + 60 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w USRP + + + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf + iperf -s + + + + True + + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\" + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w USRP + + + $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue + + ping 192.172.0.1 + + + + True + + /tmp + BUILD/EPC/epc.local.enb.conf.in MCC \"208\" + BUILD/EPC/epc.local.enb.conf.in MNC \"92\" + BUILD/EPC/epc.local.enb.conf.in TAC \"1\" + BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\" + BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\" + BUILD/EPC/epc.conf.in MCC \"208\" + BUILD/EPC/epc.conf.in MNC \"92\" + BUILD/EPC/epc.conf.in TAC \"1\" + BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\" + BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\" + BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\" + BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\" + BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\" + SCRIPTS/build_epc + -c -l + SCRIPTS/build_hss + -c + + + + /SCRIPTS/run_epc -g + + /SCRIPTS/run_hss -g + + iperf -s + + + + True + 2 + + + + + lte-softmodem + + calisson + stevens + calisson + oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* ltebox* + 60 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.62\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w USRP + + + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf + + + + + True + + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"92\" + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w USRP + + + $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue + + ping 192.172.0.1 + + + + True + + /tmp + BUILD/EPC/epc.local.enb.conf.in MCC \"208\" + BUILD/EPC/epc.local.enb.conf.in MNC \"92\" + BUILD/EPC/epc.local.enb.conf.in TAC \"1\" + BUILD/EPC/epc.local.enb.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\" + BUILD/EPC/epc.local.enb.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.82/24\" + BUILD/EPC/epc.conf.in MCC \"208\" + BUILD/EPC/epc.conf.in MNC \"92\" + BUILD/EPC/epc.conf.in TAC \"1\" + BUILD/EPC/epc.conf.in PGW_INTERFACE_NAME_FOR_SGI \"eth1\" + BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\" + BUILD/EPC/epc.conf.in MME_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.62/24\" + BUILD/EPC/epc.conf.in SGW_IPV4_ADDRESS_FOR_S1U_S12_S4_UP \"192.168.12.62/24\" + BUILD/EPC/epc.conf.in PGW_IPV4_ADDRESS_FOR_SGI \"192.168.12.62/24\" + SCRIPTS/build_epc + -c -l + SCRIPTS/build_hss + -c -l + + + + SCRIPTS/run_epc -l + + SCRIPTS/run_hss + + iperf -s + + + + True + + 2 + + From 73b080150be0380d572542cf36a7763fe05626ea Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 11 Nov 2015 23:47:41 +0100 Subject: [PATCH 20/49] added file for executing softmodem tests remotely --- .../autotests/run_exec_lte-softmodem_tests.py | 878 ++++++++++++++++++ 1 file changed, 878 insertions(+) create mode 100644 cmake_targets/autotests/run_exec_lte-softmodem_tests.py diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py new file mode 100644 index 0000000000..101e610bfd --- /dev/null +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -0,0 +1,878 @@ +#! /usr/bin/python +#****************************************************************************** + +# OpenAirInterface +# Copyright(c) 1999 - 2014 Eurecom + +# OpenAirInterface is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + + +# OpenAirInterface is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with OpenAirInterface.The full GNU General Public License is +# included in this distribution in the file called "COPYING". If not, +# see . + +# Contact Information +# OpenAirInterface Admin: openair_admin@eurecom.fr +# OpenAirInterface Tech : openair_tech@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr + +# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + +# *******************************************************************************/ + +# \file test01.py +# \brief test 01 for OAI +# \author Navid Nikaein +# \date 2013 - 2015 +# \version 0.1 +# @ingroup _test + +import tempfile +import threading +import sys +import traceback +import wave +import os +import time +import datetime +import getpass +import math #from time import clock +import xml.etree.ElementTree as ET + +import log +import case01 +import case02 +import case03 +import case04 +import case05 + +from openair import * + +import paramiko + +def write_file(filename, string, mode="w"): + text_file = open(filename, mode) + text_file.write(string) + text_file.close() + + +def sftp_module (username, password, hostname, ports, localfile, remotefile, logfile, operation): + localD = localfile + remoteD = remotefile + #fd, paramiko_logfile = tempfile.mkstemp() + #res = os.close(fd ) + #paramiko logfile path should not be changed with multiple calls. The logs seem to in first file regardless + paramiko_logfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/log/paramiko.log') + error = "" + try: + res=os.system(' echo > ' + paramiko_logfile) + paramiko.util.log_to_file(paramiko_logfile) + transport = paramiko.Transport((hostname, ports)) + transport.connect(username = username, password = password) + sftp = paramiko.SFTPClient.from_transport(transport) + if operation == "put": + sftp.put(remotepath=remoteD, localpath=localD) + elif operation == "get": + sftp.get(remotepath=remoteD, localpath=localD) + else : + print "sftp_module: unidentified operation. Exiting now" + print "hostname = " + hostname + print "ports = " + ports + print "localfile = " + localfile + print "remotefile = " + remotefile + print "logfile = " + logfile + print "operation = " + operation + sys.exit() + sftp.close() + transport.close() + except Exception, e: + error = ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n username = ' + username + '\n hostname = ' + hostname + '\n localfile = ' + localfile + '\n remotefile = ' + remotefile + '\n operation = ' + operation + '\nlogfile = ' + logfile + '\n ports = ' + str(ports) + '\n' + error = error + traceback.format_exc() + + res = os.system('\n echo \'SFTP Module Log for Machine: <' + hostname + '> starts...\' >> ' + logfile + ' 2>&1 ') + res = os.system('cat ' + paramiko_logfile + ' >> ' + logfile + ' 2>&1 \n') + write_file(logfile, error, "a") + res = os.system('\n echo \'SFTP Module Log for Machine: <' + hostname + '> ends...\' >> ' + logfile + ' 2>&1 \n') + +def finalize_deploy_script (timeout_cmd, terminate_missing_procs='True'): + cmd = 'declare -i timeout_cmd='+str(timeout_cmd) + '\n' + if terminate_missing_procs == 'True': + cmd = cmd + """ + #The code below checks if one the processes launched in background has crashed. + #If it does, then the code below terminates all the child processes created by this script + declare -i wakeup_interval=1 + declare -i step=0 + echo \"Array pid = ${array_exec_pid[@]}\" + while [ "$step" -lt "$timeout_cmd" ] + do + declare -i break_while_loop=0 + #Iterate over each process ID in array_exec_pid + for i in "${array_exec_pid[@]}" + do + numchild=`pstree -p $i | perl -ne 's/\((\d+)\)/print " $1"/ge' |wc -w` + echo "PID = $i, numchild = $numchild" + if [ "$numchild" -eq "0" ] ; then + echo "Process ID $i has finished unexpectedly. Now preparing to kill all the processes " + break_while_loop=1 + break + fi + done + if [ "$break_while_loop" -eq "1" ] ; then + break + fi + step=$(( step + wakeup_interval )) + sleep $wakeup_interval + done + echo "Final time step (Duration of test case) = $step " + """ + else: + #We do not terminate the script if one of the processes has existed prematurely + cmd = cmd + 'sleep ' + str(timeout_cmd) + '\n' + + return cmd + +def update_config_file(oai, config_string, logdirRepo, python_script): + if config_string : + stringArray = config_string.splitlines() + cmd="" + #python_script = '$OPENAIR_DIR/targets/autotests/tools/search_repl.py' + for string in stringArray: + #split the string based on space now + string1=string.split() + cmd = cmd + 'python ' + python_script + ' ' + logdirRepo+'/'+string1[0] + ' ' + string1[1] + ' '+ string1[2] + '\n' + #cmd = cmd + 'perl -p -i -e \'s/'+ string1[1] + '\\s*=\\s*"\\S*"\\s*/' + string1[1] + ' = "' + string1[2] +'"' + '/g\' ' + logdirRepo + '/' +string1[0] + '\n' + return cmd + #result = oai.send_recv(cmd) + + + +#Function to clean old programs that might be running from earlier execution +#oai - parameter for making connection to machine +#programList - list of programs that must be terminated before execution of any test case +def cleanOldPrograms(oai, programList, CleanUpAluLteBox): + cmd = 'killall -q -r ' + programList + result = oai.send(cmd, True) + print "Killing old programs..." + result + programArray = programList.split() + programListJoin = '|'.join(programArray) + cmd = cleanupOldProgramsScript + ' ' + '\''+programListJoin+'\'' + #result = oai.send_recv(cmd) + #print result + result = oai.send_expect_false(cmd, 'Match found', False) + print result + res=oai.send_recv(CleanUpAluLteBox, True) + + +class myThread (threading.Thread): + def __init__(self, threadID, name, counter): + threading.Thread.__init__(self) + self.threadID = threadID + self.name = name + self.counter = counter + def run(self): + print "Starting " + self.name + + +class oaiThread (threading.Thread): + def __init__(self, threadID, name, oai, cmd, sudo, timeout): + threading.Thread.__init__(self) + self.threadID = threadID + self.name = name + #self.counter = counter + self.oai = oai + self.cmd = cmd + self.sudo = sudo + self.timeout = timeout + def run(self): + print "Starting " + self.name + result = self.oai.send_recv(self.cmd, self.sudo, self.timeout) + print "result = " + result + print "Exiting " + self.name + +def addsudo (cmd, password=""): + cmd = 'echo \'' + password + '\' | sudo -S -E bash -c \' ' + cmd + '\' ' + return cmd + +#Function to handle test case class : lte-softmodem +def handle_testcaseclass_softmodem (testcase, oldprogramList, oai_list, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, password, CleanUpAluLteBox): + #We ignore the password sent to this function for secuirity reasons for password present in log files + #It is recommended to add a line in /etc/sudoers that looks something like below. The line below will run sudo without password prompt + # your_user_name ALL=(ALL:ALL) NOPASSWD: ALL + mypassword='' + #addsudo = 'echo \'' + mypassword + '\' | sudo -S -E ' + addpass = 'echo \'' + mypassword + '\' | ' + user = getpass.getuser() + testcasename = testcase.get('id') + timeout_cmd = testcase.findtext('TimeOut_cmd',default='') + timeout_cmd = int(float(timeout_cmd)) + #Timeout_thread is more than that of cmd to have room for compilation time, etc + timeout_thread = timeout_cmd + 300 + nruns = testcase.findtext('nruns',default='') + nruns = int(float(nruns)) + + eNBMachine = testcase.findtext('eNB',default='') + eNB_config_file = testcase.findtext('eNB_config_file',default='') + eNB_compile_prog = testcase.findtext('eNB_compile_prog',default='') + eNB_compile_prog_args = testcase.findtext('eNB_compile_prog_args',default='') + eNB_pre_exec = testcase.findtext('eNB_pre_exec',default='') + eNB_pre_exec_args = testcase.findtext('eNB_pre_exec_args',default='') + eNB_main_exec = testcase.findtext('eNB_main_exec',default='') + eNB_main_exec_args = testcase.findtext('eNB_main_exec_args',default='') + eNB_traffic_exec = testcase.findtext('eNB_traffic_exec',default='') + eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='') + eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='True') + + UEMachine = testcase.findtext('UE',default='') + UE_config_file = testcase.findtext('UE_config_file',default='') + UE_compile_prog = testcase.findtext('UE_compile_prog',default='') + UE_compile_prog_args = testcase.findtext('UE_compile_prog_args',default='') + UE_pre_exec = testcase.findtext('UE_pre_exec',default='') + UE_pre_exec_args = testcase.findtext('UE_pre_exec_args',default='') + UE_main_exec = testcase.findtext('UE_main_exec',default='') + UE_main_exec_args = testcase.findtext('UE_main_exec_args',default='') + UE_traffic_exec = testcase.findtext('UE_traffic_exec',default='') + UE_traffic_exec_args = testcase.findtext('UE_traffic_exec_args',default='') + UE_terminate_missing_procs = testcase.findtext('UE_terminate_missing_procs',default='True') + + EPCMachine = testcase.findtext('EPC',default='') + EPC_config_file = testcase.findtext('EPC_config_file',default='') + EPC_compile_prog = testcase.findtext('EPC_compile_prog',default='') + EPC_compile_prog_args = testcase.findtext('EPC_compile_prog_args',default='') + HSS_compile_prog = testcase.findtext('HSS_compile_prog',default='') + HSS_compile_prog_args = testcase.findtext('HSS_compile_prog_args',default='') + + EPC_pre_exec= testcase.findtext('EPC_pre_exec',default='') + EPC_pre_exec_args = testcase.findtext('EPC_pre_exec_args',default='') + EPC_main_exec= testcase.findtext('EPC_main_exec',default='') + EPC_main_exec_args = testcase.findtext('EPC_main_exec_args',default='') + HSS_main_exec= testcase.findtext('HSS_main_exec',default='') + HSS_main_exec_args = testcase.findtext('HSS_main_exec_args',default='') + EPC_traffic_exec = testcase.findtext('EPC_traffic_exec',default='') + EPC_traffic_exec_args = testcase.findtext('EPC_traffic_exec_args',default='') + EPC_terminate_missing_procs = testcase.findtext('EPC_terminate_missing_procs',default='True') + + index_eNBMachine = MachineList.index(eNBMachine) + index_UEMachine = MachineList.index(UEMachine) + index_EPCMachine = MachineList.index(EPCMachine) + oai_eNB = oai_list[index_eNBMachine] + oai_UE = oai_list[index_UEMachine] + + #We need to create two ssh sessions to avoid race conditions + if index_eNBMachine == index_EPCMachine: + oai_EPC = openair('localdomain', EPCMachine) + oai_EPC.connect(user,password) + else: + oai_EPC = oai_list[index_EPCMachine] + cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox) + cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox) + cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox) + logdir_eNB = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + logdir_UE = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + logdir_EPC = logdirOpenaircnRepo+'/TEST/autotests/log/'+ testcasename + logdir_local = os.environ.get('OPENAIR_DIR') + if logdir_local is None: + print "Environment variable OPENAIR_DIR not set correctly" + sys.exit() + + #Make the log directory of test case + #cmd = 'mkdir -p ' + logdir_eNB + #result = oai_eNB.send_recv(cmd) + #cmd = 'mkdir -p ' + logdir_UE + #result = oai_UE.send_recv(cmd) + #cmd = 'mkdir -p ' + logdir_EPC + #result = oai_EPC.send_recv(cmd) + + print "Updating the config files for ENB/UE/EPC..." + #updating the eNB/UE/EPC configuration file from the test case + #update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo) + #update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo) + #update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo) + + for run in range(0,nruns): + logdir_eNB = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) + logdir_UE = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) + logdir_EPC = logdirOpenaircnRepo+'/TEST/autotests/log/'+ testcasename + '/run_' + str(run) + logdir_local_testcase = logdir_local + '/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) + #Make the log directory of test case + cmd = 'rm -fr ' + logdir_eNB + ' ; mkdir -p ' + logdir_eNB + result = oai_eNB.send_recv(cmd) + cmd = 'rm -fr ' + logdir_UE + ' ; mkdir -p ' + logdir_UE + result = oai_UE.send_recv(cmd) + cmd = 'rm -fr ' + logdir_EPC + '; mkdir -p ' + logdir_EPC + result = oai_EPC.send_recv(cmd) + cmd = ' rm -fr ' + logdir_local_testcase + ' ; mkdir -p ' + logdir_local_testcase + result = os.system(cmd) + + logfile_compile_eNB = logdir_eNB + '/eNB_compile' + '_' + str(run) + '_.log' + logfile_exec_eNB = logdir_eNB + '/eNB_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_eNB = logdir_eNB + '/eNB_pre_exec' + '_' + str(run) + '_.log' + logfile_traffic_eNB = logdir_eNB + '/eNB_traffic' + '_' + str(run) + '_.log' + logfile_task_eNB_out = logdir_eNB + '/eNB_task_out' + '_' + str(run) + '_.log' + logfile_task_eNB = logdir_local_testcase + '/eNB_task' + '_' + str(run) + '_.log' + task_eNB = ' ( \n' + task_eNB = task_eNB + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_eNB = task_eNB + 'env |grep OPENAIR \n' + task_eNB = task_eNB + update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' + if eNB_compile_prog != "": + task_eNB = task_eNB + ' ( ' + eNB_compile_prog + ' '+ eNB_compile_prog_args + ' ) > ' + logfile_compile_eNB + ' 2>&1 \n' + if eNB_pre_exec != "": + task_eNB = task_eNB + ' ( ' + eNB_pre_exec + ' '+ eNB_pre_exec_args + ' ) > ' + logfile_pre_exec_eNB + ' 2>&1 \n' + if eNB_main_exec != "": + task_eNB = task_eNB + ' ( ' + addsudo(eNB_main_exec + ' ' + eNB_main_exec_args, mypassword) + ' ) > ' + logfile_exec_eNB + ' 2>&1 & \n' + task_eNB = task_eNB + 'array_exec_pid+=($!) \n' + task_eNB = task_eNB + 'echo eNB_main_exec PID = $! \n' + if eNB_traffic_exec != "": + task_eNB = task_eNB + ' ( ' + eNB_traffic_exec + ' ' + eNB_traffic_exec_args + ' ) > ' + logfile_traffic_eNB + ' 2>&1 & \n ' + task_eNB = task_eNB + 'array_exec_pid+=($!) \n' + task_eNB = task_eNB + 'echo eNB_traffic_exec PID = $! \n' + #terminate the eNB test case after timeout_cmd seconds + task_eNB = task_eNB + finalize_deploy_script (timeout_cmd, eNB_terminate_missing_procs) + ' \n' + #task_eNB = task_eNB + 'sleep ' + str(timeout_cmd) + ' \n' + task_eNB = task_eNB + 'handle_ctrl_c' + '\n' + task_eNB = task_eNB + ' ) > ' + logfile_task_eNB_out + ' 2>&1 ' + write_file(logfile_task_eNB, task_eNB, mode="w") + + #task_eNB = 'echo \" ' + task_eNB + '\" > ' + logfile_script_eNB + ' 2>&1 ; ' + task_eNB + logfile_compile_UE = logdir_UE + '/UE_compile' + '_' + str(run) + '_.log' + logfile_exec_UE = logdir_UE + '/UE_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_UE = logdir_UE + '/UE_pre_exec' + '_' + str(run) + '_.log' + logfile_traffic_UE = logdir_UE + '/UE_traffic' + '_' + str(run) + '_.log' + logfile_task_UE_out = logdir_UE + '/UE_task_out' + '_' + str(run) + '_.log' + logfile_task_UE = logdir_local_testcase + '/UE_task' + '_' + str(run) + '_.log' + task_UE = ' ( \n' + task_UE = task_UE + 'array_exec_pid=()' + '\n' + task_UE = task_UE + 'cd ' + logdirOAI5GRepo + '\n' + task_UE = task_UE + 'source oaienv \n' + task_UE = task_UE + 'source cmake_targets/tools/build_helper \n' + task_UE = task_UE + 'env |grep OPENAIR \n' + task_UE = task_UE + update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' + if UE_compile_prog != "": + task_UE = task_UE + ' ( ' + UE_compile_prog + ' '+ UE_compile_prog_args + ' ) > ' + logfile_compile_UE + ' 2>&1 \n' + if UE_pre_exec != "": + task_UE = task_UE + ' ( ' + UE_pre_exec + ' '+ UE_pre_exec_args + ' ) > ' + logfile_pre_exec_UE + ' 2>&1 \n' + if UE_main_exec != "": + task_UE = task_UE + ' ( ' + addsudo(UE_main_exec + ' ' + UE_main_exec_args, mypassword) + ' ) > ' + logfile_exec_UE + ' 2>&1 & \n' + task_UE = task_UE + 'array_exec_pid+=($!) \n' + task_UE = task_UE + 'echo UE_main_exec PID = $! \n' + if UE_traffic_exec != "": + task_UE = task_UE + ' ( ' + UE_traffic_exec + ' ' + UE_traffic_exec_args + ' ) >' + logfile_traffic_UE + ' 2>&1 & \n' + task_UE = task_UE + 'array_exec_pid+=($!) \n' + task_UE = task_UE + 'echo UE_traffic_exec PID = $! \n' + #terminate the UE test case after timeout_cmd seconds + task_UE = task_UE + finalize_deploy_script (timeout_cmd, UE_terminate_missing_procs) + ' \n' + #task_UE = task_UE + 'sleep ' + str(timeout_cmd) + ' \n' + task_UE = task_UE + 'handle_ctrl_c' + '\n' + task_UE = task_UE + ' ) > ' + logfile_task_UE_out + ' 2>&1 ' + write_file(logfile_task_UE, task_UE, mode="w") + #task_UE = 'echo \" ' + task_UE + '\" > ' + logfile_script_UE + ' 2>&1 ; ' + task_UE + + logfile_compile_EPC = logdir_EPC + '/EPC_compile' + '_' + str(run) + '_.log' + logfile_compile_HSS = logdir_EPC + '/HSS_compile' + '_' + str(run) + '_.log' + logfile_exec_EPC = logdir_EPC + '/EPC_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_EPC = logdir_EPC + '/EPC_pre_exec' + '_' + str(run) + '_.log' + logfile_exec_HSS = logdir_EPC + '/HSS_exec' + '_' + str(run) + '_.log' + logfile_traffic_EPC = logdir_EPC + '/EPC_traffic' + '_' + str(run) + '_.log' + logfile_task_EPC_out = logdir_EPC + '/EPC_task_out' + '_' + str(run) + '_.log' + logfile_task_EPC = logdir_local_testcase + '/EPC_task' + '_' + str(run) + '_.log' + task_EPC = ' ( \n' + task_EPC = task_EPC + 'array_exec_pid=()' + '\n' + task_EPC = task_EPC + 'cd ' + logdirOpenaircnRepo + '\n' + task_EPC = task_EPC + update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo, logdirOpenaircnRepo+'/TEST/autotests/tools/search_repl.py') + '\n' + task_EPC = task_EPC + 'source BUILD/TOOLS/build_helper \n' + if EPC_compile_prog != "": + task_EPC = task_EPC + '(' + EPC_compile_prog + ' ' + EPC_compile_prog_args + ' ) > ' + logfile_compile_EPC + ' 2>&1 \n' + if HSS_compile_prog != "": + task_EPC = task_EPC + '(' + HSS_compile_prog + ' ' + HSS_compile_prog_args + ' ) > ' + logfile_compile_HSS + ' 2>&1 \n' + if EPC_pre_exec != "": + task_EPC = task_EPC + ' ( ' + EPC_pre_exec + ' '+ EPC_pre_exec_args + ' ) > ' + logfile_pre_exec_EPC + ' 2>&1 \n' + if EPC_main_exec != "": + task_EPC = task_EPC + '(' + addsudo (EPC_main_exec + ' ' + EPC_main_exec_args, mypassword) + ' ) > ' + logfile_exec_EPC + ' 2>&1 & \n' + task_EPC = task_EPC + 'array_exec_pid+=($!) \n' + task_EPC = task_EPC + 'echo EPC_main_exec PID = $! \n' + if HSS_main_exec != "": + task_EPC = task_EPC + '(' + addsudo (HSS_main_exec + ' ' + HSS_main_exec_args, mypassword) + ' ) > ' + logfile_exec_HSS + ' 2>&1 & \n' + task_EPC = task_EPC + 'array_exec_pid+=($!) \n' + task_EPC = task_EPC + 'echo HSS_main_exec PID = $! \n' + if EPC_traffic_exec != "": + task_EPC = task_EPC + '(' + EPC_traffic_exec + ' ' + EPC_traffic_exec_args + ' ) > ' + logfile_traffic_EPC + ' 2>&1 & \n' + task_EPC = task_EPC + 'array_exec_pid+=($!) \n' + task_EPC = task_EPC + 'echo EPC_traffic_exec PID = $! \n' + #terminate the EPC test case after timeout_cmd seconds + task_EPC = task_EPC + finalize_deploy_script (timeout_cmd, EPC_terminate_missing_procs) + '\n' + #task_EPC = task_EPC + 'sleep ' + str(timeout_cmd) + '\n' + task_EPC = task_EPC + 'handle_ctrl_c' '\n' + task_EPC = task_EPC + ' ) > ' + logfile_task_EPC_out + ' 2>&1 ' + write_file(logfile_task_EPC, task_EPC, mode="w") + + thread_EPC = oaiThread(1, "EPC_thread", oai_EPC , task_EPC, False, timeout_thread) + thread_eNB = oaiThread(2, "eNB_thread", oai_eNB , task_eNB, False, timeout_thread) + thread_UE = oaiThread(3, "UE_thread", oai_UE , task_UE, False, timeout_thread) + + threads=[] + threads.append(thread_eNB) + threads.append(thread_UE) + threads.append(thread_EPC) + # Start new Threads + + thread_eNB.start() + thread_UE.start() + thread_EPC.start() + + #Wait for all the compile threads to complete + for t in threads: + t.join() + #Now we get the log files from remote machines on the local machine + + cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox) + cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox) + cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox) + + localfile = logdir_local_testcase + '/eNB_compile' + '_' + str(run) + '_.log' + remotefile = logdir_eNB + '/eNB_compile' + '_' + str(run) + '_.log' + sftp_log = os.path.expandvars(logdir_local_testcase + '/sftp_module.log') + ports = 22 + sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/eNB_exec' + '_' + str(run) + '_.log' + remotefile = logdir_eNB + '/eNB_exec' + '_' + str(run) + '_.log' + sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/eNB_pre_exec' + '_' + str(run) + '_.log' + remotefile = logdir_eNB + '/eNB_pre_exec' + '_' + str(run) + '_.log' + sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/eNB_traffic' + '_' + str(run) + '_.log' + remotefile = logdir_eNB + '/eNB_traffic' + '_' + str(run) + '_.log' + sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/eNB_task_out' + '_' + str(run) + '_.log' + remotefile = logdir_eNB + '/eNB_task_out' + '_' + str(run) + '_.log' + sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/UE_compile' + '_' + str(run) + '_.log' + remotefile = logdir_UE + '/UE_compile' + '_' + str(run) + '_.log' + sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/UE_exec' + '_' + str(run) + '_.log' + remotefile = logdir_UE + '/UE_exec' + '_' + str(run) + '_.log' + sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/UE_pre_exec' + '_' + str(run) + '_.log' + remotefile = logdir_UE + '/UE_pre_exec' + '_' + str(run) + '_.log' + sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/UE_traffic' + '_' + str(run) + '_.log' + remotefile = logdir_UE + '/UE_traffic' + '_' + str(run) + '_.log' + sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/UE_task_out' + '_' + str(run) + '_.log' + remotefile = logdir_UE + '/UE_task_out' + '_' + str(run) + '_.log' + sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/EPC_compile' + '_' + str(run) + '_.log' + remotefile = logdir_EPC + '/EPC_compile' + '_' + str(run) + '_.log' + sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/EPC_exec' + '_' + str(run) + '_.log' + remotefile = logdir_EPC + '/EPC_exec' + '_' + str(run) + '_.log' + sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/HSS_compile' + '_' + str(run) + '_.log' + remotefile = logdir_EPC + '/HSS_compile' + '_' + str(run) + '_.log' + sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/HSS_exec' + '_' + str(run) + '_.log' + remotefile = logdir_EPC + '/HSS_exec' + '_' + str(run) + '_.log' + sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/EPC_pre_exec' + '_' + str(run) + '_.log' + remotefile = logdir_EPC + '/EPC_pre_exec' + '_' + str(run) + '_.log' + sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/EPC_traffic' + '_' + str(run) + '_.log' + remotefile = logdir_EPC + '/EPC_traffic' + '_' + str(run) + '_.log' + sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + + localfile = logdir_local_testcase + '/EPC_task_out' + '_' + str(run) + '_.log' + remotefile = logdir_EPC + '/EPC_task_out' + '_' + str(run) + '_.log' + sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + #We need to close the new ssh session that was created + if index_eNBMachine == index_EPCMachine: + oai_EPC.disconnect() + + +#thread1 = myThread(1, "Thread-1", 1) +debug = 0 +pw ='' +i = 0 +dlsim=0 +localshell=0 +is_compiled = 0 +timeout=2000 +xmlInputFile="./test_case_list.xml" +NFSResultsDir = '/mnt/sradio' +cleanupOldProgramsScript = '$OPENAIR_DIR/cmake_targets/autotests/tools/remove_old_programs.bash' + +logdir = '/tmp/' + 'OAITestFrameWork-' + getpass.getuser() + '/' +logdirOAI5GRepo = logdir + 'openairinterface5g/' +logdirOpenaircnRepo = logdir + 'openair-cn/' + +openairdir_local = os.environ.get('OPENAIR_DIR') +if openairdir_local is None: + print "Environment variable OPENAIR_DIR not set correctly" + sys.exit() +locallogdir = openairdir_local + '/cmake_targets/autotests/log/' +#Remove the contents of local log directory +os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir ) + +for arg in sys.argv: + if arg == '-d': + debug = 1 + elif arg == '-dd': + debug = 2 + elif arg == '-p' : + prompt2 = sys.argv[i+1] + elif arg == '-w' : + pw = sys.argv[i+1] + elif arg == '-P' : + dlsim = 1 + elif arg == '-l' : + localshell = 1 + elif arg == '-c' : + is_compiled = 1 + elif arg == '-t' : + timeout = sys.argv[i+1] + elif arg == '-h' : + print "-d: low debug level" + print "-dd: high debug level" + print "-p: set the prompt" + print "-w: set the password for ssh to localhost" + print "-l: use local shell instead of ssh connection" + print "-t: set the time out in second for commands" + sys.exit() + i= i + 1 + +try: + os.environ["OPENAIR1_DIR"] +except KeyError: + print "Please set the environment variable OPENAIR1_DIR in the .bashrc" + sys.exit(1) + +try: + os.environ["OPENAIR2_DIR"] +except KeyError: + print "Please set the environment variable OPENAIR2_DIR in the .bashrc" + sys.exit(1) + +try: + os.environ["OPENAIR_TARGETS"] +except KeyError: + print "Please set the environment variable OPENAIR_TARGETS in the .bashrc" + sys.exit(1) + +# get the oai object +host = os.uname()[1] +#oai = openair('localdomain','calisson') +oai_list = {} + + +#start_time = time.time() # datetime.datetime.now() +user = getpass.getuser() +print "host = " + host +print "user = " + user +pw=getpass.getpass() + +#Now we parse the xml file for basic configuration +xmlTree = ET.parse(xmlInputFile) +xmlRoot = xmlTree.getroot() + + + + +MachineList = xmlRoot.findtext('MachineList',default='') +NFSResultsShare = xmlRoot.findtext('NFSResultsShare',default='') +GitOpenaircnRepo = xmlRoot.findtext('GitOpenair-cnRepo',default='') +GitOAI5GRepo = xmlRoot.findtext('GitOAI5GRepo',default='') +GitOAI5GRepoBranch = xmlRoot.findtext('GitOAI5GRepoBranch',default='') +GitOpenaircnRepoBranch = xmlRoot.findtext('GitOpenair-cnRepoBranch',default='') +CleanUpOldProgs = xmlRoot.findtext('CleanUpOldProgs',default='') +CleanUpAluLteBox = xmlRoot.findtext('CleanUpAluLteBox',default='') + +print "MachineList = " + MachineList +print "GitOpenair-cnRepo = " + GitOpenaircnRepo +print "GitOAI5GRepo = " + GitOAI5GRepo +print "GitOAI5GBranch = " + GitOAI5GRepoBranch +print "GitOpenaircnRepoBranch = " + GitOpenaircnRepoBranch +print "NFSResultsShare = " + NFSResultsShare +cmd = "git show-ref --heads -s "+ GitOAI5GRepoBranch +GitOAI5GHeadVersion = subprocess.check_output ([cmd], shell=True) +print "GitOAI5GHeadVersion = " + GitOAI5GHeadVersion +print "CleanUpOldProgs = " + CleanUpOldProgs + + +MachineList = MachineList.split() + +index=0 +for machine in MachineList: + oai_list[index] = openair('localdomain',machine) + index = index + 1 + + +#myThread (1,"sddsf", 1) + + +#thread1 = oaiThread1(1, "Thread-1", 1) +#def __init__(self, threadID, name, counter, oai, cmd, sudo, timeout): + +#sys.exit() + + + + + + + +print "\nTesting the sanity of machines used for testing..." +if localshell == 0: + try: + index=0 + for machine in MachineList: + print '\n******* Note that the user <'+user+'> should be a sudoer *******\n' + print '******* Connecting to the machine <'+machine+'> to perform the test *******\n' + if not pw : + print "username: " + user + #pw = getpass.getpass() + #print "password: " + pw + else : + print "username: " + user + #print "password: " + pw + # issues in ubuntu 12.04 + oai_list[index].connect(user,pw) + #print "result = " + result + + + #print '\nCleaning Older running programs : ' + CleanUpOldProgs + #cleanOldPrograms(oai_list[index], CleanUpOldProgs) + + + + print '\nChecking for sudo permissions on machine <'+machine+'>...' + result = oai_list[index].send_expect_false('sudo -S -v','may not run sudo',True) + print "Sudo permissions..." + result + + print '\nCleaning Older running programs : ' + CleanUpOldProgs + cleanOldPrograms(oai_list[index], CleanUpOldProgs, CleanUpAluLteBox) + + result = oai_list[index].send('mount ' + NFSResultsDir, True) + print "Mounting NFS Share " + NFSResultsDir + "..." + result + + # Check if NFS share is mounted correctly. + print 'Checking if NFS Share<' + NFSResultsDir + '> is mounted correctly...' + #result = oai_list[index].send_expect('mount | grep ' + NFSResultsDir, NFSResultsDir ) + cmd = 'if grep -qs '+NFSResultsDir+ ' /proc/mounts; then echo \'' + NFSResultsDir + ' is mounted\' ; fi' + search_expr = NFSResultsDir + ' is mounted' + print "cmd = " + cmd + print "search_expr = " + search_expr + result = oai_list[index].send_expect(cmd, search_expr) + print "Mount NFS_Results_Dir..." + result + index = index + 1 + + #oai.connect2(user,pw) + #oai.get_shell() + except : + print 'Fail to connect to the machine: '+ machine + sys.exit(1) +else: + pw = '' + oai_list[0].connect_localshell() + + + + + +cpu_freq = int(oai_list[0].cpu_freq()) +if timeout == 2000 : + if cpu_freq <= 2000 : + timeout = 3000 + elif cpu_freq < 2700 : + timeout = 2000 + elif cpu_freq < 3300 : + timeout = 1500 +print "cpu freq(MHz): " + str(cpu_freq) + "timeout(s): " + str(timeout) + +# The log files are stored in branch/version/ + + + +#result = oai_list[0].send('uname -a ' ) +#print result + +#We now prepare the machines for testing +#index=0 +for index in oai_list: + try: + print "setting up machine: " + MachineList[index] + #print oai_list[oai].send_recv('echo \''+pw+'\' |sudo -S -v') + #print oai_list[oai].send_recv('sudo su') + #print oai_list[oai].send_recv('who am i') + #cleanUpPrograms(oai_list[oai] + cmd = 'mkdir -p ' + logdir + ' ; rm -fr ' + logdir + '/*' + result = oai_list[index].send_recv(cmd) + + setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + cmd = ' ( \n' + #cmd = cmd + 'rm -fR ' + logdir + '\n' + #cmd = cmd + 'mkdir -p ' + logdir + '\n' + cmd = cmd + 'cd '+ logdir + '\n' + cmd = cmd + 'git clone '+ GitOAI5GRepo + '\n' + cmd = cmd + 'git clone '+ GitOpenaircnRepo + '\n' + cmd = cmd + 'cd ' + logdirOAI5GRepo + '\n' + cmd = cmd + 'git checkout ' + GitOAI5GHeadVersion + '\n' + cmd = cmd + 'source oaienv' + '\n' + cmd = cmd + 'cd ' + logdirOpenaircnRepo + '\n' + cmd = cmd + 'git checkout ' + GitOpenaircnRepoBranch + '\n' + cmd = cmd + 'env |grep OPENAIR' + '\n' + cmd = cmd + ' cd ' + logdir + '\n' + cmd = cmd + ' ) > ' + setuplogfile + ' 2>&1 ' + #cmd = cmd + 'echo \' ' + cmd + '\' > ' + setup_script + ' 2>&1 \n ' + result = oai_list[index].send_recv(cmd, False, 300 ) + write_file(setup_script, cmd, mode="w") + localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' + remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + sftp_module (user, pw, MachineList[index], 22, localfile, remotefile, sftp_log, "get") + + + #Now we copy test_case_list.xml on the remote machines + localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml') + remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/test_case_list.xml' + + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + sftp_module (user, pw, MachineList[index], 22, localfile, remotefile, sftp_log, "put") + + + #print oai_list[index].send('rm -fR ' + logdir) + #print oai_list[index].send('mkdir -p ' + logdir) + #print oai_list[index].send('cd '+ logdir) + #print oai_list[index].send('git clone '+ GitOAI5GRepo ) + #print oai_list[index].send('git clone '+ GitOpenaircnRepo) + #print oai_list[index].send('cd ' + logdirOAI5GRepo) + #print oai_list[index].send('git checkout ' + GitOAI5GHeadVersion) + #print oai_list[index].send('source oaienv') + #print oai_list[index].send('cd ' + logdirOpenaircnRepo) + #print oai_list[index].send('git checkout ' + GitOpenaircnRepoBranch) + #print oai_list[index].send_recv('cd ' + logdirOAI5GRepo) + #print oai_list[index].send_recv('source oaienv') + #print oai_list[index].send_recv('env |grep OPENAIR') + + #print '\nCleaning Older running programs : ' + CleanUpOldProgs + #cleanOldPrograms(oai_list[index], CleanUpOldProgs) + + except : + print 'There is error in one of the commands to setup the machine '+ MachineList[index] + sys.exit(1) + + +#Now we process all the test cases + + +testcaseList=xmlRoot.findall('testCase') +#print testcaseList +for testcase in testcaseList: + testcasename = testcase.get('id') + testcaseclass = testcase.findtext('class',default='') + desc = testcase.findtext('desc',default='') + if testcaseclass == 'lte-softmodem' : + if testcasename != '015700': + continue + eNBMachine = testcase.findtext('eNB',default='') + UEMachine = testcase.findtext('UE',default='') + EPCMachine = testcase.findtext('EPC',default='') + index_eNBMachine = MachineList.index(eNBMachine) + index_UEMachine = MachineList.index(UEMachine) + index_EPCMachine = MachineList.index(EPCMachine) + print "testcasename = " + testcasename + " class = " + testcaseclass + handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, oai_list, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, pw, CleanUpAluLteBox ) + + elif testcaseclass == 'compilation' : + continue + handle_testcaseclass_compilation (testcase) + elif testcaseclass == 'execution' : + continue + handle_testcaseclass_oaisim (testcase) + else : + print "Unknown test case class: " + testcaseclass + sys.exit() + + +sys.exit() + + + #+ "class = "+ classx + + + + #index = index +1 + +test = 'test01' +ctime=datetime.datetime.utcnow().strftime("%Y-%m-%d.%Hh%M") +logfile = user+'.'+test+'.'+ctime+'.txt' +logdir = os.getcwd() + '/pre-ci-logs-'+host; +oai.create_dir(logdir,debug) +print 'log dir: ' + logdir +print 'log file: ' + logfile +pwd = oai.send_recv('pwd') +print "pwd = " + pwd +result = oai.send('echo linux | sudo -S ls -al;sleep 5') +print "result =" + result +sys.exit() + +#oai.send_nowait('mkdir -p -m 755' + logdir + ';') + +#print '=================start the ' + test + ' at ' + ctime + '=================\n' +#print 'Results will be reported in log file : ' + logfile +log.writefile(logfile,'====================start'+test+' at ' + ctime + '=======================\n') +log.set_debug_level(debug) + +oai.kill(user, pw) +oai.rm_driver(oai,user,pw) + +# start te test cases +if is_compiled == 0 : + is_compiled=case01.execute(oai, user, pw, host,logfile,logdir,debug,timeout) + +if is_compiled != 0 : + case02.execute(oai, user, pw, host, logfile,logdir,debug) + case03.execute(oai, user, pw, host, logfile,logdir,debug) + case04.execute(oai, user, pw, host, logfile,logdir,debug) + case05.execute(oai, user, pw, host, logfile,logdir,debug) +else : + print 'Compilation error: skip test case 02,03,04,05' + +oai.kill(user, pw) +oai.rm_driver(oai,user,pw) + +# perform the stats +log.statistics(logfile) + + +oai.disconnect() + +ctime=datetime.datetime.utcnow().strftime("%Y-%m-%d_%Hh%M") +log.writefile(logfile,'====================end the '+ test + ' at ' + ctime +'====================') +print 'Test results can be found in : ' + logfile +#print '\nThis test took %f minutes\n' % math.ceil((time.time() - start_time)/60) + +#print '\n=====================end the '+ test + ' at ' + ctime + '=====================' From 551a272192d1ac2b5394099db7243e8d58e0b90c Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Thu, 12 Nov 2015 20:30:03 +0100 Subject: [PATCH 21/49] First X310 Calibration and harmonization of B210 and X310 configuration --- targets/ARCH/COMMON/common_lib.h | 4 ++ targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 45 ++++++++++++++++---- targets/RT/USER/lte-softmodem.c | 14 +++--- targets/RT/USER/lte-ue.c | 1 + 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index 8cc7926d45..8432441568 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -98,6 +98,10 @@ typedef struct { //! \brief Center frequency in Hz for TX. //! index: [0..rx_num_channels[ !!! see lte-ue.c:427 FIXME iterates over rx_num_channels double tx_freq[4]; + + //! \brief Pointer to Calibration table for RX gains + rx_gain_calib_table_t *rx_gain_calib_table; + //! mode for rxgain (ExpressMIMO2) rx_gain_t rxg_mode[4]; //! \brief Gain for RX in dB. diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index e57f55720b..73fe2683dc 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -171,17 +171,30 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp #endif - + /* if (cc>1) { // receive multiple channels (e.g. RF A and RF B) std::vector buff_ptrs; + for (int i=0;irx_stream->recv(buff_ptrs, nsamps, s->rx_md); } else { // receive a single channel (e.g. from connector RF A) samples_received = s->rx_stream->recv(buff_tmp[0], nsamps, s->rx_md); + }*/ + + if (cc>1) { + // receive multiple channels (e.g. RF A and RF B) + std::vector buff_ptrs; + + for (int i=0;irx_stream->recv(buff_ptrs, nsamps, s->rx_md); + } else { + // receive a single channel (e.g. from connector RF A) + samples_received = s->rx_stream->recv(buff[0], nsamps, s->rx_md); } + /* // bring RX data into 12 LSBs for softmodem RX for (int i=0;iusrp->set_rx_gain(openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0]); - printf("Setting USRP RX gain to %f\n", openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0]); + printf("Setting USRP RX gain to %f (rx_gain %f,gain_range.stop() %f)\n", openair0_cfg[0].rx_gain[0]-openair0_cfg[0].rx_gain_offset[0],openair0_cfg[0].rx_gain[0],gain_range.stop()); return(0); } @@ -289,7 +304,7 @@ int trx_usrp_stop(int card) { } -rx_gain_calib_table_t calib_table[] = { +rx_gain_calib_table_t calib_table_b210[] = { {3500000000.0,46.0}, {2660000000.0,53.0}, {2300000000.0,54.0}, @@ -297,19 +312,29 @@ rx_gain_calib_table_t calib_table[] = { {816000000.0,62.0}, {-1,0}}; +rx_gain_calib_table_t calib_table_x310[] = { + {3500000000.0,77.0}, + {2660000000.0,80.0}, + {2300000000.0,81.0}, + {1880000000.0,82.0}, + {816000000.0,89}, + {-1,0}}; + void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) { int i=0; // loop through calibration table to find best adjustment factor for RX frequency double min_diff = 6e9,diff; - - while (calib_table[i].freq>0) { - diff = fabs(openair0_cfg->rx_freq[chain_index] - calib_table[i].freq); + + while (openair0_cfg->rx_gain_calib_table[i].freq>0) { + diff = fabs(openair0_cfg->rx_freq[chain_index] - openair0_cfg->rx_gain_calib_table[i].freq); printf("cal %d: freq %f, offset %f, diff %f\n", - i,calib_table[i].freq,calib_table[i].offset,diff); + i, + openair0_cfg->rx_gain_calib_table[i].freq, + openair0_cfg->rx_gain_calib_table[i].offset,diff); if (min_diff > diff) { min_diff = diff; - openair0_cfg->rx_gain_offset[chain_index] = calib_table[i].offset; + openair0_cfg->rx_gain_offset[chain_index] = openair0_cfg->rx_gain_calib_table[i].offset; } i++; } @@ -375,6 +400,8 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_ // this is not working yet, master clock has to be set via constructor // set master clock rate and sample rate for tx & rx for streaming //s->usrp->set_master_clock_rate(usrp_master_clock); + + openair0_cfg[0].rx_gain_calib_table = calib_table_x310; } else { printf("Found USRP B200"); s->usrp = uhd::usrp::multi_usrp::make(args); @@ -387,6 +414,8 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_ // s->usrp->set_clock_source("internal"); // set master clock rate and sample rate for tx & rx for streaming s->usrp->set_master_clock_rate(30.72e6); + + openair0_cfg[0].rx_gain_calib_table = calib_table_b210; } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index b96a7ae529..acf924050f 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -2965,24 +2965,28 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; else { openair0_cfg[card].rx_gain[i] = PHY_vars_UE_g[0][0]->rx_total_gain_dB;// - USRP_GAIN_OFFSET; // calibrated for USRP B210 @ 2.6 GHz, 30.72 MS/s } - + switch(frame_parms[0]->N_RB_DL) { case 6: - openair0_cfg[card].rx_gain[i] -= 6; + openair0_cfg[card].rx_gain[i] -= 12; break; case 25: - openair0_cfg[card].rx_gain[i] += 6; + openair0_cfg[card].rx_gain[i] -= 6; break; case 50: - openair0_cfg[card].rx_gain[i] += 8; + openair0_cfg[card].rx_gain[i] -= 3; + break; + + case 100: + openair0_cfg[card].rx_gain[i] -= 0; break; default: break; } - + } diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 31701d877f..ec245360d7 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -410,6 +410,7 @@ static void *UE_thread_synch(void *arg) UE->UE_scan_carrier = 0; // rerun with new cell parameters and frequency-offset for (i=0;irx_total_gain_dB;//-USRP_GAIN_OFFSET; openair0_cfg[0].rx_freq[i] -= UE->lte_ue_common_vars.freq_offset; openair0_cfg[0].tx_freq[i] = openair0_cfg[0].rx_freq[i]+uplink_frequency_offset[0][i]; downlink_frequency[0][i] = openair0_cfg[0].rx_freq[i]; From de02814304a2f04716e144b972af335ab8eac1af Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 13 Nov 2015 13:14:45 +0100 Subject: [PATCH 22/49] First X310 Calibration and harmonization of B210 and X310 configuration --- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 73fe2683dc..e0be5a66d3 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -317,7 +317,7 @@ rx_gain_calib_table_t calib_table_x310[] = { {2660000000.0,80.0}, {2300000000.0,81.0}, {1880000000.0,82.0}, - {816000000.0,89}, + {816000000.0,85.0}, {-1,0}}; void set_rx_gain_offset(openair0_config_t *openair0_cfg, int chain_index) { From 719bbfc0a530783e35f12f38228681ce647e2601 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 17 Nov 2015 14:46:04 +0100 Subject: [PATCH 23/49] updated files for USRP X310 calibration --- .../CONF/enb.band7.tm1.100PRB.usrpx310.conf | 2 +- ...b.band7.tm1.25PRB.usrpx310.epc.remote.conf | 169 ++++++++++++++++++ .../CONF/enb.band7.tm1.50PRB.usrpx310.conf | 2 +- .../CONF/enb.band7.tm1.usrpx310.conf | 2 +- 4 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf index 7b02ad538f..210c7ea740 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf @@ -35,7 +35,7 @@ eNBs = nb_antennas_tx = 1; nb_antennas_rx = 1; tx_gain = 32; - rx_gain = 84; + rx_gain = 116; prach_root = 0; prach_config_index = 0; prach_high_speed = "DISABLE"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf new file mode 100644 index 0000000000..d4b88383e2 --- /dev/null +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpx310.epc.remote.conf @@ -0,0 +1,169 @@ +Active_eNBs = ( "eNB_Eurecom_LTEBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +eNBs = +( + { + ////////// Identification parameters: + eNB_ID = 0xe00; + + cell_type = "CELL_MACRO_ENB"; + + eNB_name = "eNB_Eurecom_LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + mobile_network_code = "92"; + + ////////// Physical parameters: + + component_carriers = ( + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2660000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 32; + rx_gain = 116; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -16; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -90; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -108; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "192.168.12.26"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.111/24"; + + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.111/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + + log_config : + { + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; + + } +); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf index e8a8fc8573..3dd6e5b440 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf @@ -35,7 +35,7 @@ eNBs = nb_antennas_tx = 1; nb_antennas_rx = 1; tx_gain = 32; - rx_gain = 82; + rx_gain = 116; prach_root = 0; prach_config_index = 0; prach_high_speed = "DISABLE"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf index fe72488bbf..d4b88383e2 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf @@ -35,7 +35,7 @@ eNBs = nb_antennas_tx = 1; nb_antennas_rx = 1; tx_gain = 32; - rx_gain = 84; + rx_gain = 116; prach_root = 0; prach_config_index = 0; prach_high_speed = "DISABLE"; From 0870e4bf85c3ee3ddc91245bb621d12747de61f0 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 17 Nov 2015 15:19:50 +0100 Subject: [PATCH 24/49] updated X310 calibration for 10MHz --- .../GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf index 3dd6e5b440..4c760e19c2 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpx310.conf @@ -35,7 +35,7 @@ eNBs = nb_antennas_tx = 1; nb_antennas_rx = 1; tx_gain = 32; - rx_gain = 116; + rx_gain = 120; prach_root = 0; prach_config_index = 0; prach_high_speed = "DISABLE"; From ebbdf1e4aef5137ad9e92dc7e648b0470c4bebd5 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 17 Nov 2015 17:00:40 +0100 Subject: [PATCH 25/49] added USRP X310 interface handling --- targets/ARCH/COMMON/common_lib.c | 2 +- targets/ARCH/COMMON/common_lib.h | 6 ++- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 56 ++++++++++---------- targets/RT/USER/eNB_transport_IQ.c | 2 +- targets/RT/USER/rrh_gw.c | 2 +- targets/RT/USER/rrh_gw.h | 2 +- 6 files changed, 37 insertions(+), 33 deletions(-) diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c index 8b91a74b49..b7700ec06f 100644 --- a/targets/ARCH/COMMON/common_lib.c +++ b/targets/ARCH/COMMON/common_lib.c @@ -52,7 +52,7 @@ int openair0_device_init(openair0_device *device, openair0_config_t *openair0_cf openair0_dev_init_exmimo(device, openair0_cfg); printf("openair0_dev_init_exmimo...\n"); #elif OAI_USRP - device->type=USRP_IF; + device->type=USRP_B200_IF; openair0_dev_init_usrp(device, openair0_cfg); printf("openair0_dev_init_usrp ...\n"); #elif OAI_BLADERF diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index 8432441568..4f7e801448 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -151,8 +151,10 @@ typedef enum { ETH_IF, /*!\brief device is ExpressMIMO */ EXMIMO_IF, - /*!\brief device is USRP*/ - USRP_IF, + /*!\brief device is USRP B200/B210*/ + USRP_B200_IF, + /*!\brief device is USRP X300/X310*/ + USRP_X300_IF, /*!\brief device is BLADE RF*/ BLADERF_IF, /*!\brief device is NONE*/ diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index e0be5a66d3..2371b04770 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -171,45 +171,44 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp #endif - /* - if (cc>1) { + if (device->type == USRP_B200_IF) { + if (cc>1) { // receive multiple channels (e.g. RF A and RF B) - std::vector buff_ptrs; + std::vector buff_ptrs; - for (int i=0;irx_stream->recv(buff_ptrs, nsamps, s->rx_md); - } else { + for (int i=0;irx_stream->recv(buff_ptrs, nsamps, s->rx_md); + } else { // receive a single channel (e.g. from connector RF A) - samples_received = s->rx_stream->recv(buff_tmp[0], nsamps, s->rx_md); - }*/ - - if (cc>1) { - // receive multiple channels (e.g. RF A and RF B) - std::vector buff_ptrs; - - for (int i=0;irx_stream->recv(buff_ptrs, nsamps, s->rx_md); - } else { - // receive a single channel (e.g. from connector RF A) - samples_received = s->rx_stream->recv(buff[0], nsamps, s->rx_md); - } - - /* + samples_received = s->rx_stream->recv(buff_tmp[0], nsamps, s->rx_md); + } + // bring RX data into 12 LSBs for softmodem RX - for (int i=0;itype == USRP_X300_IF) { + if (cc>1) { + // receive multiple channels (e.g. RF A and RF B) + std::vector buff_ptrs; + + for (int i=0;irx_stream->recv(buff_ptrs, nsamps, s->rx_md); + } else { + // receive a single channel (e.g. from connector RF A) + samples_received = s->rx_stream->recv(buff[0], nsamps, s->rx_md); } - */ + } if (samples_received < nsamps) { printf("[recv] received %d samples out of %d\n",samples_received,nsamps); @@ -397,6 +396,9 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_ // lock mboard clocks s->usrp->set_clock_source("internal"); + //Setting device type to USRP X300/X310 + device->type=USRP_X300_IF; + // this is not working yet, master clock has to be set via constructor // set master clock rate and sample rate for tx & rx for streaming //s->usrp->set_master_clock_rate(usrp_master_clock); diff --git a/targets/RT/USER/eNB_transport_IQ.c b/targets/RT/USER/eNB_transport_IQ.c index 07533ff59c..af3873ef76 100644 --- a/targets/RT/USER/eNB_transport_IQ.c +++ b/targets/RT/USER/eNB_transport_IQ.c @@ -172,7 +172,7 @@ void config_BBU_mod( rrh_module_t *mod_enb, uint8_t RT_flag, uint8_t NRT_flag) { mod_enb->devs->openair0_cfg.tx_delay = 8; } } - else if (mod_enb->devs->type == USRP_IF) { + else if ((mod_enb->devs->type == USRP_B200_IF )||(mod_enb->devs->type == USRP_X300_IF )) { if ( mod_enb->devs->openair0_cfg.num_rb_dl == 100 ) { mod_enb->devs->openair0_cfg.samples_per_packet = 2048; mod_enb->devs->openair0_cfg.tx_forward_nsamps = 175; diff --git a/targets/RT/USER/rrh_gw.c b/targets/RT/USER/rrh_gw.c index 39b726ae07..89c8679554 100644 --- a/targets/RT/USER/rrh_gw.c +++ b/targets/RT/USER/rrh_gw.c @@ -216,7 +216,7 @@ static rrh_module_t new_module (unsigned int id) { LOG_I(RRH,"Setting RF device to EXMIMO\n"); #elif OAI_USRP rrh_mod.devs=oai_dv; - rrh_mod.devs->type=USRP_IF; + rrh_mod.devs->type=USRP_B200_IF; LOG_I(RRH,"Setting RF device to USRP\n"); #elif OAI_BLADERF rrh_mod.devs=oai_dv; diff --git a/targets/RT/USER/rrh_gw.h b/targets/RT/USER/rrh_gw.h index 69546dbe07..739e2088b2 100644 --- a/targets/RT/USER/rrh_gw.h +++ b/targets/RT/USER/rrh_gw.h @@ -51,7 +51,7 @@ /*! \brief RRH supports two types of modules: eNB and UE each module is associated with an ethernet device (device of ETH_IF) - and optionally with a RF device (device type can be USRP_IF/BLADERF_IF/EXMIMO_IF/NONE_IF) + and optionally with a RF device (device type can be USRP_B200/USRP_X300/BLADERF_IF/EXMIMO_IF/NONE_IF) UE modules will always have RF device type NONE_IF */ typedef struct { /*! \brief module id */ From 73da19b67157d95116840794d4c9b9ca054433ee Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Mon, 23 Nov 2015 11:16:17 +0100 Subject: [PATCH 26/49] updates to autotest framework --- .../autotests/run_exec_autotests.bash | 2 +- .../autotests/run_exec_lte-softmodem_tests.py | 289 +++++++++++++----- 2 files changed, 213 insertions(+), 78 deletions(-) diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash index 498b733c6b..7bde09d863 100755 --- a/cmake_targets/autotests/run_exec_autotests.bash +++ b/cmake_targets/autotests/run_exec_autotests.bash @@ -407,7 +407,7 @@ for search_expr in "${test_case_array[@]}" elif [ "$class" == "execution" ]; then test_compile_and_run "$name" "$compile_prog" "$compile_prog_args" "$pre_exec" "$pre_exec_args" "$main_exec" "$main_exec_args" "search_array_true[@]" "$search_expr_false" "$nruns" "$pre_compile_prog" "$class" "$compile_prog_out" "$tags" "$mypassword" else - echo "Unexpected class of test case...Exiting...." + echo "Unexpected class of test case...Skipping the test case $name ...." fi done diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py index 101e610bfd..f66f8206c0 100644 --- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -47,6 +47,7 @@ import datetime import getpass import math #from time import clock import xml.etree.ElementTree as ET +import re import log import case01 @@ -58,6 +59,9 @@ import case05 from openair import * import paramiko +import ssh +from ssh import SSHSession + def write_file(filename, string, mode="w"): text_file = open(filename, mode) @@ -65,40 +69,47 @@ def write_file(filename, string, mode="w"): text_file.close() -def sftp_module (username, password, hostname, ports, localfile, remotefile, logfile, operation): - localD = localfile - remoteD = remotefile +def sftp_module (username, password, hostname, ports, paramList,logfile): + #localD = localfile + #remoteD = remotefile #fd, paramiko_logfile = tempfile.mkstemp() #res = os.close(fd ) #paramiko logfile path should not be changed with multiple calls. The logs seem to in first file regardless - paramiko_logfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/log/paramiko.log') error = "" - try: - res=os.system(' echo > ' + paramiko_logfile) - paramiko.util.log_to_file(paramiko_logfile) - transport = paramiko.Transport((hostname, ports)) - transport.connect(username = username, password = password) - sftp = paramiko.SFTPClient.from_transport(transport) - if operation == "put": - sftp.put(remotepath=remoteD, localpath=localD) - elif operation == "get": - sftp.get(remotepath=remoteD, localpath=localD) - else : - print "sftp_module: unidentified operation. Exiting now" - print "hostname = " + hostname - print "ports = " + ports - print "localfile = " + localfile - print "remotefile = " + remotefile - print "logfile = " + logfile - print "operation = " + operation - sys.exit() - sftp.close() - transport.close() - except Exception, e: - error = ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n username = ' + username + '\n hostname = ' + hostname + '\n localfile = ' + localfile + '\n remotefile = ' + remotefile + '\n operation = ' + operation + '\nlogfile = ' + logfile + '\n ports = ' + str(ports) + '\n' - error = error + traceback.format_exc() + #The lines below are outside exception loop to be sure to terminate the test case if the network connectivity goes down or there is authentication failure + + + + transport = paramiko.Transport(hostname, ports) + transport.connect(username = username, password = password) + sftp = paramiko.SFTPClient.from_transport(transport) + + # index =0 + for param in paramList: + try: + operation = param["operation"] + localD = param["localfile"] + remoteD = param["remotefile"] + if operation == "put": + sftp.put(remotepath=remoteD, localpath=localD) + elif operation == "get": + sftp.get(remotepath=remoteD, localpath=localD) + else : + print "sftp_module: unidentified operation:<" + operation + "> Exiting now" + print "hostname = " + hostname + print "ports = " + ports + print "localfile = " + localD + print "remotefile = " + remoteD + print "operation = " + operation + sys.exit() + except Exception, e: + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n username = ' + username + '\n hostname = ' + hostname + '\n localfile = ' + localD + '\n remotefile = ' + remoteD + '\n operation = ' + operation + '\nlogfile = ' + logfile + '\n ports = ' + str(ports) + '\n' + error = error + traceback.format_exc() + + sftp.close() + transport.close() res = os.system('\n echo \'SFTP Module Log for Machine: <' + hostname + '> starts...\' >> ' + logfile + ' 2>&1 ') res = os.system('cat ' + paramiko_logfile + ' >> ' + logfile + ' 2>&1 \n') write_file(logfile, error, "a") @@ -193,12 +204,51 @@ class oaiThread (threading.Thread): self.cmd = cmd self.sudo = sudo self.timeout = timeout + self.machineName = machineName def run(self): print "Starting " + self.name result = self.oai.send_recv(self.cmd, self.sudo, self.timeout) print "result = " + result print "Exiting " + self.name +#This class runs test cases with class oaisim_noS1, compilatation +class testCaseThread_generic(threading.thread): + def __init__(self, threadID, name, oai, machine, logdirOAI5GRepo, oai5GRepoDirRemote, testcasename,oldprogramList, CleanupAluLteBox, username, password, timeout): + threading.Thread.__init__(self) + self.threaID = threadID + self.name = name + self.oai = oai + self.testcasename = testcasename + self.timeout = timeout + self.machine = machine + self.oai5GRepoDirRemote = oai5GRepoDirRemote + self.logdirOAI5GRepo = logdirOAI5GRepo + self.username = username + self.password = password + def run(self): + try: + mypassword='' + #addsudo = 'echo \'' + mypassword + '\' | sudo -S -E ' + addpass = 'echo \'' + mypassword + '\' | ' + user = getpass.getuser() + print "Starting test case : " + self.testcasename + " On machine " + machineName + cleanOldPrograms(oai, oldprogramList, CleanUpAluLteBox) + logdir_local_testcase = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + logdir_local_base = logdirOAI5GRepo+'/cmake_targets/autotests/log/' + logdir_remote_testcase = oai5GRepoDirRemote + '/cmake_targets/autotests/log' + self.testcasename + os.removedirs(logdir_testcase) + os.mkdir (logdir_testcase) + cmd = "( cd " + self.oai5GRepoDirRemote + " \n " + cmd = cmd + "source oaienv \n" + cmd = cmd + "python run_test_case_generic -d " + self.oai5GRepoDirRemote + " -g " + "\"" + self.testcasename + "\"" + cmd = cmd + " ) " + + #Now we copy all the remote + ssh = SSHSession(self.machine , username=username, key_file=None, passsword=password) + ssh.get_all(logdir_remote_testcase , logdir_local_base) + print "Finishing test case : " + self.testcasename + " On machine " + machineName + + def addsudo (cmd, password=""): cmd = 'echo \'' + password + '\' | sudo -S -E bash -c \' ' + cmd + '\' ' return cmd @@ -441,75 +491,116 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, oai_list, logdirOA remotefile = logdir_eNB + '/eNB_compile' + '_' + str(run) + '_.log' sftp_log = os.path.expandvars(logdir_local_testcase + '/sftp_module.log') ports = 22 - sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + paramList = [] + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/eNB_exec' + '_' + str(run) + '_.log' remotefile = logdir_eNB + '/eNB_exec' + '_' + str(run) + '_.log' - sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/eNB_pre_exec' + '_' + str(run) + '_.log' remotefile = logdir_eNB + '/eNB_pre_exec' + '_' + str(run) + '_.log' - sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/eNB_traffic' + '_' + str(run) + '_.log' remotefile = logdir_eNB + '/eNB_traffic' + '_' + str(run) + '_.log' - sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/eNB_task_out' + '_' + str(run) + '_.log' remotefile = logdir_eNB + '/eNB_task_out' + '_' + str(run) + '_.log' - sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + localfile = logdir_local_testcase + '/test_case_list.xml' + remotefile = logdirOAI5GRepo+'/cmake_targets/autotests/test_case_list.xml' + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + sftp_module (user, password, eNBMachine, ports, paramList, sftp_log) + + paramList=[] localfile = logdir_local_testcase + '/UE_compile' + '_' + str(run) + '_.log' remotefile = logdir_UE + '/UE_compile' + '_' + str(run) + '_.log' - sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/UE_exec' + '_' + str(run) + '_.log' remotefile = logdir_UE + '/UE_exec' + '_' + str(run) + '_.log' - sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/UE_pre_exec' + '_' + str(run) + '_.log' remotefile = logdir_UE + '/UE_pre_exec' + '_' + str(run) + '_.log' - sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/UE_traffic' + '_' + str(run) + '_.log' remotefile = logdir_UE + '/UE_traffic' + '_' + str(run) + '_.log' - sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/UE_task_out' + '_' + str(run) + '_.log' remotefile = logdir_UE + '/UE_task_out' + '_' + str(run) + '_.log' - sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") - + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + sftp_module (user, password, UEMachine, ports, paramList, sftp_log) + + paramList=[] localfile = logdir_local_testcase + '/EPC_compile' + '_' + str(run) + '_.log' remotefile = logdir_EPC + '/EPC_compile' + '_' + str(run) + '_.log' - sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/EPC_exec' + '_' + str(run) + '_.log' remotefile = logdir_EPC + '/EPC_exec' + '_' + str(run) + '_.log' - sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/HSS_compile' + '_' + str(run) + '_.log' remotefile = logdir_EPC + '/HSS_compile' + '_' + str(run) + '_.log' - sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/HSS_exec' + '_' + str(run) + '_.log' remotefile = logdir_EPC + '/HSS_exec' + '_' + str(run) + '_.log' - sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/EPC_pre_exec' + '_' + str(run) + '_.log' remotefile = logdir_EPC + '/EPC_pre_exec' + '_' + str(run) + '_.log' - sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/EPC_traffic' + '_' + str(run) + '_.log' remotefile = logdir_EPC + '/EPC_traffic' + '_' + str(run) + '_.log' - sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") localfile = logdir_local_testcase + '/EPC_task_out' + '_' + str(run) + '_.log' remotefile = logdir_EPC + '/EPC_task_out' + '_' + str(run) + '_.log' - sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + sftp_module (user, password, EPCMachine, ports, paramList, sftp_log) #We need to close the new ssh session that was created if index_eNBMachine == index_EPCMachine: oai_EPC.disconnect() +#This function searches if test case is present in list of test cases that need to be executed by user +def search_test_case_group(testcasename, testcasegroup): + if testcasegroup == '': + return True + testcaselist = testcasegroup.split() + for entry in testcaselist: + if entry.find('+') >=0: + match = re.search(entry, testcasename) + if match: + return True + else: + match = testcasename.find(entry) + if match >=0: + return True + return False + + #thread1 = myThread(1, "Thread-1", 1) debug = 0 @@ -522,6 +613,7 @@ timeout=2000 xmlInputFile="./test_case_list.xml" NFSResultsDir = '/mnt/sradio' cleanupOldProgramsScript = '$OPENAIR_DIR/cmake_targets/autotests/tools/remove_old_programs.bash' +testcasegroup='' logdir = '/tmp/' + 'OAITestFrameWork-' + getpass.getuser() + '/' logdirOAI5GRepo = logdir + 'openairinterface5g/' @@ -535,15 +627,19 @@ locallogdir = openairdir_local + '/cmake_targets/autotests/log/' #Remove the contents of local log directory os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir ) -for arg in sys.argv: +i=1 +while i < len (sys.argv): + arg=sys.argv[i] if arg == '-d': debug = 1 elif arg == '-dd': debug = 2 elif arg == '-p' : prompt2 = sys.argv[i+1] + i = i +1 elif arg == '-w' : pw = sys.argv[i+1] + i = i +1 elif arg == '-P' : dlsim = 1 elif arg == '-l' : @@ -552,6 +648,10 @@ for arg in sys.argv: is_compiled = 1 elif arg == '-t' : timeout = sys.argv[i+1] + i = i +1 + elif arg == '-g' : + testcasegroup = sys.argv[i+1].replace("\"","") + i = i +1 elif arg == '-h' : print "-d: low debug level" print "-dd: high debug level" @@ -560,6 +660,9 @@ for arg in sys.argv: print "-l: use local shell instead of ssh connection" print "-t: set the time out in second for commands" sys.exit() + else : + print "Unrecongnized Option: <" + arg + ">. Use -h to see valid options" + sys.exit() i= i + 1 try: @@ -580,6 +683,10 @@ except KeyError: print "Please set the environment variable OPENAIR_TARGETS in the .bashrc" sys.exit(1) +paramiko_logfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/log/paramiko.log') +res=os.system(' echo > ' + paramiko_logfile) +paramiko.util.log_to_file(paramiko_logfile) + # get the oai object host = os.uname()[1] #oai = openair('localdomain','calisson') @@ -719,6 +826,7 @@ print "cpu freq(MHz): " + str(cpu_freq) + "timeout(s): " + str(timeout) #We now prepare the machines for testing #index=0 +threads_init_setup=[] for index in oai_list: try: print "setting up machine: " + MachineList[index] @@ -746,21 +854,25 @@ for index in oai_list: cmd = cmd + ' cd ' + logdir + '\n' cmd = cmd + ' ) > ' + setuplogfile + ' 2>&1 ' #cmd = cmd + 'echo \' ' + cmd + '\' > ' + setup_script + ' 2>&1 \n ' - result = oai_list[index].send_recv(cmd, False, 300 ) + #result = oai_list[index].send_recv(cmd, False, 300 ) write_file(setup_script, cmd, mode="w") - localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' - remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + tempThread = oaiThread(index, 'thread_'+str(index), oai_list[index] , cmd, False, 300) + threads_init_setup.append(tempThread ) + tempThread.start() - sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') - sftp_module (user, pw, MachineList[index], 22, localfile, remotefile, sftp_log, "get") + #localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' + #remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + + #sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + #sftp_module (user, pw, MachineList[index], 22, localfile, remotefile, sftp_log, "get") #Now we copy test_case_list.xml on the remote machines - localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml') - remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/test_case_list.xml' + #localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml') + #remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/test_case_list.xml' - sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') - sftp_module (user, pw, MachineList[index], 22, localfile, remotefile, sftp_log, "put") + #sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + #sftp_module (user, pw, MachineList[index], 22, localfile, remotefile, sftp_log, "put") #print oai_list[index].send('rm -fR ' + logdir) @@ -785,6 +897,29 @@ for index in oai_list: sys.exit(1) +#Now we wait for all the threads to complete +index = 0 +for t in threads_init_setup: + t.join() + setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' + remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + port = 22 + + paramList=[] + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, pw, MachineList[index], port, localfile, remotefile, sftp_log, "get") + + #Now we copy test_case_list.xml on the remote machines + localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml') + remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/test_case_list.xml' + paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + index = index+1 + #Now we process all the test cases @@ -794,28 +929,28 @@ for testcase in testcaseList: testcasename = testcase.get('id') testcaseclass = testcase.findtext('class',default='') desc = testcase.findtext('desc',default='') - if testcaseclass == 'lte-softmodem' : - if testcasename != '015700': - continue - eNBMachine = testcase.findtext('eNB',default='') - UEMachine = testcase.findtext('UE',default='') - EPCMachine = testcase.findtext('EPC',default='') - index_eNBMachine = MachineList.index(eNBMachine) - index_UEMachine = MachineList.index(UEMachine) - index_EPCMachine = MachineList.index(EPCMachine) - print "testcasename = " + testcasename + " class = " + testcaseclass - handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, oai_list, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, pw, CleanUpAluLteBox ) + if search_test_case_group(testcasename, testcasegroup) == True: + if testcaseclass == 'lte-softmodem' : + eNBMachine = testcase.findtext('eNB',default='') + UEMachine = testcase.findtext('UE',default='') + EPCMachine = testcase.findtext('EPC',default='') + index_eNBMachine = MachineList.index(eNBMachine) + index_UEMachine = MachineList.index(UEMachine) + index_EPCMachine = MachineList.index(EPCMachine) + print "testcasename = " + testcasename + " class = " + testcaseclass + handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, oai_list, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, pw, CleanUpAluLteBox ) - elif testcaseclass == 'compilation' : - continue - handle_testcaseclass_compilation (testcase) - elif testcaseclass == 'execution' : - continue - handle_testcaseclass_oaisim (testcase) - else : - print "Unknown test case class: " + testcaseclass - sys.exit() + elif testcaseclass == 'compilation' : + continue + handle_testcaseclass_compilation (testcase) + elif testcaseclass == 'execution' : + continue + handle_testcaseclass_oaisim (testcase) + else : + print "Unknown test case class: " + testcaseclass + sys.exit() +print "Exiting the test cases execution now..." sys.exit() From 03595b40a2c028ed5d2768aeb61716cb0a86dbec Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Sat, 28 Nov 2015 22:18:07 +0100 Subject: [PATCH 27/49] added files for autotest framework --- cmake_targets/autotests/openair.py | 234 +++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 cmake_targets/autotests/openair.py diff --git a/cmake_targets/autotests/openair.py b/cmake_targets/autotests/openair.py new file mode 100644 index 0000000000..1606bcaf6a --- /dev/null +++ b/cmake_targets/autotests/openair.py @@ -0,0 +1,234 @@ +#****************************************************************************** + +# Eurecom OpenAirInterface +# Copyright(c) 1999 - 2013 Eurecom + +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. + +# This program is distributed in the hope it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. + +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". + +# Contact Information +# Openair Admin: openair_admin@eurecom.fr +# Openair Tech : openair_tech@eurecom.fr +# Forums : http://forums.eurecom.fsr/openairinterface +# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France + +#***************************************************************************** + +# \file openair.py +# \brief class that define the oaisim class and its attributes +# \author Navid Nikaein +# \date 2013 +# \version 0.1 +# @ingroup _test + +import pexpect +import pxssh +import time +import os +import array +import shutil +import subprocess +# import call + +from core import * + +SHELL = '/bin/bash' + +class openair(core): + def __init__(self, hostname, address): + self.error = '% ' + self.hostname = hostname + self.address = address + self.localhost = None + core.__init__(self) + + @property + def localhost(self): + if self.localhost : + return self.localhost + elif self.hostname in ['localhost', '127.0.0.7', '::1'] : + self.localhost = self.hostname + return self.localhost + + @localhost.setter + def localhost(self,localhost): + self.localhost = localhost + + def shcmd(self,cmd,sudo=False): + + if sudo: + cmd = "sudo %s" % command + + proc = subprocess.Popen(command, shell=True, + stdout = subprocess.PIPE, + stderr = subprocess.PIPE) + + stdout, stderr = proc.communicate() + return (stdout, stderr) + + def connect(self, username, password, prompt='PEXPECT_OAI'): + self.prompt1 = prompt + self.prompt2 = prompt + self.password = '' + # WE do not store the password when sending commands for secuirity reasons. The password might be accidentally logged in such cases. + #The password is used only to make ssh connections. In case user wants to run programs with sudo, then he/she needs to add following line in /etc/sudoers + # your_user_name ALL=(ALL:ALL) NOPASSWD: ALL + try: + if not username: + username = root + if not password: + password = username + self.oai = pxssh.pxssh() + self.oai.login(self.address,username,password) + self.oai.sendline('PS1='+self.prompt1) + self.oai.PROMPT='PEXPECT_OAI' + # need to look for twice the string of the prompt + self.oai.prompt() + self.oai.prompt() + self.oai.sendline('uptime') + self.oai.prompt() + print self.oai.before + + except Error, val : + print "Error: can't connect to"+username+"@"+self.address + + def connect2(self, username, password, prompt='$'): + self.prompt1 = prompt + self.prompt2 = prompt + self.password = password + while 1: + try: + if not username: + username = root + if not password: + password = username + + self.oai = pexpect.spawn('ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" -o "ConnectionAttempts=1" ' \ + + username + '@' + self.address) + + index = self.oai.expect([re.escape(self.prompt1), re.escape(self.prompt2), pexpect.TIMEOUT], timeout=40) + if index == 0 : + return 'Ok' + else : + index = self.oai.expect(['password:', pexpect.TIMEOUT], timeout=40) + if index == 0 : + self.oai.sendline(password) + index = self.oai.expect([re.escape(self.prompt1), re.escape(self.prompt2), pexpect.TIMEOUT], timeout=10) + if index != 0: + print 'ERROR! could not login with SSH.' + print 'Expected ' + self.prompt1 + ', received >>>>' + self.oai.before + '<<<<' + sys.exit(1) + return 'Ok' + + except Exception, val: + time.sleep(5) + print "Error:", val + + def connect_localshell(self, prompt='$'): + self.prompt1 = prompt + self.prompt2 = prompt + + while 1: + try: + # start a shell and use the current environment + self.oai = pexpect.spawn('bash --norc --noprofile') + + index = self.oai.expect([re.escape(self.prompt1), re.escape(self.prompt2), pexpect.TIMEOUT], timeout=40) + if index == 0 : + return 'Ok' + else : + sys.exit(1) + + except Exception, val: + time.sleep(5) + print "Error:", val + + def disconnect(self): + print 'disconnecting the ssh connection to ' + self.address + '\n' + self.oai.send('exit') +# self.cancel() + + def kill(self, user, pw): + try: + if user == 'root' : + os.system('pkill oaisim') + os.system('pkill cc1') + time.sleep(1) + os.system('pkill oaisim') + else : + os.system('echo '+pw+' | sudo -S pkill oaisim') + os.system('echo '+pw+' | sudo -S pkill cc1') + time.sleep(1) + os.system('echo '+pw+' | sudo -S pkill oaisim') + except Error, val: + print "Error:", val + + def rm_driver(self,oai,user, pw): + try: + if user == 'root' : + #oai.send_nowait('rmmod nasmesh;') + os.system('rmmod nasmesh;') + else : + oai.send_nowait('echo '+pw+ ' | sudo -S rmmod nasmesh;') + #os.system('echo '+pw+ ' | sudo -S rmmod nasmesh;') + except Error, val: + print "Error removing oai network driver module:", val + + def driver(self,oai,user,pw): + #pwd = oai.send_recv('pwd') + oai.send('cd $OPENAIR_TARGETS;') + oai.send('cd SIMU/USER;') + try: + if user == 'root' : + oai.send_nowait('insmod ./nasmesh.ko;') + else : + oai.send('echo '+pw+ ' | sudo -S insmod ./nasmesh.ko;') + + except Error, val: + print "Error inserting oai network driver module:", val + + def cleandir (self, logdir,debug) : + + for filename in os.listdir(logdir): + filepath = os.path.join(logdir, filename) + if debug == 2 : + print 'logdir is ' + logdir + print 'filepath is ' + filepath + try: + shutil.rmtree(filepath) + except OSError: + os.remove(filepath) + #print 'Could not remove the filepath'+ filepath + ' with error ' + OSError + + def create_dir(self,dirname,debug) : + if not os.path.exists(dirname) : + try: + os.makedirs(dirname,0755) + except OSError: + # There was an error on creation, so make sure we know about it + raise + def cpu_freq(self): + freq=0 + proc = subprocess.Popen(["cat","/proc/cpuinfo"], + stdout=subprocess.PIPE) + out, err = proc.communicate() + + for line in out.split("\n"): + if "cpu MHz" in line: + freq = float(line.split(":")[1]) + break + + return freq From e070050d13daffde25d7f73b53c04b8cb18713e4 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Sat, 28 Nov 2015 22:18:17 +0100 Subject: [PATCH 28/49] added files for autotest framework --- cmake_targets/autotests/core.py | 349 ++++++++++++++++++++++++++++++++ cmake_targets/autotests/log.py | 206 +++++++++++++++++++ 2 files changed, 555 insertions(+) create mode 100644 cmake_targets/autotests/core.py create mode 100644 cmake_targets/autotests/log.py diff --git a/cmake_targets/autotests/core.py b/cmake_targets/autotests/core.py new file mode 100644 index 0000000000..c899069f89 --- /dev/null +++ b/cmake_targets/autotests/core.py @@ -0,0 +1,349 @@ +#****************************************************************************** + +# Eurecom OpenAirInterface +# Copyright(c) 1999 - 2013 Eurecom + +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. + +# This program is distributed in the hope it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. + +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". + +# Contact Information +# Openair Admin: openair_admin@eurecom.fr +# Openair Tech : openair_tech@eurecom.fr +# Forums : http://forums.eurecom.fsr/openairinterface +# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France + +#***************************************************************************** + +# \file core.py +# \brief OAI core testing class that provides various primitives to send/recv cmd to openair class searching for patterns and process the responses and tag the test case as passed/failed/skipped +# \author Navid Nikaein +# \date 2013 +# \version 0.1 +# @ingroup _test + + +import pexpect +import time +import re +import string +import sys +import os + +import openair +import log + +class core: + def __init__(self): + self.send_cr = 1 + self.expect_echo = 0 + self.expect_response = 1 + self.flag_errors = 1 + self.log = None + + def clean(self, obj): + if type(obj) is str: + return obj + else: + return repr(obj) + + def mark(self, marker): + if self.log: + print >> self.log, "\n\n{" + marker + "}\n\n" + + def expected(self, expected, got): + return "================================= Failure ===================================\n"+\ + "_________________________________ Expected __________________________________\n"+\ + "--->" + expected + "<-\n" +\ + "_________________________________ Received __________________________________\n"+\ + "--->" + got + "<-\n" +\ + "=============================================================================\n" + + def unexpected(self, notexpected, got): + return "================================= Failure ===================================\n"+\ + "__________________________ not expect to find _______________________________\n"+\ + "---> " + self.clean(notexpected) + "\n" +\ + "_________________________________ Received___________________________________\n"+\ + "---> " + self.clean(got) + "\n" +\ + "=============================================================================\n" + + def failed(self, command, expect,debug): + time.sleep(2) + ret = "================================= Failure =================================\n" + ret +="_________________________________ Sent ____________________________________\n" + ret +="---> " + command + "\n" + ret +="______________________________Searching for _______________________________\n" + ret +="---> " + self.clean(expect) + "\n" + if debug >= 1 : + ret +="________________________________ Received _________________________________\n" + ret +="---> " + self.clean(self.oai.before) + "\n" + ret +="_______________________________ Remaining _________________________________\n" + ret +="---> " + self.clean(self.oai.after) + "\n" + ret +="===========================================================================\n" + return ret + + def err(self, command): + return "============================ Error received ================================\n"+\ + "__________________________________ Sent ____________________________________\n"+\ + '---> ' + command + "\n"+\ + "_________________________________ Error was ________________________________\n"+\ + "---> " + self.oai.before + "\n" +\ + "============================================================================\n" + + + def wait_quiet(self, timeout=0.5): + while 1: + try: + self.oai.expect(['..*'], timeout=0.5) + except pexpect.TIMEOUT, e: + return +# print '[Flushing ' + self.oai.after + ']' + + # **************************Send***************************** + # 1) send a command and return, do not wait + # ************************************************************ + def send_nowait(self, command, sudo=False): + rsp1 = self.prompt1 + rsp2 = self.prompt2 + if sudo == True: + command = 'echo \'' + self.password + '\' | sudo -S -E ' + command + + self.wait_quiet() + if self.send_cr: + log.stats['cmd'] += 1 + self.oai.sendline(command) + else: + self.oai.send(command) + + + # **************************Send***************************** + # 1) send a command + # 2) wait for a return prompt. Don't capture the response. + # 3) Check for error or timeout. + # ************************************************************ + def send(self, command,sudo=False, timeout = 50, rsp1=None, rsp2=None,debug=0): + if not rsp1: + rsp1 = self.prompt1 + if not rsp2: + rsp2 = self.prompt2 + self.wait_quiet() + if sudo == True: + command = 'echo \'' + self.password + '\' | sudo -S -E ' + command + if self.send_cr: + log.stats['cmd'] += 1 + self.oai.sendline(command) + else: + self.oai.send(command) + + if self.expect_echo: + #cmd = self.oai.expect([re.escape(command), pexpect.TIMEOUT], timeout=timeout); + cmd = self.oai.expect_exact([command, pexpect.TIMEOUT], timeout=timeout); + if cmd != 0: + raise log.err(self.failed(command, command,debug)) + + if self.expect_response: + #index = self.oai.expect([re.escape(rsp1), re.escape(rsp2),'%', pexpect.TIMEOUT], timeout=timeout) + index = self.oai.expect_exact([rsp1, rsp2, pexpect.TIMEOUT], timeout=timeout) + + if index == 0 or index == 1: + return 'OK' + elif index == 2: + #self.oai.expect([re.escape(rsp1), re.escape(rsp2), pexpect.TIMEOUT], timeout=timeout) + self.oai.expect_exact([rsp1, rsp2, pexpect.TIMEOUT], timeout=timeout) + if self.flag_errors: + raise log.err(self.err(command)) + else: + return 'OK' + else: + raise log.err(self.failed(command, rsp1 + ' or ' + rsp2,debug)) + + # **************************send_recv************************* + # 1) send a command + # 2) wait for either rsp1 or rsp2 is found (normally prompts) + # 3) return everything seen before that + # ************************************************************ + def send_recv(self, command, sudo=False, timeout=100, rsp1=None, rsp2=None,debug=0): + if not rsp1: + rsp1 = self.prompt1 + if not rsp2: + rsp2 = self.prompt2 + self.wait_quiet() + if sudo == True: + command = 'echo \'' + self.password + '\' | sudo -S -E ' + command + if self.send_cr: + log.stats['cmd'] += 1 + self.oai.sendline(command) + else: + self.oai.send(command) + #index = self.oai.expect([re.escape(rsp1), re.escape(rsp2), pexpect.TIMEOUT], timeout=timeout); + index = self.oai.expect_exact([rsp1, rsp2, pexpect.TIMEOUT], timeout=timeout); + if index == 0 or index == 1 : + return self.oai.before + else: + raise log.err(self.failed(command, rsp1 + ' or ' + rsp2,debug)) + + + # **************************send_expect************************* + # 1) send a command, and optionally specify a the time to wait + # 2) search for an expected pattern in the response + # 3) raise an error if not found + # ************************************************************** + def send_expect(self, command, expect, sudo=False, delay = 50, rsp1=None, rsp2=None,debug=0): + if debug : + print command + print expect + print delay + rsp = self.send_recv(command, sudo, delay, rsp1, rsp2) + #print rsp + if (rsp.find(expect) != -1): + return 'Ok' + + raise log.err(self.failed(command, expect,debug)) + + + # **************************send_expect_re************************* + # 1) send a command, and optionally specify a the time to wait + # 2) search for an expected pattern defined by a regular expression in the response + # 3) return a error if raise_err flag is set and re not found, otherwise return 'Ok' + # ***************************************************************** + def send_expect_re(self, command, expect, sudo=False, raise_err=1, delay = 50, rsp1=None, rsp2=None,debug=0): + rsp = self.send_recv(command, sudo, delay, rsp1, rsp2) +# print rsp + match = re.compile(expect).search(rsp) + if match: + return match + if raise_err: + raise log.err(self.failed(command, expect,debug)) + else : + return None + + # **************************send_expect************************* + # 1) send a command, and optionally specify a the time to wait + # 2) search for an expected pattern defined by a re in the response + # 3) return ok if not found + # ************************************************************** + def send_expect_false(self, command, expect, sudo=False, delay = 5, rsp1=None, rsp2=None,debug=0): + rsp = self.send_recv(command, sudo, delay, rsp1, rsp2) + # print rsp + if (rsp.find(expect) == -1): + return 'OK' + + raise log.err(self.failed(command, expect,debug)) + + + # **************************send_wait************************* + # 1) send a command, and optionally specify a the time to wait + # 2) search for an expected pattern in the response + # 3) retry for a numretries if not found + # 4) return an error if not found after the numtries + # 3) return the response if found + # ************************************************************** + def send_wait(self, command, expect, sudo=False, numretries=3, rsp1=None, rsp2=None,debug=0): + timer = 0 + for i in range(numretries): + rsp = self.send_recv(command, sudo, 10, rsp1, rsp2) + if (rsp.find(expect) != -1): + return rsp; + time.sleep(2) + timer = timer+2 + raise log.err(self.failed(command, expect,debug)) + + # **************************send_wait_re************************* + # 1) send a command, and optionally specify a the time to wait + # 2) search for an expected pattern defined by a re in the response + # 3) retry for a numretries if not found + # 4) return an error if not found after the numtries + # 3) return the response if found + # ************************************************************** + def send_wait_re(self, command, expect, sudo=False, numretries=3, rsp1=None, rsp2=None,debug=0): + timer = 0 + for i in range(numretries): + rsp = self.send_recv(command,sudo) + if re.compile(expect).search(rsp): +# print "Found in",i,"attempts" + return rsp; + time.sleep(2) + timer = timer+2 + raise log.err(self.failed(command, expect,debug)) + + # **************************send_wait_false************************* + # 1) send a command, and optionally specify a the time to wait + # 2) search for an expect pattern in the response + # 3) return the response if not found + # 4) return an error if the pattern found after the numtries + # ************************************************************** + def send_wait_false(self, command, expect, sudo=False, numretries=3, rsp1=None, rsp2=None,debug=0): + timer = 1 + for i in range(numretries): + rsp = self.send_recv(command,sudo) + if (rsp.find(expect) == -1): + return rsp; + time.sleep(2) + timer = timer+2 + raise log.err(self.failed(command, expect,debug)) + + # **************************send_wait_false************************* + # 1) send a command, and optionally specify a the time to wait + # 2) search for an expect pattern defined by a re in the response + # 3) return the response if not found + # 4) return an error if the pattern found after the numtries + # ************************************************************** + def send_wait_false_re(self, command, expect, sudo=False, numretries=3, rsp1=None, rsp2=None,debug=0): + timer = 0 + for i in range(numretries): + rsp = self.send_recv(command,sudo) + if not re.compile(expect).search(rsp): + return rsp; + time.sleep(2) + timer = timer+2 + raise log.err(self.failed(command, expect,debug)) + + # **************************find************************* + # 1) find an exact pattern in a given string + # 2) raise an error if not found + # ************************************************************** + def find(self, string, pattern): + word = string.replace(pattern,'*','\*') + words = string.replace(word,' ','\s*') + if re.search(words,string): + pass + else: + raise log.err(string) + + + # **************************find_false************************** + # 1) find an exact pattern in a given string + # 2) raise an error if found + # ************************************************************** + def find_false(self, string, pattern): + if string.find(pattern) != -1: + raise log.err(string) + + # **************************find_re************************* + # 1) find an exact re pattern in a given string + # 2) raise an error if not found + # ************************************************************** + def find_re(self, string, pattern): + if not re.compile(pattern).search(string): + raise log.err(string) + + # **************************find_false_re************************* + # 1) find an exact re pattern in a given string + # 2) raise an error if found + # ************************************************************** + def find_false_re(self, string, pattern): + if re.compile(pattern).search(string): + raise log.err(string) + diff --git a/cmake_targets/autotests/log.py b/cmake_targets/autotests/log.py new file mode 100644 index 0000000000..0b4baff3e9 --- /dev/null +++ b/cmake_targets/autotests/log.py @@ -0,0 +1,206 @@ +#****************************************************************************** + +# Eurecom OpenAirInterface +# Copyright(c) 1999 - 2013 Eurecom + +# This program is free software; you can redistribute it and/or modify it +# under the terms and conditions of the GNU General Public License, +# version 2, as published by the Free Software Foundation. + +# This program is distributed in the hope it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. + +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + +# The full GNU General Public License is included in this distribution in +# the file called "COPYING". + +# Contact Information +# Openair Admin: openair_admin@eurecom.fr +# Openair Tech : openair_tech@eurecom.fr +# Forums : http://forums.eurecom.fsr/openairinterface +# Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France + +#***************************************************************************** + +# \file log.py +# \brief provides primitives and defines how the logs and statistics are generated +# \author Navid Nikaein +# \date 2013 +# \version 0.1 +# @ingroup _test + +import sys +import re +import time +import datetime +import array +import xml.etree.ElementTree as ET + + +debug = False +docfile = '' +start_time = time.time() +testcase_starttime = start_time +debug = 0 +stats = {'passed':0, 'failed':0, 'skipped':0, 'internal_errors':0, 'cmd':0} + +# xml result (jUnit like) +xUnitTestsuites = ET.Element( 'testsuites' ) +xUnitTestsuite = ET.SubElement( xUnitTestsuites, 'testsuite' ) +xUnitTestsuite.set( 'name', 'OAI' ) +xUnitTestsuite.set( 'timestamp', datetime.datetime.fromtimestamp(start_time).strftime('%Y-%m-%dT%H:%M:%S') ) +xUnitTestsuite.set( 'hostname', 'localhost' ) +#xUnitSystemOut = ET.SubElement( xUnitTestsuite, 'system-out' ) + +class bcolors: + header = '\033[95m' + okblue = '\033[94m' + okgreen = '\033[92m' + warning = '\033[93m' + fail = '\033[91m' + normal = '\033[0m' + + def __init__(self): + if not sys.stdout.isatty(): + self.disable() + + def disable(self): + self.header = '' + self.okblue = '' + self.okgreen = '' + self.warning = '' + self.fail = '' + self.normal = '' + +class err(Exception): + def __init__(self, value): + self.value = value + def __str__(self): + return repr(self.value) + +def writefile(logfile, message): + F_testlog = open(logfile, 'a') + F_testlog.write(message + '\n') + F_testlog.close() + + +def sleep(seconds): + time.sleep(seconds) + +def start(): + """Start the timer for the following testcase.""" + global testcase_starttime + testcase_starttime = time.time() + +def set_debug_level(level): + debug = level + +def statistics(logfile): + global start_time + + #if stats['passed'] == 0: + # print "no test executed...exiting" + # sys.exit() + + total_tests = stats['passed'] + stats['failed'] + stats['skipped'] + total_ex_tests = stats['passed'] + stats['failed'] + elapsed_time = time.gmtime(time.time() - start_time) + print '\n' + log_record('info', '===============================================') + log_record('info', 'Total tests performed ' + repr(total_tests)) + log_record('info', 'Tests passed ' + repr(stats['passed'])) + log_record('info', 'Tests failed ' + repr(stats['failed'])) + log_record('info', 'Tests skipped ' + repr(stats['skipped'])) + log_record('info', '') + log_record('info', 'Total commands sent ' + repr(stats['cmd'])) + log_record('info', 'Total elapsed time (h:m:s) ' + time.strftime('%H:%M:%S', elapsed_time)) + log_record('info', '===============================================') + log_record('info', 'Testing pass rate ' + repr((stats['passed'] * 100) / total_tests) + '%') + log_record('info', '===============================================') + + writefile(logfile, '\n=====================Results===================') + writefile(logfile, 'Total tests performed ' + repr(total_tests)) + writefile(logfile, 'Tests passed ' + repr(stats['passed'])) + writefile(logfile, 'Tests failed ' + repr(stats['failed'])) + writefile(logfile, 'Tests skipped ' + repr(stats['skipped'])) + writefile(logfile, '') + writefile(logfile, 'Total commands sent ' + repr(stats['cmd'])) + writefile(logfile, 'Total elapsed time (h:m:s) ' + time.strftime('%H:%M:%S', elapsed_time)) + writefile(logfile, '===============================================') + writefile(logfile, 'Testing pass rate ' + repr((stats['passed'] * 100) / total_tests) + '%') + writefile(logfile, '===============================================\n') + + xUnitTestsuite.set( 'tests', repr(total_tests) ) + xUnitTestsuite.set( 'failures', repr(stats['failed']) ) + xUnitTestsuite.set( 'skipped', repr(stats['skipped']) ) + xUnitTestsuite.set( 'errors', '0' ) + time_delta = datetime.datetime.now() - datetime.datetime.fromtimestamp(start_time) + xUnitTestsuite.set( 'time', repr(time_delta.total_seconds()) ) + writefile( logfile + '.xml', ET.tostring( xUnitTestsuites, encoding="utf-8", method="xml" ) ) + +def log_record(level, message): + ts = time.strftime('%d %b %Y %H:%M') + message = ts + ' [' + level + '] ' + message + if level == 'passed' : + print bcolors.okgreen + message + bcolors.normal + elif level == 'failed' : + print bcolors.fail + message + bcolors.normal + elif level == 'skipped' : + print bcolors.warning + message + bcolors.normal + else : + print message + +def fail(case, testnum, testname, conf, message, diag, output,trace): +# report(case, testnum, testname, conf, 'failed', output, diag, message) + report(case, testnum, testname, conf, 'failed', output, diag) + log_record('failed', case + testnum + ' : ' + testname + ' ('+ conf+')') + if message : + log_record('failed', "Output follows:\n" + message ) + if trace : + log_record('failed', "trace file can be found in " + trace + "\n" ) + stats['failed'] += 1 + +def failquiet(case, testnum, testname, conf): + log_record('failed', case + testnum + ' :' + testname + ' ('+ conf+')') + stats['failed'] += 1 + +def ok(case, testnum, testname, conf, message, output): + report(case, testnum, testname, conf, 'passed', output) + log_record('passed', case + testnum + ' : ' + testname + ' ('+ conf+')') + if message : + print bcolors.okgreen + message + bcolors.normal + stats['passed'] += 1 + + +def skip(case, testnum, testname, conf, message=None, diag=None, output=None): + log_record('skipped', case + testnum + ' :' + testname + ' ('+ conf+')') + report(case, testnum, testname, conf, 'skipped', output, diag) + if message : + log_record('skipped', "Output follows:\n" + message ) + if diag : + log_record('skipped', "Diagnostic: \n" + diag ) + stats['skipped'] += 1 + + +def report(case, test, name, conf, status, output, diag=None, desc=None): + writefile (output, '[' +status+ '] ' + case + test + ' : ' + name + ' ('+ conf+')') + if diag : + writefile (output, '-------> ' + diag) + if desc: + writefile(output, desc) + #log_record('report', + case + test + ' documented') + e = ET.SubElement( xUnitTestsuite, 'testcase' ) + e.set( 'name', case + '_' + test + '_' + name ) + e.set( 'classname', 'shellscript' ) + e.set( 'time', repr( time.time() - testcase_starttime ) ) + if status == 'failed': + e = ET.SubElement( e, 'failure' ) + e.set( 'message', 'failed' ) + e.text = diag + if status == 'skipped': + e = ET.SubElement( e, 'skipped' ) From d897ea3e753de0f6f48ae0caf0704a9264cd07bf Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Sun, 29 Nov 2015 20:04:26 +0100 Subject: [PATCH 29/49] improved logging in build helper and fixed a minor bug in installation --- cmake_targets/tools/build_helper | 67 ++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 21 deletions(-) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index d58d7018ed..004c83f0b8 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -111,7 +111,12 @@ compilations() { cd $OPENAIR_DIR/cmake_targets/$1/build { rm -f $3 - make -j`nproc` $2 VERBOSE=$VERBOSE_COMPILE + if [ "$VERBOSE_COMPILE" == "1" ]; then + make -j`nproc` $2 VERBOSE=$VERBOSE_COMPILE + else + make -j`nproc` $2 + fi + } > $dlog/$2.$REL.txt 2>&1 echo_info "Log file for compilation has been written to: $dlog/$2.$REL.txt" if [ -s $3 ] ; then @@ -158,22 +163,33 @@ install_gnutls_from_source(){ check_install_usrp_uhd_driver(){ + log_file=$OPENAIR_DIR/cmake_targets/log/check_install_usrp_uhd_driver_log.txt + echo_info "\nIn function: check_install_usrp_uhd_driver(). Installing USRP Drivers : The logfile for the installation is located here: $log_file " + ( v=$(lsb_release -cs) $SUDO apt-add-repository "deb http://files.ettus.com/binaries/uhd/repo/uhd/ubuntu/$v $v main" $SUDO apt-get update $SUDO apt-get -y install python python-tk libboost-all-dev libusb-1.0-0-dev $SUDO apt-get -y install -t `lsb_release -cs` uhd --force-yes + ) >& $log_file } check_install_bladerf_driver(){ + log_file=$OPENAIR_DIR/cmake_targets/log/check_install_bladerf_driver_log.txt + echo_info "\nIn function: check_install_bladerf_driver(). Install BLADERF drivers : The logfile for the installation is located here: $log_file " + ( $SUDO add-apt-repository -y ppa:bladerf/bladerf $SUDO apt-get update $SUDO apt-get install -y bladerf libbladerf-dev - $SUDO apt-get install bladerf-firmware-fx3 - $SUDO apt-get install bladerf-fpga-hostedx40 + $SUDO apt-get install -y bladerf-firmware-fx3 + $SUDO apt-get install -y bladerf-fpga-hostedx40 bladeRF-cli --flash-firmware /usr/share/Nuand/bladeRF/bladeRF_fw.img + ) >& $log_file } check_install_additional_tools (){ + log_file=$OPENAIR_DIR/cmake_targets/log/check_install_additional_tools_log.txt + echo_info "\nIn function: check_install_oai_software(). Installing optional OAI packages : The logfile for the installation is located here: $log_file " + ( $SUDO apt-get update $SUDO apt-get install -y \ check \ @@ -195,26 +211,30 @@ check_install_additional_tools (){ valgrind \ vlan \ ctags + ) >& $log_file } check_install_oai_software() { + log_file=$OPENAIR_DIR/cmake_targets/log/check_install_oai_software_log.txt + echo_info "\nIn function: check_install_oai_software(). Installing mandatory OAI packages : The logfile for the installation is located here: $log_file " + ( $SUDO apt-get update $SUDO apt-get install -y \ - autoconf \ + autoconf \ automake \ bison \ build-essential \ cmake \ cmake-curses-gui \ doxygen \ - doxygen-gui\ - texlive-latex-base\ + doxygen-gui \ + texlive-latex-base \ ethtool \ flex \ - gccxml \ - gdb \ - git \ + gccxml \ + gdb \ + git \ graphviz \ gtkwave \ guile-2.0-dev \ @@ -233,7 +253,7 @@ check_install_oai_software() { libgmp-dev \ libgtk-3-dev \ libidn2-0-dev \ - libidn11-dev \ + libidn11-dev \ libmysqlclient-dev \ liboctave-dev \ libpgm-5.1 \ @@ -255,10 +275,10 @@ check_install_oai_software() { openssl \ python \ subversion \ - xmlstarlet \ - python-pip \ - pydb \ - wvdial + xmlstarlet \ + python-pip \ + pydb \ + wvdial $SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so if [ `lsb_release -rs` = '12.04' ] ; then install_nettle_from_source @@ -268,20 +288,25 @@ check_install_oai_software() { fi $SUDO pip install paramiko $SUDO pip install pyroute2 + ) > $log_file 2>&1 install_asn1c_from_source } install_asn1c_from_source(){ + asn1_install_dir=$OPENAIR_DIR/cmake_targets/log/asn1c_install_log.txt + echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_dir " + ( + rm -rf /tmp/asn1c-r1516 mkdir -p /tmp/asn1c-r1516 cd /tmp/asn1c-r1516 - rm -rf /tmp/asn1c-r1516/* - svn co https://github.com/vlm/asn1c/trunk /tmp/asn1c-r1516 -r 1516 > /tmp/log_compile_asn1c - patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch.p0 >> /tmp/log_compile_asn1c - patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0 >> /tmp/log_compile_asn1c - patch -p0 < $OPENAIR_DIR/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 >> /tmp/log_compile_asn1c + svn co https://github.com/vlm/asn1c/trunk /tmp/asn1c-r1516 -r 1516 + patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch.p0 + patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0 + patch -p0 < $OPENAIR_DIR/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 ./configure - make > /tmp/log_compile_asn1c 2>&1 - $SUDO make install + make -j`nproc` + $SUDO make install + ) > $asn1_install_dir 2>&1 } ################################################# From 34b61a1a5332cd7d20ae6054ab74b30ffe16022c Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Sun, 29 Nov 2015 22:52:49 +0100 Subject: [PATCH 30/49] updated test case architecture for parallel/faster execution --- cmake_targets/autotests/README.txt | 55 ++- .../autotests/run_exec_autotests.bash | 246 ++++++---- cmake_targets/autotests/test_case_list.xml | 462 ++++++++++++------ cmake_targets/tools/test_helper | 18 +- 4 files changed, 518 insertions(+), 263 deletions(-) diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt index 25f0c499bb..166db2990e 100644 --- a/cmake_targets/autotests/README.txt +++ b/cmake_targets/autotests/README.txt @@ -6,41 +6,50 @@ Obj.# Case# Test# Description 01 pre-commit test case 01 01 Build OAI 01 01 01 Build oaisim.Rel8 -01 01 02 Build oaisim.Rel8 + network device driver(nasmesh_fix) -01 01 03 Build (lte-softmodem.Rel8.EXMIMO + lte-softmodem.Rel10.EXMIMO + lte-softmodem.Rel10.USRP) -01 01 04 Build (dlsim.Rel10 + ulsim.Rel10 + pucchsim.Rel10 + prachsim.Rel10 + pdcchsim.Rel10 + pbchsim.Rel10 + mbmssim.Rel10 +01 01 02 Build oaisim.Rel10 +01 01 03 Build oaisim_noS1.Rel10 +01 01 10 Build lte-softmodem_noS1.USRP.Rel10 +01 01 11 Build lte-softmodem_noS1.EXMIMO.Rel10 +01 01 12 Build lte-softmodem_noS1.BLADERF.Rel10 +01 01 13 Build lte-softmodem_noS1.ETHERNET.Rel10 +01 01 20 Build lte-softmodem.USRP.Rel10 +01 01 21 Build lte-softmodem.EXMIMO.Rel10 +01 01 22 Build lte-softmodem.BLADERF.Rel10 +01 01 23 Build lte-softmodem.ETHERNET.Rel10 + +01 01 30 Build (dlsim.Rel10 + ulsim.Rel10 + pucchsim.Rel10 + prachsim.Rel10 + pdcchsim.Rel10 + pbchsim.Rel10 + mbmssim.Rel10 secu_knas_encrypt_eia1.Rel10 secu_kenb.Rel10 aes128_ctr_encrypt.Rel10 aes128_ctr_decrypt.Rel10 secu_knas_encrypt_eea2.Rel10 secu_knas.Rel10 secu_knas_encrypt_eea1.Rel10 kdf.Rel10 aes128_cmac_encrypt.Rel10 secu_knas_encrypt_eia2.Rel10) -01 01 06 Build oaisim.Rel8 + ITTI -01 01 07 Build oaisim.Rel10 -01 01 08 Build oaisim.Rel10 + ITTI -01 01 20 Build Nasmesh -01 01 30 Build RRH Gateway + +01 01 40 Build RRH Gateway for USRP (Rel 10) +01 01 41 Build RRH Gateway for EXMIMO (Rel 10) +01 01 42 Build RRH Gateway for BLADERF (Rel 10) -01 02 Run OAISIM Rel10 (TDD + 5MHz/10MHz/20MHz + TM 1,2,5,6), and check the operation -01 02 00 Run OAISIM Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit -01 02 01 Run OAISIM Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors -01 02 02 Run OAISIM Rel10 TDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit -01 02 03 Run OAISIM Rel10 TDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors -01 02 04 Run OAI Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) without PHY_ABSTRACTION mode, ping from from eNB to UE, + +01 02 Run OAISIM-NOS1 Rel10 (TDD + 5MHz/10MHz/20MHz + TM 1,2,5,6), and check the operation +01 02 00 Run OAISIM-NOS1 Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit +01 02 01 Run OAISIM-NOS1 Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors +01 02 02 Run OAISIM-NOS1 Rel10 TDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit +01 02 03 Run OAISIM-NOS1 Rel10 TDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors +01 02 04 Run OAISIM-NOS1 Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) without PHY_ABSTRACTION mode, ping from from eNB to UE, and for check for no packet losses -01 02 05 Run OAI Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode, send ping from from eNB to UE, +01 02 05 Run OAISIM-NOS1 Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode, send ping from from eNB to UE, and check for no packet losses -01 03 Run OAISIM Rel10 (FDD + 5MHz/10MHz/20MHz + TM 1,2,5,6), and check the operation -01 03 00 Run OAISIM Rel10 FDD, 1 eNB + 1 UE 1 eNB (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit -01 03 01 Run OAISIM Rel10 FDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors -01 03 02 Run OAISIM Rel10 FDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit -01 03 03 Run OAISIM Rel10 FDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors -01 03 04 Run OAI Rel10 FDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) without PHY_ABSTRACTION mode, ping from from eNB to UE, +01 03 Run OAISIM-NOS1 Rel10 (FDD + 5MHz/10MHz/20MHz + TM 1,2,5,6), and check the operation +01 03 00 Run OAISIM-NOS1 Rel10 FDD, 1 eNB + 1 UE 1 eNB (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit +01 03 01 Run OAISIM-NOS1 Rel10 FDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors +01 03 02 Run OAISIM-NOS1 Rel10 FDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit +01 03 03 Run OAISIM-NOS1 Rel10 FDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors +01 03 04 Run OAISIM-NOS1 Rel10 FDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) without PHY_ABSTRACTION mode, ping from from eNB to UE, and for check for no packet losses -01 03 05 Run OAI Rel10 FDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode, send ping from from eNB to UE, +01 03 05 Run OAISIM-NOS1 Rel10 FDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode, send ping from from eNB to UE, and check for no packet losses -01 04 MBSFN Tests +01 04 OAISIM-NOS1 MBSFN Tests 01 04 00 Check if eMBMS procedure is not finished completely, make sure that the SIB13/MCCH have been correclty received by UEs 01 04 01 Check if eMBMS multicast/broadcast data is received, make sure that the SIB13/MCCH/MTCH have been correclty received by UEs 01 04 02 Check for eMBMS multicast/broadcast data received in fdd mode, make sure that the SIB13/MCCH/MTCH have been correctly diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash index 7bde09d863..84d1801adf 100755 --- a/cmake_targets/autotests/run_exec_autotests.bash +++ b/cmake_targets/autotests/run_exec_autotests.bash @@ -43,8 +43,8 @@ function test_compile() { xUnit_start test_case_name=$1 - log_dir=$tdir/log - log_file=$tdir/log/test.$1.txt + log_dir=$tdir/log/$test_case_name + log_file=$log_dir/test.$1.log.txt compile_prog=$2 compile_args=$3 pre_exec_file=$4 @@ -57,11 +57,18 @@ function test_compile() { class=${12} compile_prog_out=${13} tags=${14} - build_dir=$tdir/$1/build - exec_file=$build_dir/$6 + xmlfile_testcase=$log_dir/test.$1.xml + #build_dir=$tdir/$1/build + #exec_file=$build_dir/$6 + #compile_prog_out=`eval "echo $compile_prog_out"` + #echo "compile_prog_out = $compile_prog_out" + read -a compile_prog_out_array <<< "$compile_prog_out" + #Temporary log file where execution log is stored. temp_exec_log=$log_dir/temp_log.txt + rm -fr $log_dir + mkdir -p $log_dir @@ -77,44 +84,77 @@ function test_compile() { compile_prog_array=() read -a compile_prog_array <<<"$compile_prog" - tags_array=() - read -a tags_array <<<"$tags" + #tags_array=() + #read -a tags_array <<<"$tags" - pre_compile_prog_array=() - readarray -t pre_compile_prog_array <<< "$pre_compile_prog" + #pre_compile_prog_array=() + #readarray -t pre_compile_prog_array <<< "$pre_compile_prog" + result=1 + result_string="" for (( run_index=1; run_index <= $nruns; run_index++ )) do - tags_array_index=0 - for pre_compile_prog_array_index in "${pre_compile_prog_array[@]}" - do + + #tags_array_index=0 + #for pre_compile_prog_array_index in "${pre_compile_prog_array[@]}" + #do - for compile_prog_array_index in "${compile_prog_array[@]}" - do - echo "Compiling test case $test_case_name.$compile_prog_array_index.${tags_array[$tags_array_index]} Log file = $log_file" - echo "" >> $log_file - rm -fr $build_dir - mkdir -p $build_dir - cd $build_dir + #for compile_prog_array_index in "${compile_prog_array[@]}" + #do + echo "Compiling test case $test_case_name.${tags} Log file = $log_file" + date=`date` + echo ", Date = $date " >> $log_file + #rm -fr $build_dir + #mkdir -p $build_dir + cd $log_dir { - eval $pre_compile_prog_array_index - cmake .. - #rm -fv $exec_file - make -j`nproc` $compile_prog_array_index $compile_args + compile_log_dir=`eval echo \"$OPENAIR_DIR/cmake_targets/log/\"` + echo "Removing compilation log files in $compile_log_dir" + rm -frv $compile_log_dir + echo "Executing $compile_prog $compile_prog_args ...." + eval $compile_prog $compile_prog_args + echo "Copying compilation log files to test case log directory: $log_dir" + cp -fvr $OPENAIR_DIR/cmake_targets/log/ $log_dir/compile_log }>> $log_file 2>&1 echo "" >> $log_file 2>&1 if [ "$class" == "compilation" ]; then - if [ -s "$compile_prog_array_index" ] || [ -s "$compile_prog_out" ] ; then - echo_success "$test_case_name.$compile_prog_array_index.${tags_array[$tags_array_index]} compiled" - xUnit_success "compilation" "$test_case_name.$compile_prog_array_index.${tags_array[$tags_array_index]}" "PASS" "$run_index" - else - echo_error "$test_case_name.$exec_prog.${tags_array[$tags_array_index]} compilation failed" - xUnit_fail "compilation" "$test_case_name.$compile_prog_array_index.${tags_array[$tags_array_index]}" "FAIL" "$run_index" + for compile_prog_out_index in ${compile_prog_out_array[@]} + do + if [ -s "$compile_prog_out_index" ]; then + let "result = result&1" + + echo_success "$test_case_name.${tags} RUN = $run_index $compile_prog_out_index = compiled" + + else + let "result = result&0" + + echo_error "$test_case_name.${tags} RUN = $run_index $compile_prog_out_index failed" + + fi + done #end of for loop compile_prog_out_index + if [ "$result" == "1" ]; then + result_string=$result_string" Run_$run_index = PASS" + else + result_string=$result_string" Run_$run_index = FAIL" fi + fi - let "tags_array_index++" - done # End of for loop compile_prog_array - done # End of for loop (pre_compile_prog_array_index) + #let "tags_array_index++" + #done # End of for loop compile_prog_array + #done # End of for loop (pre_compile_prog_array_index) done #End of for loop (run_index) + + + #If for for some reason upper for loop does not execute, we fail the test case completely + if [ "$result_string" == "" ]; then + result=0 + fi + if [ "$result" == "1" ]; then + echo_success "$test_case_name.${tags} PASSED" + xUnit_success "compilation" "$test_case_name.$tags" "PASS" "$result_string" "$xmlfile_testcase" + else + echo_success "$test_case_name.${tags} FAILED" + xUnit_success "compilation" "$test_case_name.$tags" "FAIL" "$result_string" "$xmlfile_testcase" + fi } @@ -138,8 +178,8 @@ function test_compile() { function test_compile_and_run() { xUnit_start test_case_name=$1 - log_dir=$tdir/log - log_file=$tdir/log/test.$1.txt + log_dir=$tdir/log/$test_case_name + log_file=$log_dir/test.$1.log.txt compile_prog=$2 compile_args=$3 pre_exec_file=$4 @@ -155,11 +195,18 @@ function test_compile_and_run() { tags=${14} mypassword=${15} build_dir=$tdir/$1/build - exec_file=$build_dir/$6 - + #exec_file=$build_dir/$6 + xmlfile_testcase=$log_dir/test.$1.xml #Temporary log file where execution log is stored. temp_exec_log=$log_dir/temp_log.txt + rm -fr $log_dir + mkdir -p $log_dir + + rm -fr $OPENAIR_DIR/cmake_targets/log + + echo "" > $temp_exec_log + echo "" > $log_file #echo "log_dir = $log_dir" #echo "log_file = $log_file" #echo "exec_file = $exec_file" @@ -169,64 +216,67 @@ function test_compile_and_run() { #echo "nruns = $nruns" echo "class = $class" - compile_prog_array=() - read -a compile_prog_array <<<"$compile_prog" + #compile_prog_array=() + #read -a compile_prog_array <<<"$compile_prog" tags_array=() read -a tags_array <<<"$tags" main_exec_args_array=() readarray -t main_exec_args_array <<< "$exec_args" + + + #for search_expr in "${compile_prog_array[@]}" + #do + echo "Compiling test case $test_case_name Log file = $log_file" + echo "" >> $log_file - for search_expr in "${compile_prog_array[@]}" - do - echo "Compiling test case $test_case_name.$search_expr Log file = $log_file" - echo "" >> $log_file + #rm -fr $build_dir + #mkdir -p $build_dir - rm -fr $build_dir - mkdir -p $build_dir - - cd $build_dir + cd $log_dir { - eval $pre_compile_prog - cmake .. + #eval $pre_compile_prog + #cmake .. #rm -fv $exec_file - make -j`nproc` $search_expr $compile_args + echo "Executing $compile_prog $compile_args" >> $log_file + eval "$compile_prog $compile_args" + echo "Copying compilation log files to test case log directory: $log_dir" + cp -fvr $OPENAIR_DIR/cmake_targets/log/ $log_dir/compile_log }>> $log_file 2>&1 echo "" >> $log_file 2>&1 - if [ "$class" == "compilation" ]; then - if [ -s "$search_expr" ] ; then - echo_success "$test_case_name $search_expr compiled" - xUnit_success "compilation" "$test_name.$search_expr" "PASS" 1 - else - echo_error "$test_case_name $exec_prog compilation failed" - xUnit_fail "compilation" "$test_name.$search_expr" "FAIL" 1 - fi - fi - done + #done #process the test case if it is that of execution if [ "$class" == "execution" ]; then tags_array_index=0 for main_exec_args_array_index in "${main_exec_args_array[@]}" do - for (( run_index=1; run_index <= $nruns; run_index++ )) + global_result=1 + result_string="" + + for (( run_index=1; run_index <= $nruns; run_index++ )) do - echo "Executing test case $test_case_name.$main_exec.${tags_array[$tags_array_index]}, Run Index = $run_index, Log file = $log_file" + temp_exec_log=$log_dir/test.$test_case_name.${tags_array[$tags_array_index]}.run_$run_index + echo "" > $temp_exec_log - echo "-----------------------------------------------------------------------------" >> $log_file 2>&1 - echo "" >> $log_file 2>&1 - + echo "Executing test case $test_case_name.${tags_array[$tags_array_index]}, Run Index = $run_index, Execution Log file = $temp_exec_log" + + echo "-----------------------------------------------------------------------------" >> $temp_exec_log 2>&1 + echo "" >> $temp_exec_log 2>&1 + if [ -n "$pre_exec_file" ]; then - { eval " echo '$mypassword' |sudo -S -E $pre_exec_file $pre_exec_args " ; }>> $log_file 2>&1 + { echo " Executing $pre_exec_file $pre_exec_args " + eval " echo '$mypassword' |sudo -S -E $pre_exec_file $pre_exec_args " ; }>> $temp_exec_log 2>&1 fi - echo "Executing $exec_file $main_exec_args_array_index " - echo "Executing $exec_file $main_exec_args_array_index " >> $log_file - { eval "$exec_file $main_exec_args_array_index" ;} > $temp_exec_log 2>&1 + echo "Executing $main_exec $main_exec_args_array_index " + echo "Executing $main_exec $main_exec_args_array_index " >> $temp_exec_log + { eval "$main_exec $main_exec_args_array_index" ;} >> $temp_exec_log 2>&1 + echo "" >> $temp_exec_log 2>&1 cat $temp_exec_log >> $log_file 2>&1 - echo "" >> $log_file 2>&1 + result=1 for search_expr in "${search_expr_array[@]}" @@ -243,39 +293,50 @@ function test_compile_and_run() { let "result = result & 1" fi done + + #If we find a negative search result then there is crash of program and test case is failed even if above condition is true + search_result=`grep -iE "$search_expr_negative" $temp_exec_log` + if [ -n "$search_result" ]; then + result=0 + fi + let "global_result = global_result & result" #echo "result = $result" - - test_case_result="" + + #this is a result of this run + #test_case_result="" if [ "$result" -eq "0" ]; then - test_case_result="FAIL" + result_string=$result_string" Run_$run_index =FAIL" + echo_error "$test_case_name.${tags_array[$tags_array_index]} RUN = $run_index Result = FAIL" fi if [ "$result" -eq "1" ]; then - test_case_result="PASS" + result_string=$result_string" Run_$run_index =PASS" + echo_success "$test_case_name.${tags_array[$tags_array_index]} RUN = $run_index Result = PASS" fi - #If we find a negative search result then there is crash of program and test case is failed even if above condition is true - - search_result=`grep -iE "$search_expr_negative" $temp_exec_log` - if [ -n "$search_result" ]; then - test_case_result="FAIL" - fi - - if [ "$test_case_result" == "FAIL" ]; then - echo_error "execution $test_case_name.$compile_prog.${tags_array[$tags_array_index]} FAIL $run_index" - xUnit_fail "execution" "$test_case_name.$compile_prog.${tags_array[$tags_array_index]}" "FAIL" "$run_index" - fi - - if [ "$test_case_result" == "PASS" ]; then - echo_success "execution $test_case_name.$compile_prog.${tags_array[$tags_array_index]} PASS $run_index" - xUnit_success "execution" "$test_case_name.$compile_prog.${tags_array[$tags_array_index]}" "PASS" "$run_index" - fi - - done + done #End of for loop (nindex) + + echo " Result String = $result_string" + + if [ "$result_string" == "" ]; then + echo_error "execution $test_case_name.$compile_prog.${tags_array[$tags_array_index]} Run_Result = \"$result_string\" Result = FAIL" + xUnit_success "execution" "$test_case_name.${tags_array[$tags_array_index]}" "FAIL" "$result_string" "$xmlfile_testcase" + else + if [ "$global_result" == "0" ]; then + echo_error "execution $test_case_name.${tags_array[$tags_array_index]} Run_Result = \"$result_string\" Result = FAIL" + xUnit_fail "execution" "$test_case_name.${tags_array[$tags_array_index]}" "FAIL" "$result_string" "$xmlfile_testcase" + fi + + if [ "$global_result" == "1" ]; then + echo_success "execution $test_case_name.${tags_array[$tags_array_index]} Run_Result = \"$result_string\" Result = PASS " + xUnit_success "execution" "$test_case_name.${tags_array[$tags_array_index]}" "PASS" "$result_string" "$xmlfile_testcase" + fi + fi + let "tags_array_index++" - done # End of for loop (nindex) + done fi rm -fr $build_dir } @@ -376,6 +437,8 @@ for search_expr in "${test_case_array[@]}" echo "Description = $desc" echo "pre_compile_prog = $pre_compile_prog" echo "compile_prog = $compile_prog" + echo "compile_prog_args = $compile_prog_args" + echo "compile_prog_out = $compile_prog_out" echo "pre_exec = $pre_exec" echo "pre_exec_args = $pre_exec_args" echo "main_exec = $main_exec" @@ -385,6 +448,7 @@ for search_expr in "${test_case_array[@]}" echo "nruns = $nruns" #eval $pre_exec + compile_prog_out=`eval echo \"$compile_prog_out\"` search_array_true=() diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index f402b38f26..650b62ab12 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -13,138 +13,300 @@ compilation Build oaisim.Rel8 - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim -r Rel8 + $OPENAIR_DIR/cmake_targets/oaisim_build_oai/build/oaisim + $OPENAIR_DIR/cmake_targets/at_commands/build/at_nas_ue + $OPENAIR_DIR/cmake_targets/nas_sim_tools/build/usim + $OPENAIR_DIR/cmake_targets/nas_sim_tools/build/nvram - 1 + oaisim.Rel8 + 2 - + compilation - Build oaisim.Rel8 + network device driver(nasmesh_fix) + Build oaisim.Rel10 - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim -r Rel10 + $OPENAIR_DIR/cmake_targets/oaisim_build_oai/build/oaisim + $OPENAIR_DIR/cmake_targets/at_commands/build/at_nas_ue + $OPENAIR_DIR/cmake_targets/nas_sim_tools/build/usim + $OPENAIR_DIR/cmake_targets/nas_sim_tools/build/nvram - + + oaisim.Rel10 1 compilation - Build lte-softmodem EXMIMO.Rel8 + EXMIMO.Rel10 + USRP.Rel10 - cp -vf ../CMakeLists.txt.Rel8 ../CMakeLists.txt - cp -vf ../CMakeLists.txt.Rel10 ../CMakeLists.txt - cp -vf ../CMakeLists.txt.USRP ../CMakeLists.txt - lte-softmodem - + Build oaisim_noS1.Rel10 + + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim -r Rel10 --noS1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/rb_tool + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/oai_nw_drv/oai_nw_drv.ko + oaisim_noS1.Rel10 1 - + - + compilation - Build phy unitary simulators + secuirity unitary tests + Build lte_softmodem_noS1.USRP.Rel10 - dlsim ulsim pucchsim prachsim pdcchsim pbchsim mbmssim test_secu_knas_encrypt_eia1 test_secu_kenb test_aes128_ctr_encrypt test_aes128_ctr_decrypt test_secu_knas_encrypt_eea2 test_secu_knas test_secu_knas_encrypt_eea1 test_kdf test_aes128_cmac_encrypt test_secu_knas_encrypt_eia2 - + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w USRP -r Rel10 --noS1 + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/rb_tool + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko + lte-softmodem_noS1.USRP.Rel10 1 - + - + compilation - Build oaisim.Rel8 + ITTI + Build lte_softmodem_noS1.EXMIMO.Rel10 - oaisim - + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w EXMIMO -r Rel10 --noS1 + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/rb_tool + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/openair_rf/openair_rf.ko + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/updatefw + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/oarf_config_exmimo.oct + lte-softmodem_noS1.EXMIMO.Rel10 1 - + - + compilation - Build oaisim_nos1.Rel10 + Build lte_softmodem_noS1.BLADERF.Rel10 - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w BLADERF -r Rel10 --noS1 + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/rb_tool + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko + lte-softmodem_noS1.EXMIMO.Rel10 1 - - - + + + compilation - Build oaisim.Rel10 + ITTI + Build lte_softmodem_noS1.ETHERNET.Rel10 - oaisim - + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w ETHERNET -r Rel10 --noS1 + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/rb_tool + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko + lte-softmodem_noS1.ETHERNET.Rel10 1 - - + + + + compilation - Build Nasmesh + Build lte_softmodem.USRP.Rel10 - nasmesh - - CMakeFiles/nasmesh/nasmesh.ko + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w USRP -r Rel10 + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + lte-softmodem.USRP.Rel10 1 - + + + compilation + Build lte_softmodem.EXMIMO.Rel10 + + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w EXMIMO -r Rel10 + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/CMakeFiles/openair_rf/openair_rf.ko + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/updatefw + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/oarf_config_exmimo.oct + + + + + + + lte-softmodemEXMIMO.Rel10 + 1 + + + + compilation + Build lte_softmodem.BLADERF.Rel10 + + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w BLADERF -r Rel10 + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + + + + + + + lte-softmodem.EXMIMO.Rel10 + 1 + + + + compilation + Build lte_softmodem.ETHERNET.Rel10 + + $OPENAIR_DIR/cmake_targets/build_oai + --eNB -w ETHERNET -r Rel10 + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem + + + + + + + lte-softmodem.ETHERNET.Rel10 + 1 + compilation - Build RRH Gateway + Build phy unitary simulators + secuirity unitary tests - rrh_gw - + $OPENAIR_DIR/cmake_targets/build_oai + --phy_simulators --core_simulators + $OPENAIR_DIR/cmake_targets/lte-simulators/build/dlsim + $OPENAIR_DIR/cmake_targets/lte-simulators/build/ulsim + $OPENAIR_DIR/cmake_targets/lte-simulators/build/pucchsim + $OPENAIR_DIR/cmake_targets/lte-simulators/build/prachsim + $OPENAIR_DIR/cmake_targets/lte-simulators/build/pdcchsim + $OPENAIR_DIR/cmake_targets/lte-simulators/build/pbchsim + $OPENAIR_DIR/cmake_targets/lte-simulators/build/mbmssim + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_knas_encrypt_eia1 + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_kenb + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_aes128_ctr_encrypt + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_aes128_ctr_decrypt + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_knas_encrypt_eea2 + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_knas + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_knas_encrypt_eea1 + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_kdf + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_aes128_cmac_encrypt + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_knas_encrypt_eia2 + unitary-sim.Rel10 + 1 + + + + + compilation + Build RRH Gateway + + $OPENAIR_DIR/cmake_targets/build_oai + --RRH -w USRP + $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw + + + + + + + RRH.USRP.Rel10 + 1 + + + + compilation + Build RRH Gateway + + $OPENAIR_DIR/cmake_targets/build_oai + --RRH -w EXMIMO + $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw + $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw + $OPENAIR_DIR/cmake_targets/rrh_gw/build/CMakeFiles/openair_rf/openair_rf.ko + $OPENAIR_DIR/cmake_targets/rrh_gw/build/updatefw + $OPENAIR_DIR/cmake_targets/rrh_gw/build/oarf_config_exmimo.oct + + + + + + + RRH.EXMIMO.Rel10 + 1 + + + + compilation + Build RRH Gateway + + $OPENAIR_DIR/cmake_targets/build_oai + --RRH -w BLADERF + $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw + + + + + + + RRH.USRP.Rel10 1 @@ -153,11 +315,11 @@ execution Run OAISIM Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 @@ -170,7 +332,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 6 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 6 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 6 - tdd.5MHz.TM1 tdd.10MHz.TM1 tdd.20MHz.TM1 tdd.5MHz.TM2 tdd.10MHz.TM2 tdd.20MHz.TM2 tdd.5MHz.TM5 tdd.10MHz.TM5 tdd.20MHz.TM5 tdd.5MHz.TM6 tdd.10MHz.TM6 tdd.20MHz.TM6 + oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2 oaisim_noS1.tdd.5MHz.TM5 oaisim_noS1.tdd.10MHz.TM5 oaisim_noS1.tdd.20MHz.TM5 oaisim_noS1.tdd.5MHz.TM6 oaisim_noS1.tdd.10MHz.TM6 oaisim_noS1.tdd.20MHz.TM6 "Received RRCConnectionReconfigurationComplete from UE 0" segmentation fault|assertion|exiting|fatal 3 @@ -180,11 +342,11 @@ execution Run OAISIM Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors, segmentation fault or exit - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -a @@ -197,7 +359,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 6 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 6 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 6 -a - tdd.5MHz.TM1 tdd.10MHz.TM1 tdd.20MHz.TM1 tdd.5MHz.TM2 tdd.10MHz.TM2 tdd.20MHz.TM2 tdd.5MHz.TM5 tdd.10MHz.TM5 tdd.20MHz.TM5 tdd.5MHz.TM6 tdd.10MHz.TM6 tdd.20MHz.TM6 + oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2 oaisim_noS1.tdd.5MHz.TM5 oaisim_noS1.tdd.10MHz.TM5 oaisim_noS1.tdd.20MHz.TM5 oaisim_noS1.tdd.5MHz.TM6 oaisim_noS1.tdd.10MHz.TM6 oaisim_noS1.tdd.20MHz.TM6 "Received RRCConnectionReconfigurationComplete from UE 0" segmentation fault|assertion|exiting|fatal 3 @@ -207,11 +369,11 @@ execution Run OAISIM Rel10 TDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 @@ -224,7 +386,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 6 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 6 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 6 - tdd.5MHz.TM1 tdd.10MHz.TM1 tdd.20MHz.TM1 tdd.5MHz.TM2 tdd.10MHz.TM2 tdd.20MHz.TM2 tdd.5MHz.TM5 tdd.10MHz.TM5 tdd.20MHz.TM5 tdd.5MHz.TM6 tdd.10MHz.TM6 tdd.20MHz.TM6 + oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2 oaisim_noS1.tdd.5MHz.TM5 oaisim_noS1.tdd.10MHz.TM5 oaisim_noS1.tdd.20MHz.TM5 oaisim_noS1.tdd.5MHz.TM6 oaisim_noS1.tdd.10MHz.TM6 oaisim_noS1.tdd.20MHz.TM6 "Received RRCConnectionReconfigurationComplete from UE 0" "Received RRCConnectionReconfigurationComplete from UE 1" "Received RRCConnectionReconfigurationComplete from UE 2" segmentation fault|assertion|exiting|fatal 3 @@ -234,11 +396,11 @@ execution Run OAISIM Rel10 TDD, 1 eNB + 3 UEs (5 MHz) in PHY_ABSTRACTION mode and search for errors, segmentation fault or exit - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -a @@ -251,7 +413,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 6 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 6 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 6 -a - tdd.5MHz.TM1 tdd.10MHz.TM1 tdd.20MHz.TM1 tdd.5MHz.TM2 tdd.10MHz.TM2 tdd.20MHz.TM2 tdd.5MHz.TM5 tdd.10MHz.TM5 tdd.20MHz.TM5 tdd.5MHz.TM6 tdd.10MHz.TM6 tdd.20MHz.TM6 + oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 tdd.20MHz.TM2 oaisim_noS1.tdd.5MHz.TM5 oaisim_noS1.tdd.10MHz.TM5 oaisim_noS1.tdd.20MHz.TM5 oaisim_noS1.tdd.5MHz.TM6 oaisim_noS1.tdd.10MHz.TM6 oaisim_noS1.tdd.20MHz.TM6 "Received RRCConnectionReconfigurationComplete from UE 0" "Received RRCConnectionReconfigurationComplete from UE 1" "Received RRCConnectionReconfigurationComplete from UE 2" segmentation fault|assertion|exiting|fatal 3 @@ -261,11 +423,11 @@ execution Run OAI Rel10 TDD, 1 eNB + 1 UE (5 MHz) without abstraction mode, send ping from from eNB to UE, and check that there is no packet losses - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -c26 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -c26 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -c26 @@ -278,7 +440,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 6 -c26 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 6 -c26 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 6 -c26 - tdd.5MHz.TM1 tdd.10MHz.TM1 tdd.20MHz.TM1 tdd.5MHz.TM2 tdd.10MHz.TM2 tdd.20MHz.TM2 tdd.5MHz.TM5 tdd.10MHz.TM5 tdd.20MHz.TM5 tdd.5MHz.TM6 tdd.10MHz.TM6 tdd.20MHz.TM6 + oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2 oaisim_noS1.tdd.5MHz.TM5 oaisim_noS1.tdd.10MHz.TM5 oaisim_noS1.tdd.20MHz.TM5 oaisim_noS1.tdd.5MHz.TM6 oaisim_noS1.tdd.10MHz.TM6 oaisim_noS1.tdd.20MHz.TM6 "DL and UL loss rate below 10" segmentation fault|assertion|exiting|fatal 3 @@ -288,11 +450,11 @@ execution Run OAI Rel10 TDD, 1 eNB + 1 UE (5 MHz) in PHY_ABSTRACTION mode, send ping from from eNB to UE, and check that there is no packet losses - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -c26 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -c26 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -c26 -a @@ -305,7 +467,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 6 -c26 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 6 -c26 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 6 -c26 -a - tdd.5MHz.TM1 tdd.10MHz.TM1 tdd.20MHz.TM1 tdd.5MHz.TM2 tdd.10MHz.TM2 tdd.20MHz.TM2 tdd.5MHz.TM5 tdd.10MHz.TM5 tdd.20MHz.TM5 tdd.5MHz.TM6 tdd.10MHz.TM6 tdd.20MHz.TM6 + oaisim_noS1.tdd.5MHz.TM1 oaisim_noS1.tdd.10MHz.TM1 oaisim_noS1.tdd.20MHz.TM1 oaisim_noS1.tdd.5MHz.TM2 oaisim_noS1.tdd.10MHz.TM2 oaisim_noS1.tdd.20MHz.TM2 oaisim_noS1.tdd.5MHz.TM5 oaisim_noS1.tdd.10MHz.TM5 tdd.20MHz.TM5 oaisim_noS1.tdd.5MHz.TM6 oaisim_noS1.tdd.10MHz.TM6 oaisim_noS1.tdd.20MHz.TM6 "DL and UL loss rate below 10" segmentation fault|assertion|exiting|fatal 3 @@ -315,11 +477,11 @@ execution Run OAISIM Rel10 FDD, 1 eNB + 1 UE 1 eNB (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -F -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -F -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -F @@ -332,7 +494,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 6 -F -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 6 -F -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 6 -F - FDD.5MHz.TM1 FDD.10MHz.TM1 FDD.20MHz.TM1 FDD.5MHz.TM2 FDD.10MHz.TM2 FDD.20MHz.TM2 FDD.5MHz.TM5 FDD.10MHz.TM5 FDD.20MHz.TM5 FDD.5MHz.TM6 FDD.10MHz.TM6 FDD.20MHz.TM6 + oaisim_noS1.FDD.5MHz.TM1 oaisim_noS1.FDD.10MHz.TM1 oaisim_noS1.FDD.20MHz.TM1 oaisim_noS1.FDD.5MHz.TM2 oaisim_noS1.FDD.10MHz.TM2 oaisim_noS1.FDD.20MHz.TM2 oaisim_noS1.FDD.5MHz.TM5 oaisim_noS1.FDD.10MHz.TM5 oaisim_noS1.FDD.20MHz.TM5 oaisim_noS1.FDD.5MHz.TM6 oaisim_noS1.FDD.10MHz.TM6 oaisim_noS1.FDD.20MHz.TM6 "Received RRCConnectionReconfigurationComplete from UE 0" segmentation fault|assertion|exiting|fatal 3 @@ -342,11 +504,11 @@ execution Run OAISIM Rel10 FDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -F -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -F -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -F -a @@ -359,7 +521,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 6 -F -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 6 -F -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 6 -F -a - FDD.5MHz.TM1 FDD.10MHz.TM1 FDD.20MHz.TM1 FDD.5MHz.TM2 FDD.10MHz.TM2 FDD.20MHz.TM2 FDD.5MHz.TM5 FDD.10MHz.TM5 FDD.20MHz.TM5 FDD.5MHz.TM6 FDD.10MHz.TM6 FDD.20MHz.TM6 + oaisim_noS1.FDD.5MHz.TM1 oaisim_noS1.FDD.10MHz.TM1 oaisim_noS1.FDD.20MHz.TM1 oaisim_noS1.FDD.5MHz.TM2 oaisim_noS1.FDD.10MHz.TM2 oaisim_noS1.FDD.20MHz.TM2 oaisim_noS1.FDD.5MHz.TM5 oaisim_noS1.FDD.10MHz.TM5 oaisim_noS1.FDD.20MHz.TM5 oaisim_noS1.FDD.5MHz.TM6 oaisim_noS1.FDD.10MHz.TM6 oaisim_noS1.FDD.20MHz.TM6 "Received RRCConnectionReconfigurationComplete from UE 0" segmentation fault|assertion|exiting|fatal 3 @@ -369,11 +531,11 @@ execution Run OAISIM Rel10 FDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) and search for errors, segmentation fault or exit - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -F -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -F -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -F @@ -386,7 +548,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 6 -F -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 6 -F -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 6 -F - FDD.5MHz.TM1 FDD.10MHz.TM1 FDD.20MHz.TM1 FDD.5MHz.TM2 FDD.10MHz.TM2 FDD.20MHz.TM2 FDD.5MHz.TM5 FDD.10MHz.TM5 FDD.20MHz.TM5 FDD.5MHz.TM6 FDD.10MHz.TM6 FDD.20MHz.TM6 + oaisim_noS1.FDD.5MHz.TM1 oaisim_noS1.FDD.10MHz.TM1 oaisim_noS1.FDD.20MHz.TM1 oaisim_noS1.FDD.5MHz.TM2 oaisim_noS1.FDD.10MHz.TM2 oaisim_noS1.FDD.20MHz.TM2 oaisim_noS1.FDD.5MHz.TM5 oaisim_noS1.FDD.10MHz.TM5 oaisim_noS1.FDD.20MHz.TM5 oaisim_noS1.FDD.5MHz.TM6 oaisim_noS1.FDD.10MHz.TM6 oaisim_noS1.FDD.20MHz.TM6 "Received RRCConnectionReconfigurationComplete from UE 0" "Received RRCConnectionReconfigurationComplete from UE 1" "Received RRCConnectionReconfigurationComplete from UE 2" segmentation fault|assertion|exiting|fatal 3 @@ -396,11 +558,11 @@ execution Run OAISIM Rel10 FDD, 1 eNB + 3 UEs (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode and search for errors - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 1 -F -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 1 -F -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 1 -F -a @@ -413,7 +575,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 25 -x 6 -F -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 50 -x 6 -F -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u3 -n100 -R 100 -x 6 -F -a - FDD.5MHz.TM1 FDD.10MHz.TM1 FDD.20MHz.TM1 FDD.5MHz.TM2 FDD.10MHz.TM2 FDD.20MHz.TM2 FDD.5MHz.TM5 FDD.10MHz.TM5 FDD.20MHz.TM5 FDD.5MHz.TM6 FDD.10MHz.TM6 FDD.20MHz.TM6 + oaisim_noS1.FDD.5MHz.TM1 oaisim_noS1.FDD.10MHz.TM1 oaisim_noS1.FDD.20MHz.TM1 oaisim_noS1.FDD.5MHz.TM2 oaisim_noS1.FDD.10MHz.TM2 oaisim_noS1.FDD.20MHz.TM2 oaisim_noS1.FDD.5MHz.TM5 oaisim_noS1.FDD.10MHz.TM5 oaisim_noS1.FDD.20MHz.TM5 oaisim_noS1.FDD.5MHz.TM6 oaisim_noS1.FDD.10MHz.TM6 oaisim_noS1.FDD.20MHz.TM6 "Received RRCConnectionReconfigurationComplete from UE 0" "Received RRCConnectionReconfigurationComplete from UE 1" "Received RRCConnectionReconfigurationComplete from UE 2" segmentation fault|assertion|exiting|fatal 3 @@ -423,11 +585,11 @@ execution Run OAI Rel10 FDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) without PHY_ABSTRACTION mode, ping from from eNB to UE, and for check for no packet losses - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -F -c26 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -F -c26 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -F -c26 @@ -440,7 +602,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 6 -F -c26 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 6 -F -c26 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 6 -F -c26 - FDD.5MHz.TM1 FDD.10MHz.TM1 FDD.20MHz.TM1 FDD.5MHz.TM2 FDD.10MHz.TM2 FDD.20MHz.TM2 FDD.5MHz.TM5 FDD.10MHz.TM5 FDD.20MHz.TM5 FDD.5MHz.TM6 FDD.10MHz.TM6 FDD.20MHz.TM6 + oaisim_noS1.FDD.5MHz.TM1 oaisim_noS1.FDD.10MHz.TM1 oaisim_noS1.FDD.20MHz.TM1 oaisim_noS1.FDD.5MHz.TM2 oaisim_noS1.FDD.10MHz.TM2 oaisim_noS1.FDD.20MHz.TM2 oaisim_noS1.FDD.5MHz.TM5 oaisim_noS1.FDD.10MHz.TM5 oaisim_noS1.FDD.20MHz.TM5 oaisim_noS1.FDD.5MHz.TM6 oaisim_noS1.FDD.10MHz.TM6 oaisim_noS1.FDD.20MHz.TM6 "DL and UL loss rate below 10" segmentation fault|assertion|exiting|fatal 3 @@ -450,11 +612,11 @@ execution Run OAI Rel10 FDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2,5,6) in PHY_ABSTRACTION mode, send ping from from eNB to UE, and check for no packet losses - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 1 -F -c26 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 1 -F -c26 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 1 -F -c26 -a @@ -467,7 +629,7 @@ -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 25 -x 6 -F -c26 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 50 -x 6 -F -c26 -a -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -b1 -u1 -n100 -R 100 -x 6 -F -c26 -a - FDD.5MHz.TM1 FDD.10MHz.TM1 FDD.20MHz.TM1 FDD.5MHz.TM2 FDD.10MHz.TM2 FDD.20MHz.TM2 FDD.5MHz.TM5 FDD.10MHz.TM5 FDD.20MHz.TM5 FDD.5MHz.TM6 FDD.10MHz.TM6 FDD.20MHz.TM6 + oaisim_noS1.FDD.5MHz.TM1 oaisim_noS1.FDD.10MHz.TM1 oaisim_noS1.FDD.20MHz.TM1 oaisim_noS1.FDD.5MHz.TM2 oaisim_noS1.FDD.10MHz.TM2 oaisim_noS1.FDD.20MHz.TM2 oaisim_noS1.FDD.5MHz.TM5 oaisim_noS1.FDD.10MHz.TM5 oaisim_noS1.FDD.20MHz.TM5 oaisim_noS1.FDD.5MHz.TM6 oaisim_noS1.FDD.10MHz.TM6 oaisim_noS1.FDD.20MHz.TM6 "DL and UL loss rate below 10" segmentation fault|assertion|exiting|fatal 3 @@ -477,14 +639,15 @@ execution Check if eMBMS procedure is not finished completely, make sure that the SIB13/MCCH have been correclty received by UEs - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -l7 -x 1 -Q3 -n 100 -b1 -u1 "Found MBSFNAreaConfiguration from eNB 0" segmentation fault|assertion|exiting|fatal + oaisim_noS1.eMBMS 3 @@ -492,14 +655,15 @@ execution Check if eMBMS multicast/broadcast data is received, make sure that the SIB13/MCCH/MTCH have been correclty received by UEs - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -l7 -x 1 -T mscbr -Q3 -n 100 -b1 -u1 "Received a multicast packet" segmentation fault|assertion|exiting|fatal + oaisim_noS1.eMBMS 3 @@ -507,14 +671,15 @@ execution Check for eMBMS multicast/broadcast data received in fdd mode, make sure that the SIB13/MCCH/MTCH have been correclty received by UEs - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -l7 -F -T mscbr -x 1 -Q3 -n 100 -b1 -u1 "Received a multicast packet" segmentation fault|assertion|exiting|fatal + oaisim_noS1.eMBMS 3 @@ -522,14 +687,15 @@ execution Check for eMBMS multicast/broadcast DF relaying working properly in fdd mode, make sure that the SIB13/MCCH/MTCH have been correclty received by UEs - oaisim_nos1 - + $OPENAIR_DIR/cmake_targets/build_oai + --oaisim --noS1 $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 - oaisim_nos1 + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 -O $OPENAIR_TARGETS/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.generic.oaisim.local_no_mme.conf -A AWGN -l7 -c43 -F -T mbvbr -Q4 -j1 -n120 "MTCH for sync area 1" segmentation fault|assertion|exiting|fatal + oaisim_noS1.eMBMS 3 @@ -537,14 +703,15 @@ execution test_aes128_cmac_encrypt - test_aes128_cmac_encrypt - + $OPENAIR_DIR/cmake_targets/build_oai + --core_simulators - test_aes128_cmac_encrypt + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_aes128_cmac_encrypt --verbose "finished with 0 errors" segmentation fault|assertion|exiting|fatal + test_aes128_cmac_encrypt 3 @@ -552,14 +719,15 @@ execution test_aes128_ctr_decrypt - test_aes128_ctr_decrypt - + $OPENAIR_DIR/cmake_targets/build_oai + --core_simulators - test_aes128_ctr_decrypt + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_aes128_ctr_decrypt --verbose "finished with 0 errors" segmentation fault|assertion|exiting|fatal + test_aes128_ctr_decrypt 3 @@ -567,14 +735,15 @@ execution test_aes128_ctr_encrypt - test_aes128_ctr_encrypt - + $OPENAIR_DIR/cmake_targets/build_oai + --core_simulators - test_aes128_ctr_encrypt + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_aes128_ctr_encrypt --verbose "finished with 0 errors" segmentation fault|assertion|exiting|fatal + test_aes128_ctr_encrypt 3 @@ -582,14 +751,15 @@ execution test_secu_kenb - test_secu_kenb - + $OPENAIR_DIR/cmake_targets/build_oai + --core_simulators - test_secu_kenb + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_kenb --verbose "finished with 0 errors" segmentation fault|assertion|exiting|fatal + test_secu_kenb 3 @@ -597,14 +767,15 @@ execution test_secu_knas - test_secu_knas - + $OPENAIR_DIR/cmake_targets/build_oai + --core_simulators - test_secu_knas + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_knas --verbose "finished with 0 errors" segmentation fault|assertion|exiting|fatal + test_secu_knas 3 @@ -612,14 +783,15 @@ execution test_secu_knas_encrypt_eea1 - test_secu_knas_encrypt_eea1 - + $OPENAIR_DIR/cmake_targets/build_oai + --core_simulators - test_secu_knas_encrypt_eea1 + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_knas_encrypt_eea1 --verbose "finished with 0 errors" segmentation fault|assertion|exiting|fatal + test_secu_knas_encrypt_eea1 3 @@ -627,14 +799,15 @@ execution test_secu_knas_encrypt_eea2 - test_secu_knas_encrypt_eea2 - + $OPENAIR_DIR/cmake_targets/build_oai + --core_simulators - test_secu_knas_encrypt_eea2 + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_knas_encrypt_eea2 --verbose "finished with 0 errors" segmentation fault|assertion|exiting|fatal + test_secu_knas_encrypt_eea2 3 @@ -642,14 +815,15 @@ execution test_secu_knas_encrypt_eia1 - test_secu_knas_encrypt_eia1 - + $OPENAIR_DIR/cmake_targets/build_oai + --core_simulators - test_secu_knas_encrypt_eia1 + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_knas_encrypt_eia1 --verbose "finished with 0 errors" segmentation fault|assertion|exiting|fatal + test_secu_knas_encrypt_eia1 3 @@ -657,14 +831,15 @@ execution test_secu_knas_encrypt_eia2 - test_secu_knas_encrypt_eia2 - + $OPENAIR_DIR/cmake_targets/build_oai + --core_simulators - test_secu_knas_encrypt_eia2 + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_secu_knas_encrypt_eia1 --verbose "finished with 0 errors" segmentation fault|assertion|exiting|fatal + test_secu_knas_encrypt_eia2 3 @@ -672,14 +847,15 @@ execution test_kdf - test_kdf - + $OPENAIR_DIR/cmake_targets/build_oai + --core_simulators - test_kdf + $OPENAIR_DIR/cmake_targets/lte-simulators/build/test_kdf --verbose "finished with 0 errors" segmentation fault|assertion|exiting|fatal + test_kdf 3 @@ -698,11 +874,11 @@ (TM2 Test 1b 20 MHz, R.11-2 FDD (MCS 13), EVA5, 5.9 dB (70%)), - dlsim - + $OPENAIR_DIR/cmake_targets/build_oai + --phy_simulators - dlsim + $OPENAIR_DIR/cmake_targets/lte-simulators/build/dlsim -m5 -gF -s-1 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O70 -L -m4 -gF -s0 -w1.0 -f.2 -n500 -B6 -c4 -z2 -O70 -m15 -gF -s6.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O70 -L @@ -714,7 +890,7 @@ -m26 -gF -s17.7 -w1.0 -f.2 -n500 -B50 -c2 -z2 -O70 -L -m14 -gF -s6.8 -w1.0 -f.2 -n500 -B50 -c2 -x2 -y2 -z2 -O70 -L -m13 -gF -s5.9 -w1.0 -f.2 -n500 -B25 -c3 -x2 -y2 -z2 -O70 -L - test1 test5 test6 test6b test7 test7b test10 test10b test11 TM2_test1 TM2_test1b + dlsim.test1 dlsim.test5 dlsim.test6 dlsim.test6b dlsim.test7 dlsim.test7b dlsim.test10 dlsim.test10b dlsim.test11 dlsim.TM2_test1 dlsim.TM2_test1b "passed" segmentation fault|assertion|exiting|fatal 1 @@ -729,18 +905,18 @@ (Test 5, 20 MHz, FDD (MCS 5), AWGN, 6dB (70%)), (Test 6, 20 MHz, FDD (MCS 16), AWGN, 12 dB (70%)) - ulsim - + $OPENAIR_DIR/cmake_targets/build_oai + --phy_simulators - ulsim + $OPENAIR_DIR/cmake_targets/lte-simulators/build/ulsim -B25 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 -L -B25 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 -L -B50 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 -L -B50 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 -L -B100 -m5 -y1 -gN -x1 -s6 -w1.0 -e.1 -P -n500 -O70 -L -B100 -m16 -y1 -gN -x1 -s12 -w1.0 -e.1 -P -n500 -O70 -L - test1 test2 test3 test4 test5 test6 + ulsim.test1 ulsim.test2 ulsim.test3 ulsim.test4 ulsim.test5 ulsim.test6 "passed" segmentation fault|assertion|exiting|fatal 1 diff --git a/cmake_targets/tools/test_helper b/cmake_targets/tools/test_helper index 35752e9d20..e60fb8c720 100644 --- a/cmake_targets/tools/test_helper +++ b/cmake_targets/tools/test_helper @@ -24,15 +24,18 @@ xUnit_start() { # \param $1 classname # \param $2 testcase name # \param $3 testcase result -# \param $4 run index +# \param $4 run result +# \param $5 XML file local to test case for storing its own results xUnit_fail() { class=$1 test_case=$2 result=$3 - run_index=$4 + run_result=$4 + xmlfile_testcase=$5 currtime=$(date +%s.%N) time=$(echo "$currtime - $XUNIT_START" | bc -l) - xml="" + xml="" + echo -e $xml > $xmlfile_testcase XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml" XUNIT_FAILED=$((XUNIT_FAILED+1)) } @@ -43,15 +46,18 @@ xUnit_fail() { # \param $1 classname # \param $2 testcase name # \param $3 testcase result -# \param $4 run index +# \param $4 run result +# \param $5 XML file local to test case for storing its own results xUnit_success() { class=$1 test_case=$2 result=$3 - run_index=$4 + run_result=$4 + xmlfile_testcase=$5 currtime=$(date +%s.%N) time=$(echo "$currtime - $XUNIT_START" | bc -l) - xml="" + xml="" + echo -e $xml > $xmlfile_testcase XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml" XUNIT_SUCCESS=$((XUNIT_SUCCESS+1)) } From 2a9a915961488bbcf5ede0daa879b2e96d7bd076 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Mon, 30 Nov 2015 18:55:16 +0100 Subject: [PATCH 31/49] updates for parallel execution to test case framework --- cmake_targets/autotests/openair.py | 8 +- .../autotests/run_exec_lte-softmodem_tests.py | 106 +++++++++++++----- cmake_targets/autotests/test_case_list.xml | 7 +- 3 files changed, 85 insertions(+), 36 deletions(-) diff --git a/cmake_targets/autotests/openair.py b/cmake_targets/autotests/openair.py index 1606bcaf6a..598edaf169 100644 --- a/cmake_targets/autotests/openair.py +++ b/cmake_targets/autotests/openair.py @@ -164,15 +164,15 @@ class openair(core): def kill(self, user, pw): try: if user == 'root' : - os.system('pkill oaisim') + os.system('pkill oaisim oaisim_nos1') os.system('pkill cc1') time.sleep(1) - os.system('pkill oaisim') + os.system('pkill oaisim oaisim_nos1') else : - os.system('echo '+pw+' | sudo -S pkill oaisim') + os.system('echo '+pw+' | sudo -S pkill oaisim oaisim_nos1') os.system('echo '+pw+' | sudo -S pkill cc1') time.sleep(1) - os.system('echo '+pw+' | sudo -S pkill oaisim') + os.system('echo '+pw+' | sudo -S pkill oaisim oaisim_nos1') except Error, val: print "Error:", val diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py index f66f8206c0..a81fb49d03 100644 --- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -211,47 +211,98 @@ class oaiThread (threading.Thread): print "result = " + result print "Exiting " + self.name -#This class runs test cases with class oaisim_noS1, compilatation -class testCaseThread_generic(threading.thread): - def __init__(self, threadID, name, oai, machine, logdirOAI5GRepo, oai5GRepoDirRemote, testcasename,oldprogramList, CleanupAluLteBox, username, password, timeout): +#This class runs test cases with class execution, compilatation +class testCaseThread_generic (threading.Thread): + def __init__(self, threadID, name, machine, logdirOAI5GRepo, testcasename,oldprogramList, CleanupAluLteBox, password, timeout): threading.Thread.__init__(self) self.threaID = threadID self.name = name - self.oai = oai self.testcasename = testcasename self.timeout = timeout self.machine = machine - self.oai5GRepoDirRemote = oai5GRepoDirRemote self.logdirOAI5GRepo = logdirOAI5GRepo - self.username = username - self.password = password + self.oldprogramList = oldprogramList + self.CleanupAluLteBox = CleanupAluLteBox + self.password=password def run(self): try: mypassword='' #addsudo = 'echo \'' + mypassword + '\' | sudo -S -E ' addpass = 'echo \'' + mypassword + '\' | ' user = getpass.getuser() - print "Starting test case : " + self.testcasename + " On machine " + machineName + print "Starting test case : " + self.testcasename + " On machine " + self.machine + oai = openair('localdomain',machine) + oai.connect(user, self.password) cleanOldPrograms(oai, oldprogramList, CleanUpAluLteBox) - logdir_local_testcase = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename - logdir_local_base = logdirOAI5GRepo+'/cmake_targets/autotests/log/' - logdir_remote_testcase = oai5GRepoDirRemote + '/cmake_targets/autotests/log' + self.testcasename + logdir_local = os.environ.get('OPENAIR_DIR') + logdir_local_testcase = logdir_local +'/cmake_targets/autotests/log/'+ self.testcasename + logdir_local_base = logdir_local +'/cmake_targets/autotests/log/' + logdir_remote_testcase = self.logdirOAI5GRepo + '/cmake_targets/autotests/log' + self.testcasename + logdir_remote = self.logdirOAI5GRepo + '/cmake_targets/autotests/log' + logfile_task_testcasename = logdir_local_testcase + '/test_task' + '_' + testcasename + '_.log' + logfile_task_testcasename_out = logdir_remote + '/test_task_out' + '_' + str(run) + '_.log' os.removedirs(logdir_testcase) os.mkdir (logdir_testcase) - cmd = "( cd " + self.oai5GRepoDirRemote + " \n " + cmd = "( cd " + self.logdirOAI5GRepo + " \n " cmd = cmd + "source oaienv \n" - cmd = cmd + "python run_test_case_generic -d " + self.oai5GRepoDirRemote + " -g " + "\"" + self.testcasename + "\"" - cmd = cmd + " ) " - - #Now we copy all the remote - ssh = SSHSession(self.machine , username=username, key_file=None, passsword=password) + cmd = cmd + "$OPENAIR_DIR/cmake_targets/autotests/run_exec_autotets.bash --run-group \"" + "self.testcasename +\" " + cmd = cmd + " ) >& " + logfile_task_testcasename_out + " ; " + " mv " + logfile_task_testcasename_out + logdir_remote_testcase + + write_file(logfile_task_testcasename, cmd, mode="w") + #Now we copy all the remote files + ssh = SSHSession(self.machine , username=user, key_file=None, password=password) ssh.get_all(logdir_remote_testcase , logdir_local_base) - print "Finishing test case : " + self.testcasename + " On machine " + machineName + print "Finishing test case : " + self.testcasename + " On machine " + machineName + cleanOldPrograms(oai, oldprogramList, CleanUpAluLteBox) + oai.kill() + oai.disconnect() + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n threadID = ' + self.threaID + '\n testcasename = ' + self.testcasename + '\n timeout = ' + self.timeout + '\n machine = ' + self.machine + '\n logdirOAI5GRepo = ' + self.logdirOAI5GRepo + '\n' + error = error + traceback.format_exc() def addsudo (cmd, password=""): cmd = 'echo \'' + password + '\' | sudo -S -E bash -c \' ' + cmd + '\' ' return cmd + +def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramList, logdirOAI5GRepo, MachineList, password, CleanupAluLteBox,timeout): + try: + mypassword=password + MachineListFree=[] + while MachineListFree.__len__() == 0 : + MachineListBusy=[] + #first we need to find the list of free machines that we could run our test case + if threadListGeneric.__len__() ==0 : + #This means no thread is started yet + MachineListFree = MachineList + else : + for param in threadListGeneric : + thread_id = param["thread_id"] + machine = param["Machine"] + testcasename = param["testcasename"] + thread_id.join(1) + if thread_id.isAlive == True: + MachineListBusy.append(machine) + else : + threadListGeneric.remove(param) + #Now we check if there is at least one free machine + MachineListFree = MachineList + for machine in MachineListBusy: + MachineListFree.remove(machine) + machine = MachineListFree[0] + thread = testCaseThread_generic(1,"Generic Thread", machine, logdirOAI5GRepo, testcasename, oldprogramList, CleanupAluLteBox, password, timeout) + param={"thread_id":thread, "Machine":machine, "testcasename":testcasename} + thread.start() + threadListGeneric.append(param) + return threadListGeneric + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n testcasename = ' + testcasename + '\n logdirOAI5GRepo = ' + logdirOAI5GRepo + '\n MachineList = ' + MachineList + '\n timeout = ' + timeout + '\n' + error = error + traceback.format_exc() + #Function to handle test case class : lte-softmodem def handle_testcaseclass_softmodem (testcase, oldprogramList, oai_list, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, password, CleanUpAluLteBox): @@ -603,6 +654,7 @@ def search_test_case_group(testcasename, testcasegroup): #thread1 = myThread(1, "Thread-1", 1) +threadListGeneric=[] debug = 0 pw ='' i = 0 @@ -714,6 +766,7 @@ GitOAI5GRepoBranch = xmlRoot.findtext('GitOAI5GRepoBranch',default='') GitOpenaircnRepoBranch = xmlRoot.findtext('GitOpenair-cnRepoBranch',default='') CleanUpOldProgs = xmlRoot.findtext('CleanUpOldProgs',default='') CleanUpAluLteBox = xmlRoot.findtext('CleanUpAluLteBox',default='') +Timeout_execution = int (xmlRoot.findtext('Timeout_execution')) print "MachineList = " + MachineList print "GitOpenair-cnRepo = " + GitOpenaircnRepo @@ -725,7 +778,7 @@ cmd = "git show-ref --heads -s "+ GitOAI5GRepoBranch GitOAI5GHeadVersion = subprocess.check_output ([cmd], shell=True) print "GitOAI5GHeadVersion = " + GitOAI5GHeadVersion print "CleanUpOldProgs = " + CleanUpOldProgs - +print "Timeout_execution = " + str(Timeout_execution) MachineList = MachineList.split() @@ -897,6 +950,7 @@ for index in oai_list: sys.exit(1) + #Now we wait for all the threads to complete index = 0 for t in threads_init_setup: @@ -922,7 +976,7 @@ for t in threads_init_setup: #Now we process all the test cases - +threadListGeneric=[] testcaseList=xmlRoot.findall('testCase') #print testcaseList for testcase in testcaseList: @@ -939,19 +993,17 @@ for testcase in testcaseList: index_EPCMachine = MachineList.index(EPCMachine) print "testcasename = " + testcasename + " class = " + testcaseclass handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, oai_list, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, pw, CleanUpAluLteBox ) - - elif testcaseclass == 'compilation' : - continue - handle_testcaseclass_compilation (testcase) - elif testcaseclass == 'execution' : - continue - handle_testcaseclass_oaisim (testcase) + elif (testcaseclass == 'compilation'): + handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramList, logdirOAI5GRepo, MachineList, pw, CleanupAluLteBox,Timeout_execution) + elif (testcaseclass == 'execution'): + handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramList, logdirOAI5GRepo, MachineList, pw, CleanupAluLteBox,Timeout_execution) else : print "Unknown test case class: " + testcaseclass sys.exit() print "Exiting the test cases execution now..." + sys.exit() diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 650b62ab12..2cd1438a8a 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -8,7 +8,7 @@ feature-17-test_framework oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* hss hss_sim configure_cots_bandrich_ue* wvdial* /opt/ltebox/tools/stop_ltebox - + 1800 compilation Build oaisim.Rel8 @@ -26,7 +26,7 @@ oaisim.Rel8 - 2 + 1 @@ -928,7 +928,6 @@ calisson stevens amerique - oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* ltebox* 60 /tmp targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\" @@ -1000,7 +999,6 @@ calisson stevens nano - oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* ltebox* 60 /tmp targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\" @@ -1079,7 +1077,6 @@ calisson stevens calisson - oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* ltebox* 60 /tmp targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\" From 25b3eeb440dbbc14e88e656434acfce324b8e473 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 1 Dec 2015 19:09:37 +0100 Subject: [PATCH 32/49] updated sudo detection --- .../autotests/run_exec_autotests.bash | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash index 84d1801adf..7955defa63 100755 --- a/cmake_targets/autotests/run_exec_autotests.bash +++ b/cmake_targets/autotests/run_exec_autotests.bash @@ -354,16 +354,20 @@ Options This help -g | --run-group Run test cases in a group. For example, ./run_exec_autotests "0101* 010102" +-p + Use password for logging ' } function main () { RUN_GROUP=0 +SET_PASSWORD=0 +passwd="" test_case_group="" test_case_group_array=() test_case_array=() echo_info "Note that the user should be sudoer for executing certain commands, for example loading kernel modules" -read -s -p "Enter Password: " mypassword + until [ -z "$1" ] do @@ -373,6 +377,10 @@ until [ -z "$1" ] test_case_group=$2 echo_info "Will execute test cases only in group $test_case_group" shift 2;; + -p) + SET_PASSWORD=1 + passwd=$2 + shift 2;; -h | --help) print_help exit 1;; @@ -383,6 +391,20 @@ until [ -z "$1" ] esac done +if [ "$SET_PASSWORD" == "1" ]; then + mypassword=$passwd +else + read -s -p "Enter Password: " mypassword +fi + +tmpfile=`mktemp` +echo \'$passwd\' | sudo -S -v >& $tmpfile +tstsudo=`cat $tmpfile` +if [ "$tstsudo" != "" ]; then + echo "User might not have sudo privileges. Exiting" +fi +echo "tstsudo = $tstsudo" +rm -fr $tmpfile xml_conf="$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml" From 1396d22d42fc81054982058f7df5659b5ffe40eb Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Tue, 1 Dec 2015 10:44:52 -0800 Subject: [PATCH 33/49] minor changes in openair_device structure (naming of fields), calibration information for X310 timing, some initializations from lte-softmodem.c for USRP moved to usrp_lib.cpp --- targets/ARCH/COMMON/common_lib.h | 6 +- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 61 +++++++++++++++++- targets/RT/USER/lte-softmodem.c | 66 ++++---------------- 3 files changed, 76 insertions(+), 57 deletions(-) diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index 4f7e801448..c36995683d 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -84,8 +84,10 @@ typedef struct { double sample_rate; //! number of samples per RX/TX packet (USRP + Ethernet) int samples_per_packet; - // delay in sending samples (write) due to hardware access, softmodem processing and fronthaul delay if exist - int tx_delay; + //! delay in sending samples (write) due to hardware access, softmodem processing and fronthaul delay if exist + int tx_scheduling_advance; + //! offset in samples between TX and RX paths + int tx_sample_advance; //! adjust the position of the samples after delay when sending unsigned int tx_forward_nsamps; //! number of RX channels (=RX antennas) diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 2371b04770..d6b588aad1 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -404,6 +404,35 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_ //s->usrp->set_master_clock_rate(usrp_master_clock); openair0_cfg[0].rx_gain_calib_table = calib_table_x310; + + switch (openair0_cfg[0].sample_rate) { + case 30.72e6: + // from usrp_time_offset + openair0_cfg[0].samples_per_packet = 2048; + openair0_cfg[0].tx_sample_advance = 15; + openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[card].samples_per_packet; + break; + case 15.36e6: + openair0_cfg[0].samples_per_packet = 2048; + openair0_cfg[0].tx_sample_advance = 45; + openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[card].samples_per_packet; + break; + case 7.6e6: + openair0_cfg[0].samples_per_packet = 1024; + openair0_cfg[0].tx_sample_advance = 50; + openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[card].samples_per_packet; + break; + case 1.92e6: + openair0_cfg[0].samples_per_packet = 256; + openair0_cfg[0].tx_sample_advance = 50; + openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[card].samples_per_packet; + break; + default: + printf("Error: unknown sampling rate %f\n",openair0_cfg[0].sample_rate); + exit(-1); + break; + } + } else { printf("Found USRP B200"); s->usrp = uhd::usrp::multi_usrp::make(args); @@ -415,12 +444,42 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_ // // lock mboard clocks // s->usrp->set_clock_source("internal"); // set master clock rate and sample rate for tx & rx for streaming + + device->type = USRP_B200_IF s->usrp->set_master_clock_rate(30.72e6); openair0_cfg[0].rx_gain_calib_table = calib_table_b210; + + switch (openair0_cfg[0].sample_rate) { + case 30.72e6: + // from usrp_time_offset + openair0_cfg[0].samples_per_packet = 2048; + openair0_cfg[0].tx_sample_advance = 175; + openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[card].samples_per_packet; + break; + case 15.36e6: + openair0_cfg[0].samples_per_packet = 2048; + openair0_cfg[0].tx_sample_advance = 95; + openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[card].samples_per_packet; + break; + case 7.6e6: + openair0_cfg[0].samples_per_packet = 1024; + openair0_cfg[0].tx_sample_advance = 70; + openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[card].samples_per_packet; + break; + case 1.92e6: + openair0_cfg[0].samples_per_packet = 256; + openair0_cfg[0].tx_sample_advance = 40; + openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[card].samples_per_packet; + break; + default: + printf("Error: unknown sampling rate %f\n",openair0_cfg[0].sample_rate); + exit(-1); + break; + } } - + for(i=0;iusrp->get_rx_num_channels();i++) { if (i 0..9 unsigned int rx_pos = 0; - unsigned int tx_pos = 0; //spp*tx_delay; + unsigned int tx_pos = 0; #endif int CC_id=0; struct timespec trx_time0, trx_time1, trx_time2; @@ -1634,8 +1630,9 @@ static void* eNB_thread( void* arg ) int frame = 0; #ifndef EXMIMO - spp = openair0_cfg[0].samples_per_packet; - tx_pos=spp*openair0_cfg[0].tx_delay; + spp = openair0_cfg[0].samples_per_packet; + tx_pos = openair0_cfg[0].tx_scheduling_advance; + tx_advance = openair0_cfg[0].tx_sample_advance; #endif while (!oai_exit) { @@ -1796,11 +1793,10 @@ static void* eNB_thread( void* arg ) // prepare tx buffer pointers for (i=0; ilte_frame_parms.nb_antennas_tx; i++) txp[i] = (void*)&txdata[i][tx_pos]; - //printf("tx_pos %d ts %d, ts_offset %d txp[i] %p, ap %d\n", tx_pos, timestamp, (timestamp+(tx_delay*spp)-tx_forward_nsamps),txp[i], i); // if symb_written < spp ==> error if (frame > 50) { openair0.trx_write_func(&openair0, - (timestamp+(openair0_cfg[card].tx_delay*spp)-openair0_cfg[card].tx_forward_nsamps), + (timestamp+(openair0_cfg[card].tx_scheduling_advance)-openair0_cfg[card].tx_sample_advance), txp, spp, PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx, @@ -1808,7 +1804,7 @@ static void* eNB_thread( void* arg ) } VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, timestamp&0xffffffff ); - VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (timestamp+(openair0_cfg[card].tx_delay*spp)-openair0_cfg[card].tx_forward_nsamps)&0xffffffff ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (timestamp+(openair0_cfg[card].tx_scheduling_advance)-openair0_cfg[card].tx_sample_advance)&0xffffffff ); stop_meas( &softmodem_stats_mt ); clock_gettime( CLOCK_MONOTONIC, &trx_time2 ); @@ -2847,66 +2843,33 @@ int main( int argc, char **argv ) for (card=0; cardN_RB_DL == 100) { - sample_rate = 30.72e6; - bw = 10.0e6; -#ifndef EXMIMO openair0_cfg[card].sample_rate=30.72e6; - openair0_cfg[card].samples_per_packet = 2048; openair0_cfg[card].samples_per_frame = 307200; openair0_cfg[card].tx_bw = 10e6; openair0_cfg[card].rx_bw = 10e6; - // from usrp_time_offset - openair0_cfg[card].tx_forward_nsamps = 175; - openair0_cfg[card].tx_delay = 8; -#endif } else if(frame_parms[0]->N_RB_DL == 50) { - sample_rate = 15.36e6; - bw = 5.0e6; -#ifndef EXMIMO openair0_cfg[card].sample_rate=15.36e6; - openair0_cfg[card].samples_per_packet = 2048; openair0_cfg[card].samples_per_frame = 153600; openair0_cfg[card].tx_bw = 5e6; openair0_cfg[card].rx_bw = 5e6; - openair0_cfg[card].tx_forward_nsamps = 95; - openair0_cfg[card].tx_delay = 5; -#endif } else if (frame_parms[0]->N_RB_DL == 25) { - sample_rate = 7.68e6; - bw = 2.5e6; -#ifndef EXMIMO openair0_cfg[card].sample_rate=7.68e6; openair0_cfg[card].samples_per_frame = 76800; openair0_cfg[card].tx_bw = 2.5e6; openair0_cfg[card].rx_bw = 2.5e6; - openair0_cfg[card].samples_per_packet = 1024; -#ifdef OAI_USRP - openair0_cfg[card].tx_forward_nsamps = 70; - openair0_cfg[card].tx_delay = 5; -#elif OAI_BLADERF - openair0_cfg[card].tx_forward_nsamps = 0; - openair0_cfg[card].tx_delay = 8; -#endif -#endif + } else if (frame_parms[0]->N_RB_DL == 6) { - sample_rate = 1.92e6; - bw = 0.96e6; -#ifndef EXMIMO openair0_cfg[card].sample_rate=1.92e6; - openair0_cfg[card].samples_per_packet = 256; openair0_cfg[card].samples_per_frame = 19200; openair0_cfg[card].tx_bw = 1.5e6; openair0_cfg[card].rx_bw = 1.5e6; - openair0_cfg[card].tx_forward_nsamps = 40; - openair0_cfg[card].tx_delay = 8; -#endif } #ifdef ETHERNET //calib needed - openair0_cfg[card].tx_delay = 0; - openair0_cfg[card].tx_forward_nsamps = 0; + openair0_cfg[card].tx_scheduling_advance = 0; + openair0_cfg[card].tx_sample_advance = 0; if (frame_parms[0]->N_RB_DL == 6) openair0_cfg[card].samples_per_packet = 256; @@ -2917,9 +2880,6 @@ int main( int argc, char **argv ) #endif -#ifndef EXMIMO - openair0_cfg[card].samples_per_packet = openair0_cfg[0].samples_per_packet; -#endif printf("HW: Configuring card %d, nb_antennas_tx/rx %d/%d\n",card, ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_tx : PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_tx), ((UE_flag==0) ? PHY_vars_eNB_g[0][0]->lte_frame_parms.nb_antennas_rx : PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_rx)); @@ -2935,11 +2895,9 @@ int main( int argc, char **argv ) openair0_cfg[card].remote_ip = &rrh_eNB_ip[0]; openair0_cfg[card].remote_port = rrh_eNB_port; } -openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; + openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; #endif - openair0_cfg[card].sample_rate = sample_rate; - openair0_cfg[card].tx_bw = bw; - openair0_cfg[card].rx_bw = bw; + // in the case of the USRP, the following variables need to be initialized before the init // since the USRP only supports one CC (for the moment), we initialize all the cards with first CC. // in the case of EXMIMO2, these values are overwirtten in the function setup_eNB/UE_buffer @@ -3074,7 +3032,7 @@ openair0_cfg[card].num_rb_dl=frame_parms[0]->N_RB_DL; // connect the TX/RX buffers if (UE_flag==1) { #ifdef OAI_USRP - openair_daq_vars.timing_advance = 160; + openair_daq_vars.timing_advance = 0; #else openair_daq_vars.timing_advance = 160; #endif From 4d000a6e8e79cd28a29b2abafe74f12830027193 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Tue, 1 Dec 2015 19:53:15 +0100 Subject: [PATCH 34/49] update for sudo check --- cmake_targets/autotests/run_exec_autotests.bash | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash index 7955defa63..40160d73ac 100755 --- a/cmake_targets/autotests/run_exec_autotests.bash +++ b/cmake_targets/autotests/run_exec_autotests.bash @@ -398,10 +398,12 @@ else fi tmpfile=`mktemp` -echo \'$passwd\' | sudo -S -v >& $tmpfile +echo \'$passwd\' | sudo echo $HOME >& $tmpfile tstsudo=`cat $tmpfile` -if [ "$tstsudo" != "" ]; then +if [ "$tstsudo" != "$HOME" ]; then echo "User might not have sudo privileges. Exiting" + echo "tstsudo = $tstsudo" + exit fi echo "tstsudo = $tstsudo" rm -fr $tmpfile From 1328aca790efcdf99777f62c5383db8b12225902 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Tue, 1 Dec 2015 20:36:58 +0100 Subject: [PATCH 35/49] fixed compilation issues with UHD --- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 38 ++++++++++---------- targets/RT/USER/lte-softmodem.c | 1 - targets/RT/USER/lte-ue.c | 4 +-- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index d6b588aad1..e4480600fe 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -405,27 +405,27 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_ openair0_cfg[0].rx_gain_calib_table = calib_table_x310; - switch (openair0_cfg[0].sample_rate) { - case 30.72e6: + switch ((int)openair0_cfg[0].sample_rate) { + case 30720000: // from usrp_time_offset openair0_cfg[0].samples_per_packet = 2048; openair0_cfg[0].tx_sample_advance = 15; - openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[card].samples_per_packet; + openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[0].samples_per_packet; break; - case 15.36e6: + case 15360000: openair0_cfg[0].samples_per_packet = 2048; openair0_cfg[0].tx_sample_advance = 45; - openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[card].samples_per_packet; + openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[0].samples_per_packet; break; - case 7.6e6: + case 7680000: openair0_cfg[0].samples_per_packet = 1024; openair0_cfg[0].tx_sample_advance = 50; - openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[card].samples_per_packet; + openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[0].samples_per_packet; break; - case 1.92e6: + case 1920000: openair0_cfg[0].samples_per_packet = 256; openair0_cfg[0].tx_sample_advance = 50; - openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[card].samples_per_packet; + openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[0].samples_per_packet; break; default: printf("Error: unknown sampling rate %f\n",openair0_cfg[0].sample_rate); @@ -445,32 +445,32 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_ // s->usrp->set_clock_source("internal"); // set master clock rate and sample rate for tx & rx for streaming - device->type = USRP_B200_IF + device->type = USRP_B200_IF; s->usrp->set_master_clock_rate(30.72e6); openair0_cfg[0].rx_gain_calib_table = calib_table_b210; - switch (openair0_cfg[0].sample_rate) { - case 30.72e6: + switch ((int)openair0_cfg[0].sample_rate) { + case 30720000: // from usrp_time_offset openair0_cfg[0].samples_per_packet = 2048; openair0_cfg[0].tx_sample_advance = 175; - openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[card].samples_per_packet; + openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[0].samples_per_packet; break; - case 15.36e6: + case 15360000: openair0_cfg[0].samples_per_packet = 2048; openair0_cfg[0].tx_sample_advance = 95; - openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[card].samples_per_packet; + openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[0].samples_per_packet; break; - case 7.6e6: + case 7680000: openair0_cfg[0].samples_per_packet = 1024; openair0_cfg[0].tx_sample_advance = 70; - openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[card].samples_per_packet; + openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[0].samples_per_packet; break; - case 1.92e6: + case 1920000: openair0_cfg[0].samples_per_packet = 256; openair0_cfg[0].tx_sample_advance = 40; - openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[card].samples_per_packet; + openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[0].samples_per_packet; break; default: printf("Error: unknown sampling rate %f\n",openair0_cfg[0].sample_rate); diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 786cd97a59..45625e7e73 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -1632,7 +1632,6 @@ static void* eNB_thread( void* arg ) #ifndef EXMIMO spp = openair0_cfg[0].samples_per_packet; tx_pos = openair0_cfg[0].tx_scheduling_advance; - tx_advance = openair0_cfg[0].tx_sample_advance; #endif while (!oai_exit) { diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index ec245360d7..aa22488687 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -1003,7 +1003,7 @@ void *UE_thread(void *arg) static int UE_thread_retval; PHY_VARS_UE *UE = PHY_vars_UE_g[0][0]; int spp = openair0_cfg[0].samples_per_packet; - int slot=1, frame=0, hw_subframe=0, rxpos=0, txpos=spp*openair0_cfg[0].tx_delay; + int slot=1, frame=0, hw_subframe=0, rxpos=0, txpos=spp*openair0_cfg[0].tx_scheduling_advance; #ifdef __AVX2__ int dummy[2][spp] __attribute__((aligned(32))); #else @@ -1128,7 +1128,7 @@ void *UE_thread(void *arg) txp[i] = (void*)&txdata[i][txpos]; openair0.trx_write_func(&openair0, - (timestamp+spp*openair0_cfg[0].tx_delay-openair0_cfg[0].tx_forward_nsamps), + (timestamp+spp*openair0_cfg[0].tx_scheduling_advance-openair0_cfg[0].tx_sample_advance), txp, spp - ((first_rx==1) ? rx_off_diff : 0), UE->lte_frame_parms.nb_antennas_tx, From 6e1e41db8a60025acde12dca21fbbe8dca249f18 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 2 Dec 2015 13:40:39 +0100 Subject: [PATCH 36/49] updated to remove SSE4.2 flags as they are not used --- cmake_targets/CMakeLists.txt | 7 ++----- cmake_targets/tools/build_helper | 3 ++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 8ba602c25d..d7a656e61c 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -133,9 +133,6 @@ else (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") if (CPUINFO MATCHES "avx2") set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mavx2") endif() - if (CPUINFO MATCHES "sse4_2") - set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -msse4.2") - endif() if (CPUINFO MATCHES "sse4_1") set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -msse4.1") endif() @@ -149,8 +146,8 @@ set(C_FLAGS_PROCESSOR " ${C_FLAGS_PROCESSOR} ${CFLAGS_PROCESSOR_USER}") Message("C_FLAGS_PROCESSOR is ${C_FLAGS_PROCESSOR}") if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86") - if ( (NOT( C_FLAGS_PROCESSOR MATCHES "ssse3")) OR (NOT( C_FLAGS_PROCESSOR MATCHES "msse4.1")) OR (NOT( C_FLAGS_PROCESSOR MATCHES "msse4.2")) ) - Message(FATAL_ERROR "For x86 Architecture, you must have following flags: -mssse3 -msse4.1 -msse4.2. The current detected flags are: ${C_FLAGS_PROCESSOR}. You can pass the flags manually in build script, for example: ./build_oai --cflags_processor \"-mssse3 -msse4.1 -msse4.2\" ") + if ( (NOT( C_FLAGS_PROCESSOR MATCHES "ssse3")) OR (NOT( C_FLAGS_PROCESSOR MATCHES "msse4.1")) ) + Message(FATAL_ERROR "For x86 Architecture, you must have following flags: -mssse3 -msse4.1. The current detected flags are: ${C_FLAGS_PROCESSOR}. You can pass the flags manually in build script, for example: ./build_oai --cflags_processor \"-mssse3 -msse4.1\" ") endif() endif() diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 004c83f0b8..c82b79499c 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -210,7 +210,8 @@ check_install_additional_tools (){ unzip \ valgrind \ vlan \ - ctags + ctags \ + ntpdate ) >& $log_file } From b9ac3a9b44c9b7d45309295ec4c66fa18d31174a Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Wed, 2 Dec 2015 17:55:04 +0100 Subject: [PATCH 37/49] updated eNodeB calibration for B210 target --- targets/ARCH/COMMON/common_lib.h | 2 -- targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 8 ++++---- .../CONF/enb.band7.tm1.usrpb210.epc.remote.conf | 16 +++++++--------- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index c36995683d..227a100692 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -88,8 +88,6 @@ typedef struct { int tx_scheduling_advance; //! offset in samples between TX and RX paths int tx_sample_advance; - //! adjust the position of the samples after delay when sending - unsigned int tx_forward_nsamps; //! number of RX channels (=RX antennas) int rx_num_channels; //! number of TX channels (=TX antennas) diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index e4480600fe..0885ef6dd1 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -454,17 +454,17 @@ int openair0_dev_init_usrp(openair0_device* device, openair0_config_t *openair0_ case 30720000: // from usrp_time_offset openair0_cfg[0].samples_per_packet = 2048; - openair0_cfg[0].tx_sample_advance = 175; - openair0_cfg[0].tx_scheduling_advance = 8*openair0_cfg[0].samples_per_packet; + openair0_cfg[0].tx_sample_advance = 115; + openair0_cfg[0].tx_scheduling_advance = 11*openair0_cfg[0].samples_per_packet; break; case 15360000: openair0_cfg[0].samples_per_packet = 2048; - openair0_cfg[0].tx_sample_advance = 95; + openair0_cfg[0].tx_sample_advance = 113; openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[0].samples_per_packet; break; case 7680000: openair0_cfg[0].samples_per_packet = 1024; - openair0_cfg[0].tx_sample_advance = 70; + openair0_cfg[0].tx_sample_advance = 103; openair0_cfg[0].tx_scheduling_advance = 5*openair0_cfg[0].samples_per_packet; break; case 1920000: diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf index 21303ebc71..8248f20927 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf @@ -16,7 +16,7 @@ eNBs = tracking_area_code = "1"; mobile_country_code = "208"; - mobile_network_code = "95"; + mobile_network_code = "92"; ////////// Physical parameters: @@ -30,12 +30,12 @@ eNBs = downlink_frequency = 2660000000L; uplink_frequency_offset = -120000000; Nid_cell = 0; - N_RB_DL = 25; + N_RB_DL = 100; Nid_cell_mbsfn = 0; nb_antennas_tx = 1; nb_antennas_rx = 1; tx_gain = 90; - rx_gain = 120; + rx_gain = 119; prach_root = 0; prach_config_index = 0; prach_high_speed = "DISABLE"; @@ -130,12 +130,10 @@ eNBs = }; ////////// MME parameters: - mme_ip_address = ( { ipv4 = "192.168.12.62"; - ipv6 = "192:168:30::17"; - active = "yes"; - preference = "ipv4"; - } - ); + mme_ip_address = ( {ipv4 = "192.168.12.26"; + ipv6="192:168:30::17"; + active="yes"; + preference="ipv4";}); NETWORK_INTERFACES : { From d5d597746a917d3807efa6f1bef2646f0a0b78f1 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Wed, 2 Dec 2015 18:26:11 +0100 Subject: [PATCH 38/49] bugfix for UE TX on USRP --- targets/RT/USER/lte-ue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index aa22488687..7aa2213d94 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -1128,7 +1128,7 @@ void *UE_thread(void *arg) txp[i] = (void*)&txdata[i][txpos]; openair0.trx_write_func(&openair0, - (timestamp+spp*openair0_cfg[0].tx_scheduling_advance-openair0_cfg[0].tx_sample_advance), + (timestamp+openair0_cfg[0].tx_scheduling_advance-openair0_cfg[0].tx_sample_advance), txp, spp - ((first_rx==1) ? rx_off_diff : 0), UE->lte_frame_parms.nb_antennas_tx, From 0aeb77ce9861a909aea2a46f719b060ad5eab1cf Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Thu, 3 Dec 2015 20:54:47 +0100 Subject: [PATCH 39/49] updates to test framework + bugfixes --- cmake_targets/autotests/openair.py | 60 ++-- .../autotests/run_exec_autotests.bash | 6 +- .../autotests/run_exec_lte-softmodem_tests.py | 270 ++++++++++++------ cmake_targets/autotests/test_case_list.xml | 5 +- 4 files changed, 230 insertions(+), 111 deletions(-) diff --git a/cmake_targets/autotests/openair.py b/cmake_targets/autotests/openair.py index 598edaf169..e0acf31cb8 100644 --- a/cmake_targets/autotests/openair.py +++ b/cmake_targets/autotests/openair.py @@ -41,6 +41,8 @@ import os import array import shutil import subprocess +import sys +import traceback # import call from core import * @@ -102,8 +104,12 @@ class openair(core): self.oai.prompt() print self.oai.before - except Error, val : - print "Error: can't connect to"+username+"@"+self.address + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + sys.exit(1) def connect2(self, username, password, prompt='$'): self.prompt1 = prompt @@ -133,9 +139,12 @@ class openair(core): sys.exit(1) return 'Ok' - except Exception, val: - time.sleep(5) - print "Error:", val + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + sys.exit(1) def connect_localshell(self, prompt='$'): self.prompt1 = prompt @@ -152,9 +161,12 @@ class openair(core): else : sys.exit(1) - except Exception, val: - time.sleep(5) - print "Error:", val + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + sys.exit(1) def disconnect(self): print 'disconnecting the ssh connection to ' + self.address + '\n' @@ -173,8 +185,12 @@ class openair(core): os.system('echo '+pw+' | sudo -S pkill cc1') time.sleep(1) os.system('echo '+pw+' | sudo -S pkill oaisim oaisim_nos1') - except Error, val: - print "Error:", val + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + sys.exit(1) def rm_driver(self,oai,user, pw): try: @@ -184,8 +200,12 @@ class openair(core): else : oai.send_nowait('echo '+pw+ ' | sudo -S rmmod nasmesh;') #os.system('echo '+pw+ ' | sudo -S rmmod nasmesh;') - except Error, val: - print "Error removing oai network driver module:", val + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + sys.exit(1) def driver(self,oai,user,pw): #pwd = oai.send_recv('pwd') @@ -197,8 +217,12 @@ class openair(core): else : oai.send('echo '+pw+ ' | sudo -S insmod ./nasmesh.ko;') - except Error, val: - print "Error inserting oai network driver module:", val + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + sys.exit(1) def cleandir (self, logdir,debug) : @@ -209,8 +233,12 @@ class openair(core): print 'filepath is ' + filepath try: shutil.rmtree(filepath) - except OSError: - os.remove(filepath) + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + sys.exit(1) #print 'Could not remove the filepath'+ filepath + ' with error ' + OSError def create_dir(self,dirname,debug) : diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash index 40160d73ac..2eea43082d 100755 --- a/cmake_targets/autotests/run_exec_autotests.bash +++ b/cmake_targets/autotests/run_exec_autotests.bash @@ -107,6 +107,7 @@ function test_compile() { #mkdir -p $build_dir cd $log_dir { + uname -a compile_log_dir=`eval echo \"$OPENAIR_DIR/cmake_targets/log/\"` echo "Removing compilation log files in $compile_log_dir" rm -frv $compile_log_dir @@ -236,6 +237,7 @@ function test_compile_and_run() { cd $log_dir { + uname -a #eval $pre_compile_prog #cmake .. #rm -fv $exec_file @@ -272,7 +274,7 @@ function test_compile_and_run() { fi echo "Executing $main_exec $main_exec_args_array_index " echo "Executing $main_exec $main_exec_args_array_index " >> $temp_exec_log - { eval "$main_exec $main_exec_args_array_index" ;} >> $temp_exec_log 2>&1 + { uname -a ; eval "$main_exec $main_exec_args_array_index" ;} >> $temp_exec_log 2>&1 echo "" >> $temp_exec_log 2>&1 cat $temp_exec_log >> $log_file 2>&1 @@ -504,6 +506,8 @@ for search_expr in "${test_case_array[@]}" } +uname -a + main "$@" xUnit_write "$results_file" diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py index a81fb49d03..3ae3758402 100644 --- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -61,7 +61,8 @@ from openair import * import paramiko import ssh from ssh import SSHSession - +import subprocess +import commands def write_file(filename, string, mode="w"): text_file = open(filename, mode) @@ -107,6 +108,7 @@ def sftp_module (username, password, hostname, ports, paramList,logfile): error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) error = error + '\n username = ' + username + '\n hostname = ' + hostname + '\n localfile = ' + localD + '\n remotefile = ' + remoteD + '\n operation = ' + operation + '\nlogfile = ' + logfile + '\n ports = ' + str(ports) + '\n' error = error + traceback.format_exc() + print error sftp.close() transport.close() @@ -195,27 +197,38 @@ class myThread (threading.Thread): class oaiThread (threading.Thread): - def __init__(self, threadID, name, oai, cmd, sudo, timeout): + def __init__(self, threadID, threadname, machine, username, password, cmd, sudo, timeout): threading.Thread.__init__(self) self.threadID = threadID - self.name = name - #self.counter = counter - self.oai = oai + self.threadname = threadname + self.machine = machine + self.username = username + self.password = password self.cmd = cmd self.sudo = sudo self.timeout = timeout - self.machineName = machineName def run(self): - print "Starting " + self.name - result = self.oai.send_recv(self.cmd, self.sudo, self.timeout) - print "result = " + result - print "Exiting " + self.name + try: + oai = openair('localdomain',self.machine) + oai.connect(user, self.password) + print "Starting " + self.threadname + "on machine " + self.machine + result = oai.send_recv(self.cmd, self.sudo, self.timeout) + print "result = " + result + print "Exiting " + self.threadname + oai.disconnect() + except Exception, e: + error='' + error = error + ' In class oaiThread, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n threadID = ' + str(self.threadID) + '\n threadname = ' + self.threadname + '\n timeout = ' + self.timeout + '\n machine = ' + self.machine + '\n cmd = ' + self.cmd + '\n timeout = ' + str(self.timeout) + '\n' + error = error + traceback.format_exc() + print error + #This class runs test cases with class execution, compilatation class testCaseThread_generic (threading.Thread): def __init__(self, threadID, name, machine, logdirOAI5GRepo, testcasename,oldprogramList, CleanupAluLteBox, password, timeout): threading.Thread.__init__(self) - self.threaID = threadID + self.threadID = threadID self.name = name self.testcasename = testcasename self.timeout = timeout @@ -231,36 +244,51 @@ class testCaseThread_generic (threading.Thread): addpass = 'echo \'' + mypassword + '\' | ' user = getpass.getuser() print "Starting test case : " + self.testcasename + " On machine " + self.machine - oai = openair('localdomain',machine) + oai = openair('localdomain',self.machine) oai.connect(user, self.password) - cleanOldPrograms(oai, oldprogramList, CleanUpAluLteBox) + cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox) logdir_local = os.environ.get('OPENAIR_DIR') logdir_local_testcase = logdir_local +'/cmake_targets/autotests/log/'+ self.testcasename logdir_local_base = logdir_local +'/cmake_targets/autotests/log/' - logdir_remote_testcase = self.logdirOAI5GRepo + '/cmake_targets/autotests/log' + self.testcasename - logdir_remote = self.logdirOAI5GRepo + '/cmake_targets/autotests/log' - logfile_task_testcasename = logdir_local_testcase + '/test_task' + '_' + testcasename + '_.log' - logfile_task_testcasename_out = logdir_remote + '/test_task_out' + '_' + str(run) + '_.log' - os.removedirs(logdir_testcase) - os.mkdir (logdir_testcase) - cmd = "( cd " + self.logdirOAI5GRepo + " \n " + logdir_remote_testcase = self.logdirOAI5GRepo + '/cmake_targets/autotests/log/' + self.testcasename + logdir_remote = self.logdirOAI5GRepo + '/cmake_targets/autotests/log/' + logfile_task_testcasename = logdir_local_testcase + '/test_task' + '_' + self.testcasename + '_.log' + logfile_task_testcasename_out = logdir_remote + '/test_task_out' + '_' + self.testcasename + '_.log' + #print "logdir_local_testcase = " + logdir_local_testcase + #print "logdir_remote_testcase = " + logdir_remote_testcase + #if os.path.exists(logdir_local_testcase) == True : + # os.removedirs(logdir_local_testcase) + #os.mkdir(logdir_local_testcase) + os.system("rm -fr " + logdir_local_testcase ) + os.system("mkdir -p " + logdir_local_testcase) + cmd = "mkdir -p " + logdir_remote_testcase + res = oai.send_recv(cmd, False, self.timeout) + print "res = " + res + + cmd = "( cd " + self.logdirOAI5GRepo + " \n " cmd = cmd + "source oaienv \n" - cmd = cmd + "$OPENAIR_DIR/cmake_targets/autotests/run_exec_autotets.bash --run-group \"" + "self.testcasename +\" " - cmd = cmd + " ) >& " + logfile_task_testcasename_out + " ; " + " mv " + logfile_task_testcasename_out + logdir_remote_testcase - + cmd = cmd + "$OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash --run-group \"" + self.testcasename + "\" -p \'\'" + cmd = cmd + " ) >& " + logfile_task_testcasename_out + " ; " + "mkdir -p " + logdir_remote_testcase + "; mv " + logfile_task_testcasename_out + " " +logdir_remote_testcase + + #print "cmd = " + cmd + res = oai.send_recv(cmd, False, self.timeout) + #print "res = " + res + print "ThreadID = " + str(self.threadID) + "ThreadName: " + self.name + " testcasename: " + self.testcasename + "Execution Result = " + res write_file(logfile_task_testcasename, cmd, mode="w") #Now we copy all the remote files - ssh = SSHSession(self.machine , username=user, key_file=None, password=password) + ssh = SSHSession(self.machine , username=user, key_file=None, password=self.password) ssh.get_all(logdir_remote_testcase , logdir_local_base) - print "Finishing test case : " + self.testcasename + " On machine " + machineName - cleanOldPrograms(oai, oldprogramList, CleanUpAluLteBox) - oai.kill() + print "Finishing test case : " + self.testcasename + " On machine " + self.machine + cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox) + #oai.kill(user,mypassword) oai.disconnect() except Exception, e: error='' - error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n threadID = ' + self.threaID + '\n testcasename = ' + self.testcasename + '\n timeout = ' + self.timeout + '\n machine = ' + self.machine + '\n logdirOAI5GRepo = ' + self.logdirOAI5GRepo + '\n' + error = error + ' In Class = testCaseThread_generic, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n threadID = ' + str(self.threadID) + '\n threadName = ' + self.name + '\n testcasename = ' + self.testcasename + '\n machine = ' + self.machine + '\n logdirOAI5GRepo = ' + self.logdirOAI5GRepo + '\n' + '\n timeout = ' + str(timeout) error = error + traceback.format_exc() + print error + sys.exit() def addsudo (cmd, password=""): @@ -276,36 +304,59 @@ def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramLis #first we need to find the list of free machines that we could run our test case if threadListGeneric.__len__() ==0 : #This means no thread is started yet - MachineListFree = MachineList + MachineListFree = MachineList[:] else : for param in threadListGeneric : thread_id = param["thread_id"] machine = param["Machine"] - testcasename = param["testcasename"] + testcasenameold = param["testcasename"] thread_id.join(1) - if thread_id.isAlive == True: - MachineListBusy.append(machine) + if thread_id.isAlive() == True: + print "thread_id is alive: testcasename: " + testcasenameold + if machine not in MachineListBusy: + MachineListBusy.append(machine) else : threadListGeneric.remove(param) - #Now we check if there is at least one free machine - MachineListFree = MachineList - for machine in MachineListBusy: - MachineListFree.remove(machine) + #Now we check if there is at least one free machine + MachineListFree = MachineList[:] + for machine in MachineListBusy: + if machine in MachineListFree: + MachineListFree.remove(machine) + #print "MachineListFree = " + ','.join(MachineListFree) + #print "MachineListBusy = " + ','.join(MachineListBusy) + #print "MachineList = " + ','.join(MachineList) machine = MachineListFree[0] - thread = testCaseThread_generic(1,"Generic Thread", machine, logdirOAI5GRepo, testcasename, oldprogramList, CleanupAluLteBox, password, timeout) + thread = testCaseThread_generic(1,"Generic Thread_"+testcasename+"_"+machine+_, machine, logdirOAI5GRepo, testcasename, oldprogramList, CleanupAluLteBox, password, timeout) param={"thread_id":thread, "Machine":machine, "testcasename":testcasename} thread.start() threadListGeneric.append(param) return threadListGeneric except Exception, e: - error='' - error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n testcasename = ' + testcasename + '\n logdirOAI5GRepo = ' + logdirOAI5GRepo + '\n MachineList = ' + MachineList + '\n timeout = ' + timeout + '\n' - error = error + traceback.format_exc() + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n testcasename = ' + testcasename + '\n logdirOAI5GRepo = ' + logdirOAI5GRepo + '\n MachineList = ' + ','.join(MachineList) + '\n timeout = ' + str(timeout) + '\n' + error = error + traceback.format_exc() + print error + sys.exit(1) + +#Blocking wait for all threads related to generic testcase execution, class (compilation and execution) +def wait_testcaseclass_generic_threads(threadListGeneric, timeout = 1): + for param in threadListGeneric: + thread_id = param["thread_id"] + machine = param["Machine"] + testcasenameold = param["testcasename"] + thread_id.join(timeout) + if thread_id.isAlive() == True: + print "thread_id on machine: " + machine + " is still alive: testcasename: " + testcasenameold + print " Exiting now..." + sys.exit(1) + else: + print "thread_id on machine: " + machine + " is stopped: testcasename: " + testcasenameold + threadListGeneric.remove(param) + return threadListGeneric - #Function to handle test case class : lte-softmodem -def handle_testcaseclass_softmodem (testcase, oldprogramList, oai_list, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, password, CleanUpAluLteBox): +def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, password, CleanUpAluLteBox): #We ignore the password sent to this function for secuirity reasons for password present in log files #It is recommended to add a line in /etc/sudoers that looks something like below. The line below will run sudo without password prompt # your_user_name ALL=(ALL:ALL) NOPASSWD: ALL @@ -365,15 +416,13 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, oai_list, logdirOA index_eNBMachine = MachineList.index(eNBMachine) index_UEMachine = MachineList.index(UEMachine) index_EPCMachine = MachineList.index(EPCMachine) - oai_eNB = oai_list[index_eNBMachine] - oai_UE = oai_list[index_UEMachine] - - #We need to create two ssh sessions to avoid race conditions - if index_eNBMachine == index_EPCMachine: - oai_EPC = openair('localdomain', EPCMachine) - oai_EPC.connect(user,password) - else: - oai_EPC = oai_list[index_EPCMachine] + oai_eNB = openair('localdomain', eNBMachine) + oai_eNB.connect(user, password) + oai_UE = openair('localdomain', UEMachine) + oai_UE.connect(user, password) + oai_EPC = openair('localdomain', EPCMachine) + oai_EPC.connect(user, password) + cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox) cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox) cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox) @@ -515,9 +564,9 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, oai_list, logdirOA task_EPC = task_EPC + ' ) > ' + logfile_task_EPC_out + ' 2>&1 ' write_file(logfile_task_EPC, task_EPC, mode="w") - thread_EPC = oaiThread(1, "EPC_thread", oai_EPC , task_EPC, False, timeout_thread) - thread_eNB = oaiThread(2, "eNB_thread", oai_eNB , task_eNB, False, timeout_thread) - thread_UE = oaiThread(3, "UE_thread", oai_UE , task_UE, False, timeout_thread) + thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC, False, timeout_thread) + thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB, False, timeout_thread) + thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE, False, timeout_thread) threads=[] threads.append(thread_eNB) @@ -631,9 +680,12 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, oai_list, logdirOA remotefile = logdir_EPC + '/EPC_task_out' + '_' + str(run) + '_.log' paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) sftp_module (user, password, EPCMachine, ports, paramList, sftp_log) + oai_eNB.disconnect() + oai_UE.disconnect() + oai_EPC.disconnect() #We need to close the new ssh session that was created - if index_eNBMachine == index_EPCMachine: - oai_EPC.disconnect() + #if index_eNBMachine == index_EPCMachine: + # oai_EPC.disconnect() #This function searches if test case is present in list of test cases that need to be executed by user def search_test_case_group(testcasename, testcasegroup): @@ -654,7 +706,6 @@ def search_test_case_group(testcasename, testcasegroup): #thread1 = myThread(1, "Thread-1", 1) -threadListGeneric=[] debug = 0 pw ='' i = 0 @@ -677,8 +728,8 @@ if openairdir_local is None: sys.exit() locallogdir = openairdir_local + '/cmake_targets/autotests/log/' #Remove the contents of local log directory -os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir ) - +#os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir ) +flag_remove_logdir=False i=1 while i < len (sys.argv): arg=sys.argv[i] @@ -688,7 +739,9 @@ while i < len (sys.argv): debug = 2 elif arg == '-p' : prompt2 = sys.argv[i+1] - i = i +1 + i = i +1 + elif arg == '-r': + flag_remove_logdir=True elif arg == '-w' : pw = sys.argv[i+1] i = i +1 @@ -708,6 +761,7 @@ while i < len (sys.argv): print "-d: low debug level" print "-dd: high debug level" print "-p: set the prompt" + print "-r: Remove the log directory in autotests/" print "-w: set the password for ssh to localhost" print "-l: use local shell instead of ssh connection" print "-t: set the time out in second for commands" @@ -735,6 +789,12 @@ except KeyError: print "Please set the environment variable OPENAIR_TARGETS in the .bashrc" sys.exit(1) +if flag_remove_logdir == True: + print "Removing directory: " + locallogdir + os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir ) + + + paramiko_logfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/log/paramiko.log') res=os.system(' echo > ' + paramiko_logfile) paramiko.util.log_to_file(paramiko_logfile) @@ -767,7 +827,7 @@ GitOpenaircnRepoBranch = xmlRoot.findtext('GitOpenair-cnRepoBranch',default='') CleanUpOldProgs = xmlRoot.findtext('CleanUpOldProgs',default='') CleanUpAluLteBox = xmlRoot.findtext('CleanUpAluLteBox',default='') Timeout_execution = int (xmlRoot.findtext('Timeout_execution')) - +MachineListGeneric = xmlRoot.findtext('MachineListGeneric',default='') print "MachineList = " + MachineList print "GitOpenair-cnRepo = " + GitOpenaircnRepo print "GitOAI5GRepo = " + GitOAI5GRepo @@ -781,6 +841,7 @@ print "CleanUpOldProgs = " + CleanUpOldProgs print "Timeout_execution = " + str(Timeout_execution) MachineList = MachineList.split() +MachineListGeneric = MachineListGeneric.split() index=0 for machine in MachineList: @@ -909,7 +970,7 @@ for index in oai_list: #cmd = cmd + 'echo \' ' + cmd + '\' > ' + setup_script + ' 2>&1 \n ' #result = oai_list[index].send_recv(cmd, False, 300 ) write_file(setup_script, cmd, mode="w") - tempThread = oaiThread(index, 'thread_'+str(index), oai_list[index] , cmd, False, 300) + tempThread = oaiThread(index, 'thread_setup_'+str(index)+'_' + MachineList[index] , MachineList[index] , user, pw, cmd, False, 300) threads_init_setup.append(tempThread ) tempThread.start() @@ -944,12 +1005,13 @@ for index in oai_list: #print '\nCleaning Older running programs : ' + CleanUpOldProgs #cleanOldPrograms(oai_list[index], CleanUpOldProgs) - - except : - print 'There is error in one of the commands to setup the machine '+ MachineList[index] - sys.exit(1) - - + except Exception, e: + print 'There is error in one of the commands to setup the machine '+ MachineList[index] + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + sys.exit(1) #Now we wait for all the threads to complete index = 0 @@ -975,38 +1037,62 @@ for t in threads_init_setup: index = index+1 #Now we process all the test cases +#Now we check if there was error in setup files -threadListGeneric=[] +status, out = commands.getstatusoutput('grep ' + ' -il \'error\' ' + locallogdir + '/setup*') +if (out != '') : + print "There is error in setup of machines" + print "status = " + str(status) + "\n out = " + out + print sys.exit(1) + + +threadListGlobal=[] testcaseList=xmlRoot.findall('testCase') #print testcaseList for testcase in testcaseList: - testcasename = testcase.get('id') - testcaseclass = testcase.findtext('class',default='') - desc = testcase.findtext('desc',default='') - if search_test_case_group(testcasename, testcasegroup) == True: - if testcaseclass == 'lte-softmodem' : - eNBMachine = testcase.findtext('eNB',default='') - UEMachine = testcase.findtext('UE',default='') - EPCMachine = testcase.findtext('EPC',default='') - index_eNBMachine = MachineList.index(eNBMachine) - index_UEMachine = MachineList.index(UEMachine) - index_EPCMachine = MachineList.index(EPCMachine) - print "testcasename = " + testcasename + " class = " + testcaseclass - handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, oai_list, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, pw, CleanUpAluLteBox ) - elif (testcaseclass == 'compilation'): - handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramList, logdirOAI5GRepo, MachineList, pw, CleanupAluLteBox,Timeout_execution) - elif (testcaseclass == 'execution'): - handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramList, logdirOAI5GRepo, MachineList, pw, CleanupAluLteBox,Timeout_execution) - else : - print "Unknown test case class: " + testcaseclass - sys.exit() + try: + testcasename = testcase.get('id') + testcaseclass = testcase.findtext('class',default='') + desc = testcase.findtext('desc',default='') + #print "Machine list top level = " + ','.join(MachineList) + if search_test_case_group(testcasename, testcasegroup) == True: + if testcaseclass == 'lte-softmodem' : + eNBMachine = testcase.findtext('eNB',default='') + UEMachine = testcase.findtext('UE',default='') + EPCMachine = testcase.findtext('EPC',default='') + #index_eNBMachine = MachineList.index(eNBMachine) + #index_UEMachine = MachineList.index(UEMachine) + #index_EPCMachine = MachineList.index(EPCMachine) + if (eNBMachine not in MachineList)|(UEMachine not in MachineList)|(UEMachine not in MachineList): + print "One of the machines is not in the machine list" + print "eNBMachine : " + eNBMachine + "UEMachine : " + UEMachine + "EPCMachine : " + EPCMachine + "MachineList : " + ','.join(MachineList) + print "testcasename = " + testcasename + " class = " + testcaseclass + threadListGlobal = wait_testcaseclass_generic_threads(threadListGlobal, Timeout_execution) + handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, pw, CleanUpAluLteBox ) + elif (testcaseclass == 'compilation'): + threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, pw, CleanUpAluLteBox,Timeout_execution) + elif (testcaseclass == 'execution'): + threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, pw, CleanUpAluLteBox,Timeout_execution) + else : + print "Unknown test case class: " + testcaseclass + sys.exit() + + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' + error = error + traceback.format_exc() + print error + sys.exit(1) + print "Exiting the test cases execution now..." +for t in threadListGlobal: + t.join sys.exit() - #+ "class = "+ classx diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 2cd1438a8a..c6d0eecc41 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -1,14 +1,15 @@ -amerique stevens calisson nano +stevens calisson mozart nano amerique /mnt/sradio/TEST_RESULTS https://gitlab.eurecom.fr/oai/openairinterface5g.git https://gitlab.eurecom.fr/oai/openair-cn.git feature-34-test_framework feature-17-test_framework - oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* hss hss_sim configure_cots_bandrich_ue* wvdial* + oaisim* oaisim_nos1* lte-softmodem* lte-softmodem-nos1* mme_gw* run_epc* run_hss* iperf* hss hss_sim configure_cots_bandrich_ue* wvdial* run_exec_autotests* /opt/ltebox/tools/stop_ltebox 1800 + calisson stevens mozart nano amerique compilation Build oaisim.Rel8 From f1304ee26f22a5f249177644857a2fc795fa8313 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 4 Dec 2015 15:37:48 +0100 Subject: [PATCH 40/49] updated for completely putting UE in airplane mode --- cmake_targets/autotests/tools/configure_cots_bandrich_ue.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py index 2f959be55c..fced79f2ef 100755 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -103,6 +103,7 @@ def start_ue () : #print 'Enter your commands below.\r\nInsert "exit" to leave the application.' timeout=60 #timeout in seconds send_command('AT', 'OK' , timeout) + send_command('AT+CFUN=1' , 'OK' , timeout) send_command('AT+CGATT=0' , 'OK' , timeout) send_command('AT+CGATT=1','OK', 300) #os.system('wvdial -C ' + bandrich_ppd_config + ' &' ) @@ -135,6 +136,7 @@ def stop_ue(): os.system('killall wvdial') send_command('AT', 'OK' , timeout) send_command('AT+CGATT=0' , 'OK' , timeout) + send_command('AT+CFUN=4' , 'OK' , timeout) for arg in sys.argv[1:]: if arg == '--start-ue' : From 3422a591a888a87b4771abd6ea3cb35f50b05700 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 4 Dec 2015 15:40:18 +0100 Subject: [PATCH 41/49] updated for additional packages for autotest framework --- cmake_targets/tools/build_helper | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index c82b79499c..a1fefec3ce 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -279,7 +279,8 @@ check_install_oai_software() { xmlstarlet \ python-pip \ pydb \ - wvdial + wvdial \ + python-numpy $SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so if [ `lsb_release -rs` = '12.04' ] ; then install_nettle_from_source @@ -291,6 +292,8 @@ check_install_oai_software() { $SUDO pip install pyroute2 ) > $log_file 2>&1 install_asn1c_from_source + $SUDO rm -fr /opt/ssh + $SUDO git clone https://gist.github.com/2190472.git /opt/ssh } install_asn1c_from_source(){ From 008ccf04c774b9c548ba4a1b37ba363d7e145709 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 4 Dec 2015 15:48:57 +0100 Subject: [PATCH 42/49] updated autotest framework for lte-softmodem --- cmake_targets/autotests/README.txt | 27 ++- .../autotests/run_exec_lte-softmodem_tests.py | 222 +++++++++++------- cmake_targets/autotests/test_case_list.xml | 8 +- 3 files changed, 153 insertions(+), 104 deletions(-) diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt index 166db2990e..c3fccd9e6b 100644 --- a/cmake_targets/autotests/README.txt +++ b/cmake_targets/autotests/README.txt @@ -97,20 +97,29 @@ Obj.# Case# Test# Description 01 51 06 mbmssim (TBD) -01 55 lte-softmodem tests with ALU EPC w/ Bandrich COTS UE -01 55 00 FDD 5MHz UL Throughput for 60 sec -01 55 00 FDD 10MHz UL Throughput for 60 sec -01 55 00 FDD 20MHz UL Throughput for 60 sec -01 55 00 FDD 5MHz DL Throughput for 60 sec -01 55 00 FDD 10MHz DL Throughput for 60 sec -01 55 00 FDD 20MHz DL Throughput for 60 sec +01 55 lte-softmodem tests with USRP B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for `TX/1RX, 1TX/2RX, 2TX/1RX 2TX/2RX +01 55 00 Band 7 FDD 5MHz UL Throughput for 60 sec for 1TX/1RX +01 55 00 Band 7 FDD 10MHz UL Throughput for 60 sec +01 55 00 Band 7 FDD 20MHz UL Throughput for 60 sec +01 55 00 Band 7 FDD 5MHz DL Throughput for 60 sec +01 55 00 Band 7 FDD 10MHz DL Throughput for 60 sec +01 55 00 Band 7 FDD 20MHz DL Throughput for 60 sec -01 56 lte-softmodem tests with OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE +01 56 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE -01 57 lte-softmodem tests with OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE +01 57 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE +01 58 lte-softmodem tests with USRP B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for `TX/1RX, 1TX/2RX, 2TX/1RX 2TX/2RX + +01 59 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE + +01 61 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE + +01 61 lte-softmodem tests with EXMIMO RF as eNB and ALU EPC w/ Bandrich COTS UE +01 62 lte-softmodem tests with EXMIMO RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE +01 63 lte-softmodem tests with EXMIMO RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE 01 58 lte-softmodem-noS1 tests diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py index 3ae3758402..66953fda18 100644 --- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -49,6 +49,8 @@ import math #from time import clock import xml.etree.ElementTree as ET import re +import numpy as np + import log import case01 import case02 @@ -59,16 +61,100 @@ import case05 from openair import * import paramiko -import ssh -from ssh import SSHSession + import subprocess import commands +sys.path.append('/opt/ssh') + +import ssh +from ssh import SSHSession def write_file(filename, string, mode="w"): text_file = open(filename, mode) text_file.write(string) text_file.close() +#$1 name of file (assuming created with iperf -s -u .... +#$2 minimum throughput +#$3 maximum throughput +#$4 average throughput +#$5 minimum duration of throughput +#The throughput values found in file must be higher than values from from 2,3,4,5 +#The function returns True if throughput conditions are saisfied else it returns fails + +def tput_test(filename, min_tput, max_tput, average, min_duration): + if os.path.exists(filename): + with open (filename, "r") as myfile: + data=myfile.read() + p=re.compile('(\d*.\d*) Mbits/sec') + array=p.findall(data) + array = [ float(x) for x in array ] + duration = array.__len__() + if duration !=0: + min_list = min(array) + max_list = max(array) + average_list = np.mean(array) + else: + min_list = 0 + max_list = 0 + average_list=0 + + if (min_list >= min_tput and max_list >= max_tput and average_list >= average and duration >= min_duration): + return True + else: + return False + else: + return False + + +def try_convert_to_float(string, fail=None): + try: + return float(string) + except Exception: + return fail; + +def tput_test_search_expr (search_expr, logfile_traffic): + result=0 + if search_expr !='': + if search_expr.find('throughput_test')!= -1 : + p= re.compile('min\s*=\s*(\d*.\d*)\s*Mbits/sec') + min_tput=p.findall(search_expr) + if min_tput.__len__()==1: + min_tput = min_tput[0] + else: + min_tput = None + + p= re.compile('max\s*=\s*(\d*.\d*)\s*Mbits/sec') + max_tput=p.findall(search_expr) + if max_tput.__len__()==1: + max_tput = max_tput[0] + else: + max_tput = None + + p= re.compile('average\s*=\s*(\d*.\d*)\s*Mbits/sec') + avg_tput=p.findall(search_expr) + if avg_tput.__len__()==1: + avg_tput=avg_tput[0] + else: + avg_tput = None + + p= re.compile('duration\s*=\s*(\d*.\d*)\s*s') + duration=p.findall(search_expr) + if duration.__len__()==1: + duration = duration[0] + else: + duration = None + + min_tput = try_convert_to_float(min_tput) + max_tput = try_convert_to_float(max_tput) + avg_tput = try_convert_to_float(avg_tput) + duration = try_convert_to_float(duration) + + if (min_tput != None and max_tput != None and avg_tput != None and duration != None ): + result = tput_test(logfile_traffic, min_tput, max_tput, avg_tput, duration) + return result + + def sftp_module (username, password, hostname, ports, paramList,logfile): #localD = localfile @@ -365,13 +451,14 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , addpass = 'echo \'' + mypassword + '\' | ' user = getpass.getuser() testcasename = testcase.get('id') + testcaseclass = testcase.findtext('class',default='') timeout_cmd = testcase.findtext('TimeOut_cmd',default='') timeout_cmd = int(float(timeout_cmd)) #Timeout_thread is more than that of cmd to have room for compilation time, etc timeout_thread = timeout_cmd + 300 nruns = testcase.findtext('nruns',default='') nruns = int(float(nruns)) - + tags = testcase.findtext('tags',default='') eNBMachine = testcase.findtext('eNB',default='') eNB_config_file = testcase.findtext('eNB_config_file',default='') eNB_compile_prog = testcase.findtext('eNB_compile_prog',default='') @@ -383,6 +470,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , eNB_traffic_exec = testcase.findtext('eNB_traffic_exec',default='') eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='') eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='True') + eNB_search_expr_true = testcase.findtext('eNB_search_expr_true','') UEMachine = testcase.findtext('UE',default='') UE_config_file = testcase.findtext('UE_config_file',default='') @@ -395,6 +483,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , UE_traffic_exec = testcase.findtext('UE_traffic_exec',default='') UE_traffic_exec_args = testcase.findtext('UE_traffic_exec_args',default='') UE_terminate_missing_procs = testcase.findtext('UE_terminate_missing_procs',default='True') + UE_search_expr_true = testcase.findtext('UE_search_expr_true','') EPCMachine = testcase.findtext('EPC',default='') EPC_config_file = testcase.findtext('EPC_config_file',default='') @@ -412,6 +501,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , EPC_traffic_exec = testcase.findtext('EPC_traffic_exec',default='') EPC_traffic_exec_args = testcase.findtext('EPC_traffic_exec_args',default='') EPC_terminate_missing_procs = testcase.findtext('EPC_terminate_missing_procs',default='True') + EPC_search_expr_true = testcase.findtext('EPC_search_expr_true','') index_eNBMachine = MachineList.index(eNBMachine) index_UEMachine = MachineList.index(UEMachine) @@ -447,8 +537,12 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , #update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo) #update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo) #update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo) - + test_result=1 + test_result_string='' + start_time=time.time() for run in range(0,nruns): + run_result=1 + run_result_string='' logdir_eNB = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) logdir_UE = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) logdir_EPC = logdirOpenaircnRepo+'/TEST/autotests/log/'+ testcasename + '/run_' + str(run) @@ -587,105 +681,51 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox) cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox) - localfile = logdir_local_testcase + '/eNB_compile' + '_' + str(run) + '_.log' - remotefile = logdir_eNB + '/eNB_compile' + '_' + str(run) + '_.log' - sftp_log = os.path.expandvars(logdir_local_testcase + '/sftp_module.log') - ports = 22 - paramList = [] - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + print "Copying files from EPCMachine : " + EPCMachine + ssh = SSHSession(EPCMachine , username=user, key_file=None, password=password) + ssh.get_all(logdir_EPC , logdir_local_testcase) - localfile = logdir_local_testcase + '/eNB_exec' + '_' + str(run) + '_.log' - remotefile = logdir_eNB + '/eNB_exec' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") + print "Copying files from eNBMachine " + eNBMachine + ssh = SSHSession(eNBMachine , username=user, key_file=None, password=password) + ssh.get_all(logdir_eNB, logdir_local_testcase) - localfile = logdir_local_testcase + '/eNB_pre_exec' + '_' + str(run) + '_.log' - remotefile = logdir_eNB + '/eNB_pre_exec' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") - - localfile = logdir_local_testcase + '/eNB_traffic' + '_' + str(run) + '_.log' - remotefile = logdir_eNB + '/eNB_traffic' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, eNBMachine, ports, localfile, remotefile, sftp_log, "get") - - localfile = logdir_local_testcase + '/eNB_task_out' + '_' + str(run) + '_.log' - remotefile = logdir_eNB + '/eNB_task_out' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - - localfile = logdir_local_testcase + '/test_case_list.xml' - remotefile = logdirOAI5GRepo+'/cmake_targets/autotests/test_case_list.xml' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - sftp_module (user, password, eNBMachine, ports, paramList, sftp_log) + print "Copying files from UEMachine : " + UEMachine + ssh = SSHSession(UEMachine , username=user, key_file=None, password=password) + ssh.get_all(logdir_UE , logdir_local_testcase) - paramList=[] - localfile = logdir_local_testcase + '/UE_compile' + '_' + str(run) + '_.log' - remotefile = logdir_UE + '/UE_compile' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") - - localfile = logdir_local_testcase + '/UE_exec' + '_' + str(run) + '_.log' - remotefile = logdir_UE + '/UE_exec' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") - - localfile = logdir_local_testcase + '/UE_pre_exec' + '_' + str(run) + '_.log' - remotefile = logdir_UE + '/UE_pre_exec' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") - - localfile = logdir_local_testcase + '/UE_traffic' + '_' + str(run) + '_.log' - remotefile = logdir_UE + '/UE_traffic' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, UEMachine, ports, localfile, remotefile, sftp_log, "get") - - localfile = logdir_local_testcase + '/UE_task_out' + '_' + str(run) + '_.log' - remotefile = logdir_UE + '/UE_task_out' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - sftp_module (user, password, UEMachine, ports, paramList, sftp_log) + #Currently we only perform throughput tests + result = tput_test_search_expr(eNB_search_expr_true, logfile_traffic_eNB) + run_result=run_result&result + result = tput_test_search_expr(ePC_search_expr_true, logfile_traffic_ePC) + run_result=run_result&result + result = tput_test_search_expr(UE_search_expr_true, logfile_traffic_UE) + run_result=run_result&result - paramList=[] - localfile = logdir_local_testcase + '/EPC_compile' + '_' + str(run) + '_.log' - remotefile = logdir_EPC + '/EPC_compile' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + if run_result == 1: + run_result_string = 'RUN_'+str(run) + ' = PASS' + else: + run_result_string = 'RUN_'+str(run) + ' = FAIL' - localfile = logdir_local_testcase + '/EPC_exec' + '_' + str(run) + '_.log' - remotefile = logdir_EPC + '/EPC_exec' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") + test_result=test_result & run_result + test_result_string=test_result_string + run_result_string - localfile = logdir_local_testcase + '/HSS_compile' + '_' + str(run) + '_.log' - remotefile = logdir_EPC + '/HSS_compile' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") - - localfile = logdir_local_testcase + '/HSS_exec' + '_' + str(run) + '_.log' - remotefile = logdir_EPC + '/HSS_exec' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") - - localfile = logdir_local_testcase + '/EPC_pre_exec' + '_' + str(run) + '_.log' - remotefile = logdir_EPC + '/EPC_pre_exec' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") - - localfile = logdir_local_testcase + '/EPC_traffic' + '_' + str(run) + '_.log' - remotefile = logdir_EPC + '/EPC_traffic' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, password, EPCMachine, ports, localfile, remotefile, sftp_log, "get") - - localfile = logdir_local_testcase + '/EPC_task_out' + '_' + str(run) + '_.log' - remotefile = logdir_EPC + '/EPC_task_out' + '_' + str(run) + '_.log' - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - sftp_module (user, password, EPCMachine, ports, paramList, sftp_log) oai_eNB.disconnect() oai_UE.disconnect() oai_EPC.disconnect() #We need to close the new ssh session that was created #if index_eNBMachine == index_EPCMachine: # oai_EPC.disconnect() + #Now we finalize the xml file of the test case + end_time=time.time() + duration= end_time - start_time + xmlFile = logdir_local + '/cmake_targets/autotests/log/'+ testcasename + 'test.' + testcasename + '.xml' + if test_result ==0: + result='FAIL' + else: + result = 'PASS' + xml="" + write_file(xmlFile, xml, mode="w") + #This function searches if test case is present in list of test cases that need to be executed by user def search_test_case_group(testcasename, testcasegroup): diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index c6d0eecc41..ee11f25296 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -961,7 +961,7 @@ $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue - ping 192.172.0.1 + iperf -u -c 192.172.0.1 -b 10Mbits/s -t 3000 @@ -984,12 +984,12 @@ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000 - iperf -s + iperf -s -i 1 -u -f m - + throughput_test min=0.0Mbits/sec max=0.0Mbits/sec average=0.0Mbits/sec duration=0.0s True - + USRP.ALU_EPC.Bandrich.5MHz.FDD.UL 3 From 2ca52aaf7bf5a342845f8dbcb6b047a24dd2a227 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 4 Dec 2015 17:17:41 +0100 Subject: [PATCH 43/49] updated script for UE configuration --- .../autotests/run_exec_lte-softmodem_tests.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py index 66953fda18..bf5c398d15 100644 --- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -297,7 +297,7 @@ class oaiThread (threading.Thread): try: oai = openair('localdomain',self.machine) oai.connect(user, self.password) - print "Starting " + self.threadname + "on machine " + self.machine + print "Starting " + self.threadname + " on machine " + self.machine result = oai.send_recv(self.cmd, self.sudo, self.timeout) print "result = " + result print "Exiting " + self.threadname @@ -639,14 +639,14 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , task_EPC = task_EPC + '(' + HSS_compile_prog + ' ' + HSS_compile_prog_args + ' ) > ' + logfile_compile_HSS + ' 2>&1 \n' if EPC_pre_exec != "": task_EPC = task_EPC + ' ( ' + EPC_pre_exec + ' '+ EPC_pre_exec_args + ' ) > ' + logfile_pre_exec_EPC + ' 2>&1 \n' - if EPC_main_exec != "": - task_EPC = task_EPC + '(' + addsudo (EPC_main_exec + ' ' + EPC_main_exec_args, mypassword) + ' ) > ' + logfile_exec_EPC + ' 2>&1 & \n' - task_EPC = task_EPC + 'array_exec_pid+=($!) \n' - task_EPC = task_EPC + 'echo EPC_main_exec PID = $! \n' if HSS_main_exec != "": task_EPC = task_EPC + '(' + addsudo (HSS_main_exec + ' ' + HSS_main_exec_args, mypassword) + ' ) > ' + logfile_exec_HSS + ' 2>&1 & \n' task_EPC = task_EPC + 'array_exec_pid+=($!) \n' task_EPC = task_EPC + 'echo HSS_main_exec PID = $! \n' + if EPC_main_exec != "": + task_EPC = task_EPC + '(' + addsudo (EPC_main_exec + ' ' + EPC_main_exec_args, mypassword) + ' ) > ' + logfile_exec_EPC + ' 2>&1 & \n' + task_EPC = task_EPC + 'array_exec_pid+=($!) \n' + task_EPC = task_EPC + 'echo EPC_main_exec PID = $! \n' if EPC_traffic_exec != "": task_EPC = task_EPC + '(' + EPC_traffic_exec + ' ' + EPC_traffic_exec_args + ' ) > ' + logfile_traffic_EPC + ' 2>&1 & \n' task_EPC = task_EPC + 'array_exec_pid+=($!) \n' @@ -681,15 +681,15 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox) cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox) - print "Copying files from EPCMachine : " + EPCMachine + print "Copying files from EPCMachine : " + EPCMachine + "logdir_EPC = " + logdir_EPC ssh = SSHSession(EPCMachine , username=user, key_file=None, password=password) ssh.get_all(logdir_EPC , logdir_local_testcase) - print "Copying files from eNBMachine " + eNBMachine + print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB ssh = SSHSession(eNBMachine , username=user, key_file=None, password=password) ssh.get_all(logdir_eNB, logdir_local_testcase) - print "Copying files from UEMachine : " + UEMachine + print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE ssh = SSHSession(UEMachine , username=user, key_file=None, password=password) ssh.get_all(logdir_UE , logdir_local_testcase) From 8438d5aa5aed1975ed50375e01eb904fe3682663 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 4 Dec 2015 18:24:40 +0100 Subject: [PATCH 44/49] update to UE config script --- cmake_targets/autotests/tools/configure_cots_bandrich_ue.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py index fced79f2ef..cc5d4f706c 100755 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -104,7 +104,7 @@ def start_ue () : timeout=60 #timeout in seconds send_command('AT', 'OK' , timeout) send_command('AT+CFUN=1' , 'OK' , timeout) - send_command('AT+CGATT=0' , 'OK' , timeout) + #send_command('AT+CGATT=0' , 'OK' , timeout) send_command('AT+CGATT=1','OK', 300) #os.system('wvdial -C ' + bandrich_ppd_config + ' &' ) @@ -135,7 +135,7 @@ def stop_ue(): timeout=60 os.system('killall wvdial') send_command('AT', 'OK' , timeout) - send_command('AT+CGATT=0' , 'OK' , timeout) + #send_command('AT+CGATT=0' , 'OK' , timeout) send_command('AT+CFUN=4' , 'OK' , timeout) for arg in sys.argv[1:]: From d1a7df866211650ccc1dee9d0da9908d31799c93 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 4 Dec 2015 19:55:26 +0100 Subject: [PATCH 45/49] update to the bandrich UE config --- cmake_targets/autotests/tools/configure_cots_bandrich_ue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py index cc5d4f706c..5800597644 100755 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -135,7 +135,7 @@ def stop_ue(): timeout=60 os.system('killall wvdial') send_command('AT', 'OK' , timeout) - #send_command('AT+CGATT=0' , 'OK' , timeout) + send_command('AT+CGATT=0' , 'OK' , timeout) send_command('AT+CFUN=4' , 'OK' , timeout) for arg in sys.argv[1:]: From a9e65743eae4422fab72cb1116541403693f3689 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 4 Dec 2015 21:05:49 +0100 Subject: [PATCH 46/49] updated UE config script --- .../autotests/tools/configure_cots_bandrich_ue.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py index 5800597644..d117b524cd 100755 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -15,6 +15,11 @@ import os #First we find an open port to work with serial_port='' ser=serial.Serial() +openair_dir = os.environ.get('OPENAIR_DIR') +if openair_dir == None: + print "Error getting OPENAIR_DIR environment variable" + sys.exit(1) + def find_open_port(): global serial_port, ser max_ports=100 @@ -33,7 +38,7 @@ find_open_port() print 'Using Serial port : ' + serial_port #serial_port = '/dev/ttyUSB2' -bandrich_ppd_config = '$OPENAIR_DIR/cmake_targets/autotests/tools/wdial.bandrich.conf' +bandrich_ppd_config = os.environ.get('OPENAIR_DIR') + '/cmake_targets/autotests/tools/wdial.bandrich.conf' exit_flag=0 @@ -122,6 +127,7 @@ def start_ue () : ip = IPRoute() idx = ip.link_lookup(ifname=iface)[0] os.system ('route add 192.172.0.1 ppp0') + os.system ('ping 192.172.0.1') break except Exception, e: error = ' Interface ' + iface + 'does not exist...' @@ -135,7 +141,7 @@ def stop_ue(): timeout=60 os.system('killall wvdial') send_command('AT', 'OK' , timeout) - send_command('AT+CGATT=0' , 'OK' , timeout) + #send_command('AT+CGATT=0' , 'OK' , timeout) send_command('AT+CFUN=4' , 'OK' , timeout) for arg in sys.argv[1:]: From d687b89d9d7dfc3b5e9add3872de08eb317be3ca Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Fri, 4 Dec 2015 21:19:27 +0100 Subject: [PATCH 47/49] update to the bandrich UE config --- cmake_targets/autotests/tools/configure_cots_bandrich_ue.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py index d117b524cd..aa041360b7 100755 --- a/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py +++ b/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py @@ -141,7 +141,7 @@ def stop_ue(): timeout=60 os.system('killall wvdial') send_command('AT', 'OK' , timeout) - #send_command('AT+CGATT=0' , 'OK' , timeout) + send_command('AT+CGATT=0' , 'OK|ERROR' , timeout) send_command('AT+CFUN=4' , 'OK' , timeout) for arg in sys.argv[1:]: From 707e6798c34d40d9802d55bc5f5d7f2a72a92128 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Sun, 6 Dec 2015 13:32:19 +0100 Subject: [PATCH 48/49] bugfixes to test framework --- cmake_targets/autotests/run_exec_autotests.bash | 6 +++--- cmake_targets/tools/test_helper | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmake_targets/autotests/run_exec_autotests.bash b/cmake_targets/autotests/run_exec_autotests.bash index 2eea43082d..a447ac3b93 100755 --- a/cmake_targets/autotests/run_exec_autotests.bash +++ b/cmake_targets/autotests/run_exec_autotests.bash @@ -153,8 +153,8 @@ function test_compile() { echo_success "$test_case_name.${tags} PASSED" xUnit_success "compilation" "$test_case_name.$tags" "PASS" "$result_string" "$xmlfile_testcase" else - echo_success "$test_case_name.${tags} FAILED" - xUnit_success "compilation" "$test_case_name.$tags" "FAIL" "$result_string" "$xmlfile_testcase" + echo_error "$test_case_name.${tags} FAILED" + xUnit_fail "compilation" "$test_case_name.$tags" "FAIL" "$result_string" "$xmlfile_testcase" fi } @@ -324,7 +324,7 @@ function test_compile_and_run() { if [ "$result_string" == "" ]; then echo_error "execution $test_case_name.$compile_prog.${tags_array[$tags_array_index]} Run_Result = \"$result_string\" Result = FAIL" - xUnit_success "execution" "$test_case_name.${tags_array[$tags_array_index]}" "FAIL" "$result_string" "$xmlfile_testcase" + xUnit_fail "execution" "$test_case_name.${tags_array[$tags_array_index]}" "FAIL" "$result_string" "$xmlfile_testcase" else if [ "$global_result" == "0" ]; then echo_error "execution $test_case_name.${tags_array[$tags_array_index]} Run_Result = \"$result_string\" Result = FAIL" diff --git a/cmake_targets/tools/test_helper b/cmake_targets/tools/test_helper index e60fb8c720..495c80f079 100644 --- a/cmake_targets/tools/test_helper +++ b/cmake_targets/tools/test_helper @@ -34,7 +34,7 @@ xUnit_fail() { xmlfile_testcase=$5 currtime=$(date +%s.%N) time=$(echo "$currtime - $XUNIT_START" | bc -l) - xml="" + xml="" echo -e $xml > $xmlfile_testcase XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml" XUNIT_FAILED=$((XUNIT_FAILED+1)) @@ -56,7 +56,7 @@ xUnit_success() { xmlfile_testcase=$5 currtime=$(date +%s.%N) time=$(echo "$currtime - $XUNIT_START" | bc -l) - xml="" + xml="" echo -e $xml > $xmlfile_testcase XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml" XUNIT_SUCCESS=$((XUNIT_SUCCESS+1)) From d7e31be9134b8c7e87fc0d4adef360bfe2a7e391 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Sun, 6 Dec 2015 23:11:01 +0100 Subject: [PATCH 49/49] updates to autotest framework --- cmake_targets/autotests/README.txt | 6 +- .../autotests/run_exec_lte-softmodem_tests.py | 119 +++++++++++++----- cmake_targets/autotests/test_case_list.xml | 21 ++-- cmake_targets/tools/test_helper | 4 +- 4 files changed, 103 insertions(+), 47 deletions(-) diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt index c3fccd9e6b..8f6136c546 100644 --- a/cmake_targets/autotests/README.txt +++ b/cmake_targets/autotests/README.txt @@ -111,11 +111,11 @@ Obj.# Case# Test# Description 01 57 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE -01 58 lte-softmodem tests with USRP B210 RF as eNB and ALU EPC w/ Bandrich COTS UE for `TX/1RX, 1TX/2RX, 2TX/1RX 2TX/2RX +01 58 lte-softmodem tests with USRP X310 RF as eNB and ALU EPC w/ Bandrich COTS UE for `TX/1RX, 1TX/2RX, 2TX/1RX 2TX/2RX -01 59 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE +01 59 lte-softmodem tests with USRP X310 RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE -01 61 lte-softmodem tests with USRP B210 RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE +01 61 lte-softmodem tests with USRP X310 RF as eNB and OAI EPC (eNB and EPC are on different machines) w/ Bandrich COTS UE 01 61 lte-softmodem tests with EXMIMO RF as eNB and ALU EPC w/ Bandrich COTS UE 01 62 lte-softmodem tests with EXMIMO RF as eNB and OAI EPC (eNB and EPC are on same machines) w/ Bandrich COTS UE diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py index bf5c398d15..4bbe55e285 100644 --- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -233,10 +233,11 @@ def finalize_deploy_script (timeout_cmd, terminate_missing_procs='True'): sleep $wakeup_interval done echo "Final time step (Duration of test case) = $step " + date """ else: #We do not terminate the script if one of the processes has existed prematurely - cmd = cmd + 'sleep ' + str(timeout_cmd) + '\n' + cmd = cmd + 'sleep ' + str(timeout_cmd) + ' ; date \n' return cmd @@ -329,7 +330,7 @@ class testCaseThread_generic (threading.Thread): #addsudo = 'echo \'' + mypassword + '\' | sudo -S -E ' addpass = 'echo \'' + mypassword + '\' | ' user = getpass.getuser() - print "Starting test case : " + self.testcasename + " On machine " + self.machine + print "Starting test case : " + self.testcasename + " On machine " + self.machine + " timeout = " + str(self.timeout) oai = openair('localdomain',self.machine) oai.connect(user, self.password) cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox) @@ -349,7 +350,7 @@ class testCaseThread_generic (threading.Thread): os.system("mkdir -p " + logdir_local_testcase) cmd = "mkdir -p " + logdir_remote_testcase res = oai.send_recv(cmd, False, self.timeout) - print "res = " + res + #print "res = " + res cmd = "( cd " + self.logdirOAI5GRepo + " \n " cmd = cmd + "source oaienv \n" @@ -359,7 +360,7 @@ class testCaseThread_generic (threading.Thread): #print "cmd = " + cmd res = oai.send_recv(cmd, False, self.timeout) #print "res = " + res - print "ThreadID = " + str(self.threadID) + "ThreadName: " + self.name + " testcasename: " + self.testcasename + "Execution Result = " + res + #print "ThreadID = " + str(self.threadID) + "ThreadName: " + self.name + " testcasename: " + self.testcasename + "Execution Result = " + res write_file(logfile_task_testcasename, cmd, mode="w") #Now we copy all the remote files ssh = SSHSession(self.machine , username=user, key_file=None, password=self.password) @@ -385,8 +386,11 @@ def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramLis try: mypassword=password MachineListFree=[] + threadListNew=[] while MachineListFree.__len__() == 0 : MachineListBusy=[] + MachineListFree=[] + threadListNew=[] #first we need to find the list of free machines that we could run our test case if threadListGeneric.__len__() ==0 : #This means no thread is started yet @@ -398,25 +402,29 @@ def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramLis testcasenameold = param["testcasename"] thread_id.join(1) if thread_id.isAlive() == True: - print "thread_id is alive: testcasename: " + testcasenameold + threadListNew.append(param) + print "thread_id is alive: testcasename: " + testcasenameold + " on machine "+ machine if machine not in MachineListBusy: MachineListBusy.append(machine) else : - threadListGeneric.remove(param) + print "thread_id is finished: testcasename: " + testcasenameold + " on machine " + machine + #threadListGeneric.remove(param) + #if machine not in MachineListFree: + # MachineListFree.append(machine) #Now we check if there is at least one free machine MachineListFree = MachineList[:] for machine in MachineListBusy: if machine in MachineListFree: MachineListFree.remove(machine) - #print "MachineListFree = " + ','.join(MachineListFree) - #print "MachineListBusy = " + ','.join(MachineListBusy) - #print "MachineList = " + ','.join(MachineList) + print "MachineListFree = " + ','.join(MachineListFree) + print "MachineListBusy = " + ','.join(MachineListBusy) + print "MachineList = " + ','.join(MachineList) machine = MachineListFree[0] - thread = testCaseThread_generic(1,"Generic Thread_"+testcasename+"_"+machine+_, machine, logdirOAI5GRepo, testcasename, oldprogramList, CleanupAluLteBox, password, timeout) + thread = testCaseThread_generic(1,"Generic Thread_"+testcasename+"_"+ "machine_", machine, logdirOAI5GRepo, testcasename, oldprogramList, CleanupAluLteBox, password, timeout) param={"thread_id":thread, "Machine":machine, "testcasename":testcasename} thread.start() - threadListGeneric.append(param) - return threadListGeneric + threadListNew.append(param) + return threadListNew except Exception, e: error='' error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) @@ -561,14 +569,24 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , logfile_exec_eNB = logdir_eNB + '/eNB_exec' + '_' + str(run) + '_.log' logfile_pre_exec_eNB = logdir_eNB + '/eNB_pre_exec' + '_' + str(run) + '_.log' logfile_traffic_eNB = logdir_eNB + '/eNB_traffic' + '_' + str(run) + '_.log' + logfile_task_eNB_compile_out = logdir_eNB + '/eNB_task_compile_out' + '_' + str(run) + '_.log' + logfile_task_eNB_compile = logdir_local_testcase + '/eNB_task_compile' + '_' + str(run) + '_.log' logfile_task_eNB_out = logdir_eNB + '/eNB_task_out' + '_' + str(run) + '_.log' logfile_task_eNB = logdir_local_testcase + '/eNB_task' + '_' + str(run) + '_.log' - task_eNB = ' ( \n' - task_eNB = task_eNB + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' - task_eNB = task_eNB + 'env |grep OPENAIR \n' - task_eNB = task_eNB + update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' + + task_eNB_compile = ' ( uname -a ; date \n' + task_eNB_compile = task_eNB_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_eNB_compile = task_eNB_compile + 'env |grep OPENAIR \n' + task_eNB_compile = task_eNB_compile + update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' if eNB_compile_prog != "": - task_eNB = task_eNB + ' ( ' + eNB_compile_prog + ' '+ eNB_compile_prog_args + ' ) > ' + logfile_compile_eNB + ' 2>&1 \n' + task_eNB_compile = task_eNB_compile + ' ( ' + eNB_compile_prog + ' '+ eNB_compile_prog_args + ' ) > ' + logfile_compile_eNB + ' 2>&1 \n' + task_eNB_compile = task_eNB_compile + ' date ) > ' + logfile_task_eNB_compile_out + ' 2>&1 ' + write_file(logfile_task_eNB_compile, task_eNB_compile, mode="w") + + task_eNB = ' ( uname -a ; date \n' + task_eNB = task_eNB + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_eNB = task_eNB + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' + if eNB_pre_exec != "": task_eNB = task_eNB + ' ( ' + eNB_pre_exec + ' '+ eNB_pre_exec_args + ' ) > ' + logfile_pre_exec_eNB + ' 2>&1 \n' if eNB_main_exec != "": @@ -593,15 +611,27 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , logfile_traffic_UE = logdir_UE + '/UE_traffic' + '_' + str(run) + '_.log' logfile_task_UE_out = logdir_UE + '/UE_task_out' + '_' + str(run) + '_.log' logfile_task_UE = logdir_local_testcase + '/UE_task' + '_' + str(run) + '_.log' - task_UE = ' ( \n' + logfile_task_UE_compile_out = logdir_UE + '/UE_task_compile_out' + '_' + str(run) + '_.log' + logfile_task_UE_compile = logdir_local_testcase + '/UE_task_compile' + '_' + str(run) + '_.log' + + task_UE_compile = ' ( uname -a ; date \n' + task_UE_compile = task_UE_compile + 'array_exec_pid=()' + '\n' + task_UE_compile = task_UE_compile + 'cd ' + logdirOAI5GRepo + '\n' + task_UE_compile = task_UE_compile + 'source oaienv \n' + task_UE_compile = task_UE_compile + 'source cmake_targets/tools/build_helper \n' + task_UE_compile = task_UE_compile + 'env |grep OPENAIR \n' + task_UE_compile = task_UE_compile + update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' + if UE_compile_prog != "": + task_UE_compile = task_UE_compile + ' ( ' + UE_compile_prog + ' '+ UE_compile_prog_args + ' ) > ' + logfile_compile_UE + ' 2>&1 \n' + task_UE_compile = task_UE_compile + ' ) > ' + logfile_task_UE_compile_out + ' 2>&1 ' + write_file(logfile_task_UE_compile, task_UE_compile, mode="w") + + task_UE = ' ( uname -a ; date \n' task_UE = task_UE + 'array_exec_pid=()' + '\n' task_UE = task_UE + 'cd ' + logdirOAI5GRepo + '\n' task_UE = task_UE + 'source oaienv \n' task_UE = task_UE + 'source cmake_targets/tools/build_helper \n' task_UE = task_UE + 'env |grep OPENAIR \n' - task_UE = task_UE + update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' - if UE_compile_prog != "": - task_UE = task_UE + ' ( ' + UE_compile_prog + ' '+ UE_compile_prog_args + ' ) > ' + logfile_compile_UE + ' 2>&1 \n' if UE_pre_exec != "": task_UE = task_UE + ' ( ' + UE_pre_exec + ' '+ UE_pre_exec_args + ' ) > ' + logfile_pre_exec_UE + ' 2>&1 \n' if UE_main_exec != "": @@ -628,15 +658,25 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , logfile_traffic_EPC = logdir_EPC + '/EPC_traffic' + '_' + str(run) + '_.log' logfile_task_EPC_out = logdir_EPC + '/EPC_task_out' + '_' + str(run) + '_.log' logfile_task_EPC = logdir_local_testcase + '/EPC_task' + '_' + str(run) + '_.log' - task_EPC = ' ( \n' + logfile_task_EPC_compile_out = logdir_EPC + '/EPC_task_compile_out' + '_' + str(run) + '_.log' + logfile_task_EPC_compile = logdir_local_testcase + '/EPC_task_compile' + '_' + str(run) + '_.log' + + task_EPC_compile = ' ( uname -a ; date \n' + task_EPC_compile = task_EPC_compile + 'array_exec_pid=()' + '\n' + task_EPC_compile = task_EPC_compile + 'cd ' + logdirOpenaircnRepo + '\n' + task_EPC_compile = task_EPC_compile + update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo, logdirOpenaircnRepo+'/TEST/autotests/tools/search_repl.py') + '\n' + task_EPC_compile = task_EPC_compile + 'source BUILD/TOOLS/build_helper \n' + if EPC_compile_prog != "": + task_EPC_compile = task_EPC_compile + '(' + EPC_compile_prog + ' ' + EPC_compile_prog_args + ' ) > ' + logfile_compile_EPC + ' 2>&1 \n' + if HSS_compile_prog != "": + task_EPC_compile = task_EPC_compile + '(' + HSS_compile_prog + ' ' + HSS_compile_prog_args + ' ) > ' + logfile_compile_HSS + ' 2>&1 \n' + task_EPC_compile = task_EPC_compile + ' ) > ' + logfile_task_EPC_compile_out + ' 2>&1 ' + write_file(logfile_task_EPC_compile, task_EPC_compile, mode="w") + + task_EPC = ' ( uname -a ; date \n' task_EPC = task_EPC + 'array_exec_pid=()' + '\n' task_EPC = task_EPC + 'cd ' + logdirOpenaircnRepo + '\n' - task_EPC = task_EPC + update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo, logdirOpenaircnRepo+'/TEST/autotests/tools/search_repl.py') + '\n' task_EPC = task_EPC + 'source BUILD/TOOLS/build_helper \n' - if EPC_compile_prog != "": - task_EPC = task_EPC + '(' + EPC_compile_prog + ' ' + EPC_compile_prog_args + ' ) > ' + logfile_compile_EPC + ' 2>&1 \n' - if HSS_compile_prog != "": - task_EPC = task_EPC + '(' + HSS_compile_prog + ' ' + HSS_compile_prog_args + ' ) > ' + logfile_compile_HSS + ' 2>&1 \n' if EPC_pre_exec != "": task_EPC = task_EPC + ' ( ' + EPC_pre_exec + ' '+ EPC_pre_exec_args + ' ) > ' + logfile_pre_exec_EPC + ' 2>&1 \n' if HSS_main_exec != "": @@ -658,6 +698,23 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , task_EPC = task_EPC + ' ) > ' + logfile_task_EPC_out + ' 2>&1 ' write_file(logfile_task_EPC, task_EPC, mode="w") + #first we compile all the programs + thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC_compile, False, timeout_thread) + thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB_compile, False, timeout_thread) + thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE_compile, False, timeout_thread) + threads=[] + threads.append(thread_eNB) + threads.append(thread_UE) + threads.append(thread_EPC) + # Start new Threads + thread_eNB.start() + thread_UE.start() + thread_EPC.start() + #Wait for all the compile threads to complete + for t in threads: + t.join() + + #Now we execute all the threads thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC, False, timeout_thread) thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB, False, timeout_thread) thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE, False, timeout_thread) @@ -683,20 +740,20 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , print "Copying files from EPCMachine : " + EPCMachine + "logdir_EPC = " + logdir_EPC ssh = SSHSession(EPCMachine , username=user, key_file=None, password=password) - ssh.get_all(logdir_EPC , logdir_local_testcase) + ssh.get_all(logdir_EPC , logdir_local + '/cmake_targets/autotests/log/'+ testcasename) print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB ssh = SSHSession(eNBMachine , username=user, key_file=None, password=password) - ssh.get_all(logdir_eNB, logdir_local_testcase) + ssh.get_all(logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename) print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE ssh = SSHSession(UEMachine , username=user, key_file=None, password=password) - ssh.get_all(logdir_UE , logdir_local_testcase) + ssh.get_all(logdir_UE , logdir_local + '/cmake_targets/autotests/log/'+ testcasename) #Currently we only perform throughput tests result = tput_test_search_expr(eNB_search_expr_true, logfile_traffic_eNB) run_result=run_result&result - result = tput_test_search_expr(ePC_search_expr_true, logfile_traffic_ePC) + result = tput_test_search_expr(EPC_search_expr_true, logfile_traffic_EPC) run_result=run_result&result result = tput_test_search_expr(UE_search_expr_true, logfile_traffic_UE) run_result=run_result&result diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index ee11f25296..94dc3a35ff 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -211,7 +211,7 @@ $OPENAIR_DIR/cmake_targets/build_oai --eNB -w ETHERNET -r Rel10 - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem @@ -280,7 +280,6 @@ $OPENAIR_DIR/cmake_targets/build_oai --RRH -w EXMIMO $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw - $OPENAIR_DIR/cmake_targets/rrh_gw/build/rrh_gw $OPENAIR_DIR/cmake_targets/rrh_gw/build/CMakeFiles/openair_rf/openair_rf.ko $OPENAIR_DIR/cmake_targets/rrh_gw/build/updatefw $OPENAIR_DIR/cmake_targets/rrh_gw/build/oarf_config_exmimo.oct @@ -307,7 +306,7 @@ - RRH.USRP.Rel10 + RRH.BLADERF.Rel10 1 @@ -929,7 +928,7 @@ calisson stevens amerique - 60 + 180 /tmp targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf tracking_area_code \"1\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"208\" @@ -937,15 +936,15 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf tracking_area_code \"1\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_country_code \"208\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mobile_network_code \"92\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf N_RB_DL 25 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" $OPENAIR_DIR/cmake_targets/build_oai - --eNB -w USRP + --eNB -w USRP -x -c $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.remote.conf - iperf -s + @@ -956,12 +955,12 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_country_code \"5\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.epc.local.conf mobile_network_code \"6\" $OPENAIR_DIR/cmake_targets/build_oai - --eNB -w USRP + --eNB -w USRP -x -c - $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue + sleep 30 ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --stop-ue ; $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --start-ue - iperf -u -c 192.172.0.1 -b 10Mbits/s -t 3000 + while true; do var=`ifconfig ppp0` ;sleep 1; if [ "$var" != "" ]; then break; fi ; done ; sleep 5; iperf -u -c 192.172.0.1 -b 10Mbits/s -t 3000 -B 192.172.0.2 @@ -984,7 +983,7 @@ /opt/hss_sim0609/starthss >> /dev/null ; sleep 3000 - iperf -s -i 1 -u -f m + sleep 5; iperf -s -i 1 -u -f m -B 192.172.0.1 throughput_test min=0.0Mbits/sec max=0.0Mbits/sec average=0.0Mbits/sec duration=0.0s diff --git a/cmake_targets/tools/test_helper b/cmake_targets/tools/test_helper index 495c80f079..49a9910573 100644 --- a/cmake_targets/tools/test_helper +++ b/cmake_targets/tools/test_helper @@ -35,7 +35,7 @@ xUnit_fail() { currtime=$(date +%s.%N) time=$(echo "$currtime - $XUNIT_START" | bc -l) xml="" - echo -e $xml > $xmlfile_testcase + echo -e $xml >> $xmlfile_testcase XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml" XUNIT_FAILED=$((XUNIT_FAILED+1)) } @@ -57,7 +57,7 @@ xUnit_success() { currtime=$(date +%s.%N) time=$(echo "$currtime - $XUNIT_START" | bc -l) xml="" - echo -e $xml > $xmlfile_testcase + echo -e $xml >> $xmlfile_testcase XUNIT_TESTCASES_XML="$XUNIT_TESTCASES_XML \n$xml" XUNIT_SUCCESS=$((XUNIT_SUCCESS+1)) }