#!/usr/bin/env bash
# Copyright 2018 Oticon A/S
# SPDX-License-Identifier: Apache-2.0
# Syntax run_parallel.sh [-h] [options]
set -u
START=$SECONDS
function display_help(){
echo "run_parallel.sh [-help] [options]"
echo " Execute all cases which do not start with an _ (underscore)"
echo " [options] will be passed directly to the scripts"
echo " The results will be saved to \${RESULTS_FILE}, by deault"
echo " ../RunResults.xml"
echo " Testcases are searched for in \${SEARCH_PATH}, by default this folder"
}
# Parse command line
if [ $# -ge 1 ]; then
if grep -Eiq "(\?|-\?|-h|help|-help|--help)" <<< $1 ; then
display_help
exit 0;
fi
fi
err=0
i=0
SEARCH_PATH="${SEARCH_PATH:-`pwd`}"
#All the testcases we want to run:
ALL_CASES=`find ${SEARCH_PATH} -name "*.sh" | \
grep -Ev "(/_|run_parallel|compile.sh)"`
#we dont run ourselves
RESULTS_FILE="${RESULTS_FILE:-`pwd`/../RunResults.xml}"
TMP_RES_FILE=tmp.xml
ALL_CASES_A=( $ALL_CASES )
N_CASES=$((${#ALL_CASES_A[@]}))
touch ${RESULTS_FILE}
echo "Attempting to run ${N_CASES} cases (logging to \
`realpath ${RESULTS_FILE}`)"
chmod +x $ALL_CASES
export CLEAN_XML="sed -E -e 's/&/\&/g' -e 's/\</g' -e 's/>/\>/g' \
-e 's/\"/"/g'"
echo -n "" > $TMP_RES_FILE
if [ `command -v parallel` ]; then
parallel '
echo "";
{} $@ &> {#}.log ;
if [ $? -ne 0 ]; then
(>&2 echo -e "\e[91m{} FAILED\e[39m");
(>&2 cat {#}.log);
echo "";
cat {#}.log | eval $CLEAN_XML;
echo "";
rm {#}.log ;
echo "";
exit 1;
else
(>&2 echo -e "{} PASSED");
rm {#}.log ;
echo "";
fi;
' ::: $ALL_CASES >> $TMP_RES_FILE ; err=$?
else #fallback in case parallel is not installed
for CASE in $ALL_CASES; do
echo "" >> $TMP_RES_FILE
$CASE $@ &> $i.log
if [ $? -ne 0 ]; then
echo -e "\e[91m$CASE FAILED\e[39m"
cat $i.log
echo "" >> $TMP_RES_FILE
cat $i.log | eval $CLEAN_XML >> $TMP_RES_FILE
echo "" >> $TMP_RES_FILE
let "err++"
else
echo -e "$CASE PASSED"
fi;
echo "" >> $TMP_RES_FILE
rm $i.log
let i=i+1
done
fi
echo -e "\n\n" >> $TMP_RES_FILE
dur=$(($SECONDS - $START))
echo -e "\n" \
| cat - $TMP_RES_FILE > $RESULTS_FILE
rm $TMP_RES_FILE
exit $err