#!/bin/bash
shopt -s nullglob # nullglob expands non-matching globs to zero arguments, rather than to themselves -> empty array when used to get array of filepaths
CURR_DIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " >/dev/null 2>& 1 && pwd ) "
[ -d " $CURR_DIR " ] || {
echo "FATAL: no current dir (maybe running in zsh?)"
exit 1
}
: " ${ E2E_INCLUDE : = "" } "
: " ${ E2E_EXCLUDE : = "" } "
: " ${ E2E_EXTRA : = "" } "
: " ${ E2E_PARALLEL : = "4" } "
export CURRENT_STAGE = "Runner"
# shellcheck disable=SC1091
source " $CURR_DIR /common.sh "
#########################################################################################
[ -n " $EXE " ] || abort "no EXE provided"
info "Checking test environment..."
$EXE runtime-info
info "Preparing filesystem and environment..."
export KUBECONFIG_ROOT = " $HOME /.kube "
mkdir -p " $KUBECONFIG_ROOT "
export TEST_OUTPUT_DIR = " $HOME " /testoutput
mkdir -p " $TEST_OUTPUT_DIR "
info " Start time inside runner: $( date) "
function run_tests( ) {
local section_name = " $1 "
local prefix = " $2 "
local test_files = ( " $CURR_DIR / $prefix " *".sh" )
section " $section_name ( $CURR_DIR / $prefix *.sh) "
num_total_tests = ${# test_files [@] }
local included_tests = ( )
local excluded_tests = ( )
for i in " ${ test_files [@] } " ; do
local base
base = $( basename " $i " .sh)
local skip = false
local included = false
local excluded = false
# prepare to skip test, if it's in the exclusion list
for excludetest in " ${ E2E_EXCLUDE [@] } " ; do
[ [ " $excludetest " = ~ ( ^| ) ${ base } ( $| ) ] ] && excluded = true
done
# (re-)add test to list, if it's on inclusion list
for includetest in " ${ E2E_INCLUDE [@] } " ; do
[ [ " $includetest " = ~ ( ^| ) ${ base } ( $| ) ] ] && included = true
done
if [ [ -z " ${ E2E_INCLUDE } " ] ] ; then # no explicit include list given
if $excluded ; then # test is on explicit exclude list
skip = true
fi
else
if $included && $excluded ; then # test is in both lists, so we include it
warn " Test ${ base } is in both, exclude and include list. Include list takes precedence. "
skip = false
fi
if ! $included ; then # test is not in include list -> skip
skip = true
fi
fi
# skip or run test
if [ " $skip " = true ] ; then
highlight " ***** Skipping $base ***** "
excluded_tests += ( " $i " )
else
included_tests += ( " $i " )
fi
done
local num_included_tests = ${# included_tests [@] }
local num_excluded_tests = ${# excluded_tests [@] }
#
# Run Tests
#
local max_batch_size = $E2E_PARALLEL
local current_batch_size = 0
local current_batch_number = 1
local total_batch_number = $(( ( num_included_tests + ( max_batch_size - 1 )) / max_batch_size) )
info " Running $num_included_tests tests in $total_batch_number batches à max. $max_batch_size tests. "
info " Starting test batch # $current_batch_number / $total_batch_number ... "
for t in " ${ included_tests [@] } " ; do
if [ [ current_batch_size -eq max_batch_size ] ] ; then
info " Waiting for test batch # $current_batch_number / $total_batch_number to finish... "
current_batch_size = 0
wait
( ( current_batch_number = current_batch_number + 1) )
info " Starting test batch # $current_batch_number / $total_batch_number ... "
fi
local base
base = $( basename " $t " .sh)
highlight " ***** Running $base ***** "
( ( current_batch_size = current_batch_size + 1) )
" $t " &
done
wait
# Output logs of failed tests
local failed_logs = ( " $TEST_OUTPUT_DIR / $prefix " *".failed" )
local num_failed_tests = ${# failed_logs [@] }
if [ [ num_failed_tests -gt 0 ] ] ; then
warn " FAILED LOGS: ${ failed_logs [*] } "
for f in " ${ failed_logs [@] } " ; do
info " FAILED -> $f "
local base
base = $( basename " $f " ".log.failed" )
log " ${ RED } *************************************************** ${ END } "
log " ${ RED } *** Failed Test ${ base %%.* } ${ END } "
log " ${ RED } *************************************************** ${ END } "
cat " $f "
done
fi
# Info Output about Test Results
info " FINISHED $section_name ${ END }
> ${ WHT } Total:\t $num_total_tests ${ END }
> ${ BLU } Run:\t $num_included_tests ${ END }
> ${ YEL } Skipped:\t $num_excluded_tests ${ END }
> ${ GRN } Passed:\t $(( num_included_tests - num_failed_tests)) ${ END }
> ${ RED } Failed:\t $num_failed_tests ${ END } "
# Error out if we encountered any failed test
if [ [ num_failed_tests -gt 0 ] ] ; then
warn " Failed $section_name : $num_failed_tests "
exit 1
fi
}
###############
# Basic Tests #
###############
run_tests "BASIC TESTS" "test_"
###############
# Extra Tests #
###############
if [ [ -n " $E2E_EXTRA " ] ] ; then
run_tests "EXTRA TESTS" "extra_test_"
else
info "NOT running EXTRA tests, please set E2E_EXTRA=1 if you wish to do so"
fi
exit 0