#!/bin/bash
# Set the defaults
DEFAULT_LOG_LEVEL="TRACE" # Available levels: TRACE, DEBUG, INFO (default), WARN, NONE (no logging)
DEFAULT_RES="1280x1024x24"
DEFAULT_DISPLAY=":99"
DEFAULT_ROBOT_TEST="-i health"
INSTALL_NAME="OpenECOMP_ETE"
DEFAULT_OUTPUT_FOLDER=./
# To mitigate the chromedriver hanging issue
export DBUS_SESSION_BUS_ADDRESS=/dev/null
# Use default if none specified as env var
LOG_LEVEL=${LOG_LEVEL:-$DEFAULT_LOG_LEVEL}
RES=${RES:-$DEFAULT_RES}
DISPLAY=${DISPLAY:-$DEFAULT_DISPLAY}
# OUTPUT_FOLDER env variable will be overridden by -d command line argument.
OUTPUT_FOLDER=${OUTPUT_FOLDER:-$DEFAULT_OUTPUT_FOLDER}
VARIABLEFILES=
LISTENERS=
## Single argument, it is an include tag
if [ $# -eq 1 ]; then
ROBOT_TAGS="-i $1"
fi
##
## if more than 1 tag is supplied, the must be provided with -i or -e
##
while [ $# -gt 1 ]
do
key="$1"
case $key in
-i|--include)
ROBOT_TAGS="${ROBOT_TAGS} -i $2"
shift
;;
-e|--exclude)
ROBOT_TAGS="${ROBOT_TAGS} -e $2"
shift
;;
-d|--outputdir)
OUTPUT_FOLDER=$2
shift
;;
--display)
DISPLAY=:$2
shift
;;
--listener)
LISTENERS="${LISTENER} --listener $2 "
shift
;;
-V)
VARIABLEFILES="${VARIABLEFILES} -V $2 "
shift
;;
-v)
VARIABLES="${VARIABLES} -v $2 "
shift
;;
esac
shift
done
if [ "${ROBOT_TAGS}" = "" ];then
ROBOT_TAGS=$DEFAULT_ROBOT_TEST
fi
# Start Xvfb
echo -e "Starting Xvfb on display ${DISPLAY} with res ${RES}"
Xvfb ${DISPLAY} -ac -screen 0 ${RES} +extension RANDR &
XVFBPID=$!
# Get pid of this spawned process to make sure we kill the correct process later
export DISPLAY=${DISPLAY}
# Execute tests
echo -e "Executing robot tests at log level ${LOG_LEVEL}"
ROBOT_LIBS=./robot/library:./robot/library/eteutils:./robot/library/heatbridge
cd /var/opt/${INSTALL_NAME}
python -m robot.run -L ${LOG_LEVEL} -d ${OUTPUT_FOLDER} ${VARIABLEFILES} ${VARIABLES} ${LISTENERS} -P ${ROBOT_LIBS} ${ROBOT_TAGS} $(pwd)
# Stop Xvfb we started earlier
# select it from list of possible Xvfb pids running because
# a) there may be multiple Xvfbs running and
# b) the XVFBPID may not be the correct if the start did not actually work (unlikely and that may be)
PIDS=$(pgrep Xvfb)
for P in $PIDS
do
if [ $P == $XVFBPID ];then
kill -9 $P
fi
done