#!/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 if whence dpkg >/dev/null 2>&1 then dpkg -i *.deb else log_it "[INFO] Deb installation check skipped. dpkg does not exist; trying make install" make install fi ) >/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 log_it "[INFO] unit testing starts" ( 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" log_it "[OK] unit testing passes" echo "" log_it "[PASS] all testing successful"