From 4682cea41f57d97db949b3320d5048ef5d557800 Mon Sep 17 00:00:00 2001 From: iwilltry42 Date: Mon, 27 Jan 2020 16:13:00 +0100 Subject: [PATCH] add tests --- tests/common.sh | 85 +++++++++++++++++++++++++++++++++++++++++++++ tests/dind.sh | 32 +++++++++++++++++ tests/runner.sh | 22 ++++++++++++ tests/test_basic.sh | 23 ++++++++++++ 4 files changed, 162 insertions(+) create mode 100755 tests/common.sh create mode 100755 tests/dind.sh create mode 100755 tests/runner.sh create mode 100755 tests/test_basic.sh diff --git a/tests/common.sh b/tests/common.sh new file mode 100755 index 00000000..94009aa9 --- /dev/null +++ b/tests/common.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +RED='\033[1;31m' +GRN='\033[1;32m' +YEL='\033[1;33m' +BLU='\033[1;34m' +WHT='\033[1;37m' +MGT='\033[1;95m' +CYA='\033[1;96m' +END='\033[0m' +BLOCK='\033[1;37m' + +PATH=/usr/local/bin:$PATH +export PATH + +log() { >&2 printf "${BLOCK}>>>${END} $1\n"; } + +info() { log "${BLU}$1${END}"; } +highlight() { log "${MGT}$1${END}"; } + +bye() { + log "${BLU}$1... exiting${END}" + exit 0 +} + +warn() { log "${RED}!!! WARNING !!! $1 ${END}"; } + +abort() { + log "${RED}FATAL: $1${END}" + exit 1 +} + +command_exists() { + command -v $1 >/dev/null 2>&1 +} + +failed() { + if [ -z "$1" ] ; then + log "${RED}failed!!!${END}" + else + log "${RED}$1${END}" + fi + abort "test failed" +} + +passed() { + if [ -z "$1" ] ; then + log "${GRN}done!${END}" + else + log "${GRN}$1${END}" + fi +} + +dump_registries_yaml_in() { + for cluster in $@ ; do + info "registries.yaml in cluster $cluster:" + docker exec -t k3d-$cluster-server cat /etc/rancher/k3s/registries.yaml + done +} + +# checks that a URL is available, with an optional error message +check_url() { + command_exists curl || abort "curl is not installed" + curl -L --silent -k --output /dev/null --fail "$1" +} + +check_k3d_clusters() { + [ -n "$EXE" ] || abort "EXE is not defined" + for c in "c1" "c2" ; do + kc=$($EXE get-kubeconfig --name "$c") + [ -n "$kc" ] || abort "could not obtain a kubeconfig for $c" + if kubectl --kubeconfig="$kc" cluster-info ; then + passed "cluster $c is reachable (with kubeconfig=$kc)" + else + warn "could not obtain cluster info for $c (with kubeconfig=$kc). Contents:\n$(cat $kc)" + return 1 + fi + done + return 0 +} + +check_registry() { + check_url $REGISTRY/v2/_catalog +} + diff --git a/tests/dind.sh b/tests/dind.sh new file mode 100755 index 00000000..456e69d7 --- /dev/null +++ b/tests/dind.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +K3D_EXE=${EXE:-/bin/k3d} +K3D_IMAGE_TAG=$1 + +# define E2E_KEEP to non-empty for keeping the e2e runner container after running the tests +E2E_KEEP=${E2E_KEEP:-} + +#################################################################################### + +TIMESTAMP=$(date "+%m%d%H%M%S") + +k3de2e=$(docker run -d \ + -v "$(pwd)"/tests:/tests \ + --privileged \ + -e EXE="$K3D_EXE" \ + -e CI="true" \ + --name "k3d-e2e-runner-$TIMESTAMP" \ + k3d:$K3D_IMAGE_TAG) + +sleep 5 # wait 5 seconds for docker to start + +# Execute tests +finish() { + docker stop "$k3de2e" || /bin/true + if [ -z "$E2E_KEEP" ] ; then + docker rm "$k3de2e" || /bin/true + fi +} +trap finish EXIT + +docker exec "$k3de2e" /tests/runner.sh diff --git a/tests/runner.sh b/tests/runner.sh new file mode 100755 index 00000000..f3f3e10e --- /dev/null +++ b/tests/runner.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +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; } + +# shellcheck source=./common.sh +source "$CURR_DIR/common.sh" + +######################################################################################### + +[ -n "$EXE" ] || abort "no EXE provided" + +info "Starting e2e tests..." + +for i in $CURR_DIR/test_*.sh ; do + base=$(basename $i .sh) + highlight "***** Running $base *****" + $i || abort "test $base failed" +done + +exit 0 + diff --git a/tests/test_basic.sh b/tests/test_basic.sh new file mode 100755 index 00000000..9086d4d2 --- /dev/null +++ b/tests/test_basic.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +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; } + +# shellcheck source=./common.sh +source "$CURR_DIR/common.sh" + +info "Creating two clusters..." +$EXE create --wait 60 --name "c1" --api-port 6443 || failed "could not create cluster c1" +$EXE create --wait 60 --name "c2" --api-port 6444 || failed "could not create cluster c2" + +info "Checking we have access to both clusters..." +check_k3d_clusters "c1" "c2" || failed "error checking cluster" +dump_registries_yaml_in "c1" "c2" + +info "Deleting clusters..." +$EXE delete --name "c1" || failed "could not delete the cluster c1" +$EXE delete --name "c2" || failed "could not delete the cluster c2" + +exit 0 + +