#!/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'" 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