#!/bin/bash
#-------------------------------------------------------------------------------
# Loops the System Test Coordinator invocations while success/until failure.
#-------------------------------------------------------------------------------

count=0
unset doSetup doTeardown

# Scan arguments for user/password or other options...
while getopts c:st o; do
    case "$o" in
        c) count=$OPTARG;;
        s) doSetup=true;;
        t) toTeardown=true;;
    esac
done
let OPC=$OPTIND-1
shift $OPC

if [ -n "$doSetup" ]; then
    printf "Setting up...\n"
    stc setup || exit 1
fi

# Iterate the specified number of times, or indefinitely if count not given
let run=1
while [ $count -le 0 -o $run -le $count ]; do
    export stcTitle="STC Run #$run; "
    printf "Starting run %d...\n" $run

    # If we're running on a borrowed cell, refresh the reservation
    [ "$ONOS_CELL" = "borrow" ] && onos-cell $ONOS_CELL 120 >/dev/null

    # Iterate over all listed scenarios
    let status=0
    for scenario in "${@:-smoke}"; do
        if [[ $scenario =~ ^[0-9]*$ ]]; then
            printf "Waiting %d seconds...\n" $scenario
            sleep $scenario
        else
            printf "Running scenario %s...\n" $scenario
            stc $scenario || let status=status+$?
        fi
        [ $status -ne 0 ] && break
    done

    printf "Finished run %d...\n" $run
    [ $status -ne 0 ] && exit $status
    let run=run+1
done

if [ -n "$doTeardown" ]; then
    printf "Tearing down...\n"
    stc teardown || exit 1
fi
