#!/usr/bin/env bash

# **exercise.sh**

# Keep track of the current DevStack directory.
TOP_DIR=$(cd $(dirname "$0") && pwd)

# Import common functions
source $TOP_DIR/functions

# Load local configuration
source $TOP_DIR/stackrc

# Run everything in the exercises/ directory that isn't explicitly disabled

# comma separated list of script basenames to skip
# to refrain from exercising euca.sh use ``SKIP_EXERCISES=euca``
SKIP_EXERCISES=${SKIP_EXERCISES:-""}

# comma separated list of script basenames to run
# to run only euca.sh use ``RUN_EXERCISES=euca``
basenames=${RUN_EXERCISES:-""}

EXERCISE_DIR=$TOP_DIR/exercises

if [[ -z "${basenames}" ]]; then
    # Locate the scripts we should run
    basenames=$(for b in `ls $EXERCISE_DIR/*.sh`; do basename $b .sh; done)
else
    # If ``RUN_EXERCISES`` was specified, ignore ``SKIP_EXERCISES``.
    SKIP_EXERCISES=
fi

# Track the state of each script
passes=""
failures=""
skips=""

# Loop over each possible script (by basename)
for script in $basenames; do
    if [[ ,$SKIP_EXERCISES, =~ ,$script, ]]; then
        skips="$skips $script"
    else
        echo "====================================================================="
        echo Running $script
        echo "====================================================================="
        $EXERCISE_DIR/$script.sh
        exitcode=$?
        if [[ $exitcode == 55 ]]; then
            skips="$skips $script"
        elif [[ $exitcode -ne 0 ]]; then
            failures="$failures $script"
        else
            passes="$passes $script"
        fi
    fi
done

# Output status of exercise run
echo "====================================================================="
for script in $skips; do
    echo SKIP $script
done
for script in $passes; do
    echo PASS $script
done
for script in $failures; do
    echo FAILED $script
done
echo "====================================================================="

if [[ -n "$failures" ]]; then
    exit 1
fi
