Files
fission-src/test/run_test.sh
T
Rahul BhatiGitHubVishalsahil-lakhwaniagiwalpooja20abhisheks-infracloud
a68f3edcd4 Github Actions Workflows (#1876)
Co-authored-by: Vishal <vishal-biyani@users.noreply.github.com>
Co-authored-by: sahil-lakhwani <sahilakhwani@gmail.com>
Co-authored-by: agiwalpooja20 
Co-authored-by: abhisheks-infracloud
2020-12-17 19:00:44 +05:30

114 lines
4.2 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# This is a helper script to run test in parallel and collect logs.
# Usage:
# ./run_test.sh Run all tests.
# ./run_test.sh [test_file ...] Run specific tests.
#
# Environments:
# LOG_DIR Log directory path. (default: $ROOT/test/logs)
# JOBS The number of concurrent jobs. (default: 1)
# TIMEOUT Timeout for each job. (default: 0 (no timeout))
#
set -euo pipefail
source $(dirname $BASH_SOURCE)/init_tools.sh
ROOT=$(readlink -f $(dirname $0)/..)
LOG_DIR=${LOG_DIR:-$ROOT/test/logs}
JOBS=${JOBS:-1}
export FUNCTION_NAMESPACE=fission-function
export FISSION_NAMESPACE=fission
export FISSION_ROUTER=127.0.0.1:8888
export NODE_RUNTIME_IMAGE=fission/node-env-12.16:1.11.0
export NODE_BUILDER_IMAGE=fission/node-builder-12.16:1.11.0
export PYTHON_RUNTIME_IMAGE=fission/python-env
export PYTHON_BUILDER_IMAGE=fission/python-builder
export GO_RUNTIME_IMAGE=fission/go-env-1.12
export GO_BUILDER_IMAGE=fission/go-builder-1.12
export JVM_RUNTIME_IMAGE=fission/jvm-env
export JVM_BUILDER_IMAGE=fission/jvm-builder
export JVM_JERSEY_RUNTIME_IMAGE=fission/jvm-jersey-env
export JVM_JERSEY_BUILDER_IMAGE=fission/jvm-jersey-builder
export TS_RUNTIME_IMAGE=fission/tensorflow-serving-env
export CONTROLLER_IP=127.0.0.1:8889
export FISSION_NATS_STREAMING_URL=http://defaultFissionAuthToken@127.0.0.1:8890
echo "Pulling env and builder images"
docker pull $NODE_RUNTIME_IMAGE && kind load docker-image $NODE_RUNTIME_IMAGE --name kind
docker pull $NODE_BUILDER_IMAGE && kind load docker-image $NODE_BUILDER_IMAGE --name kind
docker system prune -a -f
docker pull $PYTHON_RUNTIME_IMAGE && kind load docker-image $PYTHON_RUNTIME_IMAGE --name kind
docker pull $PYTHON_BUILDER_IMAGE && kind load docker-image $PYTHON_BUILDER_IMAGE --name kind
docker pull $JVM_RUNTIME_IMAGE && kind load docker-image $JVM_RUNTIME_IMAGE --name kind
docker pull $JVM_BUILDER_IMAGE && kind load docker-image $JVM_BUILDER_IMAGE --name kind
docker system prune -a -f
docker pull $JVM_JERSEY_RUNTIME_IMAGE && kind load docker-image $JVM_JERSEY_RUNTIME_IMAGE --name kind
docker pull $JVM_JERSEY_BUILDER_IMAGE && kind load docker-image $JVM_JERSEY_BUILDER_IMAGE --name kind
docker pull $GO_RUNTIME_IMAGE && kind load docker-image $GO_RUNTIME_IMAGE --name kind
docker pull $GO_BUILDER_IMAGE && kind load docker-image $GO_BUILDER_IMAGE --name kind
docker system prune -a -f
docker pull $TS_RUNTIME_IMAGE && kind load docker-image $TS_RUNTIME_IMAGE --name kind
echo "Successfully pull env and builder images"
main() {
if [ $# -eq 0 ]; then
args=$(find_executable $ROOT/test/tests -iname 'test_*')
else
args="$@"
fi
num_skip=0
mkdir -p $LOG_DIR
test_files=""
log_files=""
for arg in $args; do
if [ ! -f $arg ]; then
echo "WARNING: file not found: $arg"
continue
fi
absolute_path=$(readlink -f $arg)
relative_path=${absolute_path#$ROOT/test/tests/}
log_path=$LOG_DIR/${relative_path}.log
if grep -q "^#test:disabled" $arg; then
echo "INFO: the test is marked disabled: $relative_path"
num_skip=$((num_skip+1))
continue
fi
# make sure the log dir exists.
mkdir -p $(dirname $log_path)
# remove common path for readability
test_files="$test_files ${absolute_path#$PWD/}"
log_files="$log_files ${log_path#$PWD/}"
done
start_time=$(date +%s)
parallel \
--retries 8 \
--joblog - \
--jobs $JOBS \
--timeout $TIMEOUT \
bash -c '{1} > {2} 2>&1' \
::: $test_files :::+ $log_files \
| tee $LOG_DIR/_recap \
|| true
end_time=$(date +%s)
# Get the Exitval in _recap to find if any test failed.
num_total=$(cat $LOG_DIR/_recap | wc -l)
num_total=$((num_total - 1)) # don't count header
num_fail=$(cat $LOG_DIR/_recap | awk 'NR>1 && $7!=0 {print $0}' | wc -l | tr -d ' ')
num_pass=$((num_total - num_fail))
time=$((end_time - start_time))
echo ============================================================
echo "PASS: $num_pass FAIL: $num_fail SKIP: $num_skip TIME: ${time}s"
FAILURES=$((FAILURES+$num_fail))
}
docker system prune -a -f
main "$@"