From 2ea13cec8876904921955e61c3fa2bc38e3e15b6 Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Sun, 20 Dec 2020 22:35:28 +0200 Subject: [PATCH] Add Gloo e2e tests Signed-off-by: Stefan Prodan --- .github/workflows/e2e.yaml | 2 + test/gloo/install.sh | 31 ++++++++++ test/gloo/run.sh | 11 ++++ test/gloo/test-canary.sh | 113 +++++++++++++++++++++++++++++++++++++ test/istio/test-canary.sh | 1 - test/traefik/install.sh | 3 +- 6 files changed, 159 insertions(+), 2 deletions(-) create mode 100755 test/gloo/install.sh create mode 100755 test/gloo/run.sh create mode 100755 test/gloo/test-canary.sh diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index db1b10fd..851a57d7 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -17,6 +17,8 @@ jobs: - linkerd - contour - nginx + - traefik + - gloo steps: - name: Checkout uses: actions/checkout@v2 diff --git a/test/gloo/install.sh b/test/gloo/install.sh new file mode 100755 index 00000000..b68a6079 --- /dev/null +++ b/test/gloo/install.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +set -o errexit + +GLOO_VER="1.3.28" +REPO_ROOT=$(git rev-parse --show-toplevel) + +mkdir -p ${REPO_ROOT}/bin + +echo '>>> Installing Gloo' +kubectl create ns gloo-system +helm repo add gloo https://storage.googleapis.com/solo-public-helm +helm upgrade -i gloo gloo/gloo --version ${GLOO_VER} \ +--namespace gloo-system \ +--set discovery.enabled=true + +kubectl -n gloo-system rollout status deployment/gloo +kubectl -n gloo-system rollout status deployment/gateway +kubectl -n gloo-system get all + +echo '>>> Installing Flagger' +helm upgrade -i flagger ${REPO_ROOT}/charts/flagger \ +--set crd.create=false \ +--namespace gloo-system \ +--set prometheus.install=true \ +--set meshProvider=gloo + +kubectl -n gloo-system set image deployment/flagger flagger=test/flagger:latest + +kubectl -n gloo-system rollout status deployment/flagger +kubectl -n gloo-system rollout status deployment/flagger-prometheus diff --git a/test/gloo/run.sh b/test/gloo/run.sh new file mode 100755 index 00000000..67153fa9 --- /dev/null +++ b/test/gloo/run.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +set -o errexit + +REPO_ROOT=$(git rev-parse --show-toplevel) +DIR="$(cd "$(dirname "$0")" && pwd)" + +"$DIR"/install.sh + +"$REPO_ROOT"/test/workloads/init.sh +"$DIR"/test-canary.sh diff --git a/test/gloo/test-canary.sh b/test/gloo/test-canary.sh new file mode 100755 index 00000000..72ea019a --- /dev/null +++ b/test/gloo/test-canary.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash + +# This script runs e2e tests for Canary initialization, analysis and promotion + +set -o errexit + +REPO_ROOT=$(git rev-parse --show-toplevel) + +cat <>> Waiting for primary to be ready' +retries=50 +count=0 +ok=false +until ${ok}; do + kubectl -n test get canary/podinfo | grep 'Initialized' && ok=true || ok=false + sleep 5 + count=$(($count + 1)) + if [[ ${count} -eq ${retries} ]]; then + kubectl -n gloo-system logs deployment/flagger + echo "No more retries left" + exit 1 + fi +done + +echo '✔ Canary initialization test passed' + +echo '>>> Triggering canary deployment' +kubectl -n test set image deployment/podinfo podinfod=stefanprodan/podinfo:3.1.1 + +echo '>>> Waiting for canary promotion' +retries=50 +count=0 +ok=false +until ${ok}; do + kubectl -n test describe deployment/podinfo-primary | grep '3.1.1' && ok=true || ok=false + sleep 10 + kubectl -n gloo-system logs deployment/flagger --tail 1 + count=$(($count + 1)) + if [[ ${count} -eq ${retries} ]]; then + kubectl -n test describe deployment/podinfo + kubectl -n test describe deployment/podinfo-primary + kubectl -n test logs deployment/flagger-loadtester + kubectl -n gloo-system logs deployment/flagger + kubectl -n gloo-system get all + kubectl -n gloo-system get virtualservice podinfo -oyaml + echo "No more retries left" + exit 1 + fi +done + +echo '✔ Canary promotion test passed' diff --git a/test/istio/test-canary.sh b/test/istio/test-canary.sh index ecd51201..3c84296b 100755 --- a/test/istio/test-canary.sh +++ b/test/istio/test-canary.sh @@ -91,7 +91,6 @@ count=0 ok=false until ${ok}; do kubectl -n test get canary/podinfo | grep 'Initialized' && ok=true || ok=false - kubectl -n test get canary/podinfo-service | grep 'Initialized' && ok=true || ok=false sleep 5 count=$(($count + 1)) if [[ ${count} -eq ${retries} ]]; then diff --git a/test/traefik/install.sh b/test/traefik/install.sh index e238edd5..f3d1f677 100755 --- a/test/traefik/install.sh +++ b/test/traefik/install.sh @@ -12,7 +12,7 @@ kubectl create ns traefik echo '>>> Installing Traefik' helm repo add traefik https://helm.traefik.io/traefik -cat <>> Installing Flagger'