#!/usr/bin/env ksh
# vim: ts=4 sw=4 noet :
#==================================================================================
-# Copyright (c) 2019 Nokia
-# Copyright (c) 2018-2019 AT&T Intellectual Property.
+# Copyright (c) 2019-2020 Nokia
+# Copyright (c) 2018-2020 AT&T Intellectual Property.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
#==================================================================================
#
-# 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 ]]
then
- if ! ksh $@ >>$capture_file 2>&1
+ if ! $shell $@ >>$capture_file 2>&1
then
echo "[FAIL] test failed; see $capture_file"
(( errors++ ))
fi
else
- if ! ksh $@
+ if ! $shell $@
then
(( errors++ ))
fi
build=""
errors=0
+si_flag="" # eventually we'll default to -S to run SI tests over NNG tests
+
+src_root="../.."
+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
+ 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
+ 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
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 --------------------"
-run_test run_app_test.ksh -v $installed $build
+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
+run_test run_multi_test.ksh $si_flag $build
echo "----- round robin -----------"
-run_test run_rr_test.ksh
+run_test run_rr_test.ksh $si_flag
echo "----- rts -------------------"
-run_test run_rts_test.ksh -s 5 -d 100
+run_test run_rts_test.ksh $si_flag -s 5 -d 100
echo "----- extended payload nocopy no clone------"
-run_test run_exrts_test.ksh -d 10 -n 1000
+run_test run_exrts_test.ksh $si_flag -d 10 -n 1000
echo "----- extended payload copy clone------"
-run_test run_exrts_test.ksh -d 10 -n 1000 -c 11
+run_test run_exrts_test.ksh $si_flag -d 10 -n 1000 -c 11
if (( errors == 0 ))
then
echo "[FAIL] one or more application to application tests failed"
fi
+
+fm -fr goober_dir
exit $(( !! errors ))