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