test(all): Add toplevel build and test script
Change-Id: Ie34a4418c8e03103ee44a25b228cadf910237f0c
Signed-off-by: E. Scott Daniels <daniels@research.att.com>
diff --git a/test/run_all_test.ksh b/test/run_all_test.ksh
new file mode 100644
index 0000000..b56246d
--- /dev/null
+++ b/test/run_all_test.ksh
@@ -0,0 +1,141 @@
+#!/usr/bin/env ksh
+
+#==================================================================================
+# Copyright (c) 2019 Nokia
+# Copyright (c) 2018-2019 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.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#==================================================================================
+
+
+#
+# Mnemonic: run_all_tests.ksh
+# Abstract: This should allow one stop shopping to run all tests as
+# follows some are explicit, some are implied (e.g. if nng
+# doesn't build correctly RMr won't build):
+#
+# - complete build of RMr code and generation of a .deb with
+# expected content
+#
+# - complete build of Nanomsg and NNG
+#
+# - complete execution of the unit test script
+#
+# Assumptions:
+# - code is cloned, and the PWD is the top level repo directory
+# - running in a container such that 'make install' can be
+# executed to install RMr and NNG/Nano libraires in /usr/local
+# - needed utilities (cmake, make, gcc, ksh) are installed
+#
+# Date: 17 April 2019
+# Author: E. Scott Daniels
+# -------------------------------------------------------------------------
+
+# cat the file if error or verbose
+function err_cat {
+ if (( $1 > 0 || verbose ))
+ then
+ shift
+ while [[ -n $1 ]]
+ do
+ cat $1
+ echo ""
+ shift
+ done
+ fi
+}
+
+# if $1 (state) is not 0, write message ($2) and abort
+function abort_on_err {
+ if (( $1 != 0 ))
+ then
+ echo "$(date) [FAIL] $2"
+ exit 1
+ fi
+}
+
+function log_it {
+ echo "$(date) $1"
+}
+
+verbose=0
+refresh=1 # use -R to turn off a git pull before we start
+
+while [[ $1 == -* ]]
+do
+ case $1 in
+ -R) refresh=0;;
+ -v) verbose=1;;
+ esac
+
+ shift
+done
+
+if (( refresh ))
+then
+ log_it "[INFO] refreshing RMr code base with git pull"
+ (
+ set -e
+ git pull
+ ) >/tmp/git.log 2>&1
+ rc=$?
+ err_cat $rc /tmp/git.log
+ abort_on_err $rc "unable to refresh RMr code base"
+fi
+
+log_it "[INFO] build starts"
+# build RMr (and nano/nng)
+(
+ set -e
+ mkdir -p .build
+ cd .build
+ cmake .. -DBUILD_DOC=1
+ make package # build RMr, then put in the .deb
+) >/tmp/build.log 2>&1 # capture the reams of output and show only on error
+rc=$?
+err_cat $rc /tmp/build.log
+abort_on_err $rc "unable to setup cmake or build and install"
+
+log_it "[OK] Build successful"
+
+log_it "[INFO] validating .deb"
+(
+ set -e
+ cd .build
+ ls -al *.deb
+ dpkg -i *.deb
+) >/tmp/dpkg.log 2>&1
+rc=$?
+err_cat $rc /tmp/dpkg.log
+abort_on_err $rc "unable to install from .deb"
+
+log_it "[OK] Deb installation successful"
+
+PATH=$PATH:.
+export LD_LIBRARY_PATH=/usr/local/lib
+export C_INCLUDE_PATH=../.build/include # must reference nano/nng from the build tree
+
+(
+ set -e
+ cd test
+ pwd
+ ls -al unit_test.ksh
+ ./unit_test.ksh
+) >/tmp/utest.log 2>&1
+rc=$?
+err_cat $rc /tmp/utest.log
+abort_on_err $rc "unit tests failed"
+
+echo ""
+log_it "[PASS] all testing successful"
+