linkerd2/bin/test-run

104 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
function check_linkerd_binary(){
printf "Checking the linkerd binary..."
if [[ "$linkerd_path" != /* ]]; then
printf "\\n[%s] is not an absolute path\\n" "$linkerd_path"
exit 1
fi
if [ ! -x "$linkerd_path" ]; then
printf "\\n[%s] does not exist or is not executable\\n" "$linkerd_path"
exit 1
fi
exit_code=0
"$linkerd_path" version --client > /dev/null 2>&1 || exit_code=$?
if [ $exit_code -ne 0 ]; then
printf "\\nFailed to run linkerd version command\\n"
exit $exit_code
fi
printf "[ok]\\n"
}
function check_if_k8s_reachable(){
printf "Checking if there is a Kubernetes cluster available..."
exit_code=0
kubectl --context=$k8s_context --request-timeout=5s get ns > /dev/null 2>&1 || exit_code=$?
if [ $exit_code -ne 0 ]; then
printf "\\nFailed to connect to Kubernetes cluster\\n"
exit $exit_code
fi
printf "[ok]\\n"
}
function run_test(){
filename="$1"
shift
printf "Running test [%s] %s\\n" "$(basename "$filename")" "$@"
go test -v "$filename" --linkerd="$linkerd_path" --k8s-context="$k8s_context" --integration-tests "$@"
}
# Install the latest edge release.
# $1 - namespace to use for the edge release
function install_edge() {
tmp=$(mktemp -d -t l5dbin.XXX)
trap "rm -rf $tmp" EXIT
curl -s https://run.linkerd.io/install-edge | HOME=$tmp sh > /dev/null 2>&1
local linkerd_path=$tmp/.linkerd2/bin/linkerd
local edge_namespace="$1"
$linkerd_path install --linkerd-namespace="$edge_namespace" | kubectl apply -f - > /dev/null 2>&1
$linkerd_path check --linkerd-namespace="$edge_namespace" > /dev/null 2>&1
}
# Run the upgrade test by upgrading the most-recent edge release to the HEAD of
# this branch.
# $1 - namespace to use for the edge release
function run_upgrade_test() {
local edge_namespace="$1"
local edge_version=$(curl -s https://versioncheck.linkerd.io/version.json | grep -o "edge-[0-9]*.[0-9]*.[0-9]*")
printf "Installing release [%s] namespace [%s]\n" "$edge_version" "$edge_namespace"
install_edge $edge_namespace
printf "Upgrading release [%s] to [%s]\n" "$edge_version" "$linkerd_version"
run_test "$test_directory/install_test.go" --upgrade-from-version=$edge_version --linkerd-namespace=$edge_namespace --proxy-auto-inject || exit_code=$?
}
linkerd_path=$1
if [ -z "$linkerd_path" ]; then
echo "usage: $(basename "$0") /path/to/linkerd [namespace] [k8s-context]" >&2
exit 64
fi
bindir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
test_directory="$bindir/../test"
linkerd_version=$($linkerd_path version --client --short)
linkerd_namespace=${2:-l5d-integration}
k8s_context=${3:-""}
check_linkerd_binary
check_if_k8s_reachable
printf "==================RUNNING ALL TESTS==================\\n"
printf "Testing Linkerd version [%s] namespace [%s] k8s-context [%s]\\n" "$linkerd_version" "$linkerd_namespace" "$k8s_context"
exit_code=0
run_test "$test_directory/install_test.go" --linkerd-namespace=$linkerd_namespace || exit_code=$?
run_upgrade_test "$linkerd_namespace"-upgrade
for test in $(find "$test_directory" -mindepth 2 -name '*_test.go'); do
run_test "$test" --linkerd-namespace=$linkerd_namespace || exit_code=$?
done
if [ $exit_code -eq 0 ]; then
printf "\\n=== PASS: all tests passed\\n"
else
printf "\\n=== FAIL: at least one test failed\\n"
fi
exit $exit_code