Fix potential nil ptr seg fault and CI test issue
[ric-plt/lib/rmr.git] / test / app_test / run_all.ksh
index 8cc578c..57e29c8 100644 (file)
 #==================================================================================
 #
 
-# run all of the tests, building rmr before the first one if -B is on the command line.
+#      Mnemonic:       run_all.ksh (bash compatable)
+#      Abstract:       This script will drive all of the application tests and ensure
+#                              that the environment is set up as follows:
+#
+#                                      Any deb packages which exist in BUILD_PATH are 'installed'
+#                                      into a /tmp directory so that application builds can reference
+#                                      them.
+#
+#                                      References are set up to find the NNG library files in the
+#                                      BUILD_PATH directory.
+#
+#                              The BUILD_PATH environment variable should be set, and if not the
+#                              two directories ../.build and ../build are checked for and used.
+#                              If the var is not set, and nether of these directories exists,
+#                              the tests will not be executed.
+#
+#                              At the moment, it assumes a deb based system for tests. 
+#
+#      Author:         E. Scott Daniels
+#      Date:           2019
+# -----------------------------------------------------------------------------------
 
 function run_test {
        if [[ -n $capture_file ]]
@@ -41,31 +61,76 @@ errors=0
 si_flag=""                             # eventually we'll default to -S to run SI tests over NNG tests
 
 src_root="../.."
-if [[ -d $src_root/.build ]]                   # look for build directory in expected places
-then                                                                   # run scripts will honour this
-       export BUILD_PATH=$src_root/.build
+if [[ -z $BUILD_PATH ]]                                                # if not explicitly set, assume one of our standard spots
+then
+       if [[ -d $src_root/.build ]]                    # look for build directory in expected places
+       then                                                                    # run scripts will honour this
+               export BUILD_PATH=$src_root/.build
+       else
+               if [[ -d $src_root/build ]]
+               then
+                       export BUILD_PATH=$src_root/build
+               else
+                       echo "[ERR]  BUILD_PATH not set and no logical build directory exists to use"
+                       echo "[INFO] tried: $src_root/build and $src_root/.build"
+                       exit 1
+               fi
+       fi
+       echo "[INFO] using discovered build directory: $BUILD_PATH"
 else
-       if [[ -d $src_root/build ]]
+       echo "[INFO] using externally supplied build directory: $BUILD_PATH"
+fi
+
+# when dpkg is present, unpack the debs in build so we can reference them. When not
+# we assume that the env vars are set properly.
+#
+if which dpkg >/dev/null 2>&1
+then
+       goober_dir=/tmp/PID$$.goober    # private playpen for unpacking deb
+       rm -fr $goober_dir                              # this can fail and we don't care
+       if ! mkdir -p $goober_dir               # but we care if this does
        then
-               export BUILD_PATH=$src_root/build
+               echo "[ERR] run_all: cannot set up working directory for lib/header files: $goober_dir"
+               exit 1
        fi
+
+       for d in $BUILD_PATH/*.deb
+       do
+               echo "[INFO] run_all: unpacking $d"
+               dpkg -x $d ${goober_dir}
+       done
+
+       find ${goober_dir}
+
+       export C_INCLUDE_PATH=$BUILD_PATH/include:${goober_dir}/usr/local/include:$C_INCLUDE_PATH
+       export LIBRARY_PATH=$BUILD_PATH:$BUILD_PATH/.xbuild/lib:${goober_dir}/usr/local/lib:$LD_LIBRARY_PATH
+       export LD_LIBRARY_PATH=$LIBRARY_PATH
 fi
 
+
 if whence ksh >/dev/null 2>&1
 then
        shell=ksh
 else
        shell=bash
 fi
+
+verbose=0
+purge=1
 while [[ $1 == "-"* ]]
 do
        case $1 in
-               -B)     build="-B";;
+               -B)     build="-b";;                    # build RMR without pulling
                -e)     capture_file=$2; >$capture_file; shift;;
                -i)     installed="-i";;
                -N)     si_flag="";;                    # turn on NNG tests (off si)
+               -P)     build="-B";;                    # build RMR with a pull first
+               -p)     purge=0;;                               # don't purge binaries to ensure rebuild happens
                -S)     si_flag="-S";;                  # turn on si based tests
                -s) shell=$2; shift;;
+               -v)     verbose=1;;
+
+               -\?) echo "usage: $0 [-B|-P] [-e err_file] [-i] [-N|-S] [-p] [-s shell] [-v]";;
 
                *)      echo "'$1' is not a recognised option and is ignored";;
        esac
@@ -73,16 +138,31 @@ do
        shift
 done
 
+if (( verbose ))
+then
+       env | grep PATH
+       if [[ -n $goober_dir ]]
+       then
+               find $goober_dir
+       fi
+fi
+
 export SHELL=$shell
 
+if (( purge ))
+then
+       rm -f sender sender_si receiver receiver_si
+fi
+
 echo "----- app --------------------"
-if which ip >/dev/null 2>&1
+if which ip >/dev/null 2>&1                                    # ip command rquired for the app test; skip if not found
 then
        run_test run_app_test.ksh $si_flag -v $installed $build
+       build=""
 fi
 
 echo "----- multi ------------------"
-run_test run_multi_test.ksh $si_flag
+run_test run_multi_test.ksh $si_flag $build
 
 echo "----- round robin -----------"
 run_test run_rr_test.ksh $si_flag
@@ -103,4 +183,6 @@ else
        echo "[FAIL] one or more application to application tests failed"
 fi
 
+
+fm -fr goober_dir
 exit $(( !! errors ))