#!/bin/bash
#-------------------------------------------------------------------------------
#   System Test Coordinator
#-------------------------------------------------------------------------------

# If specifiy another env init script, load it.
params=()
index=0
for i in $@; do
    key=`echo $i | awk -F '=' '{print $1}'`
    if [ "$key" == "-ENV_DEFAULT" ]; then
	val=`echo $i | awk -F '=' '{print $2}'`
	source $val
    else
	params[$index]=$i
	let index+=1
    fi
done

. $ONOS_ROOT/tools/build/envDefaults

VER=${STC_VERSION:-2.5}
MVN_JAR=org/onosproject/onos-stc/$VER/onos-stc-$VER.jar
JAR=${MAVEN_REPO:-$HOME/.m2/repository}/$MVN_JAR
SCENARIOS=$ONOS_ROOT/tools/test/scenarios

# Download the STC binary if needed
if [ ! -f $JAR ]; then
    printf "Downloading STC binary..."
    mkdir -p /tmp/stc $(dirname $JAR)
    curl https://repo1.maven.org/maven2/$MVN_JAR > $JAR
    [ -f $JAR ] && printf "Done.\n"
fi

DEBUG_OPTS="-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=y"

scenario=${params[0]:-smoke}

if [ $scenario != "-?" -a $scenario != "-h" -a $scenario != "--help" ]; then
    [ ! -f $scenario ] && scenario=$SCENARIOS/$scenario
    [ ! -f $scenario ] && scenario=$scenario.xml
    [ ! -f $scenario ] && echo "Scenario $scenario file not found" && exit 1
fi

# Remove the test name from the list of parameters, if one is specified
[ $# -ge 1 ] && shift

# If stcColor is not set, we will enable color if this is an interactive session
[ -t 1 ] && interactive=true || interactive=false
[ -t 1 ] && notInteractive=false || notInteractive=true

# Run stc
[ -z "$stcDebug" ] && DEBUG_OPTS=""
stcTitle=${stcTitle:-} stcColor=${stcColor:-$interactive} stcDumpLogs=${stcDumpLogs:-$notInteractive} \
    java $DEBUG_OPTS -jar $JAR $scenario "${params[*]}"
