diff --git a/.circleci/config.yml b/.circleci/config.yml index f9164539..73c5e87f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -18,6 +18,15 @@ jobs: - run: test/e2e-build.sh supergloo:test.supergloo-system - run: test/e2e-tests.sh canary + e2e-gloo-testing: + machine: true + steps: + - checkout + - run: test/e2e-kind.sh + - run: test/e2e-gloo.sh + - run: test/e2e-gloo-build.sh + - run: test/e2e-gloo-tests.sh + e2e-nginx-testing: machine: true steps: diff --git a/test/e2e-gloo-build.sh b/test/e2e-gloo-build.sh new file mode 100755 index 00000000..8799082d --- /dev/null +++ b/test/e2e-gloo-build.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +set -o errexit + +REPO_ROOT=$(git rev-parse --show-toplevel) +export KUBECONFIG="$(kind get kubeconfig-path --name="kind")" + +echo '>>> Building Flagger' +cd ${REPO_ROOT} && docker build -t test/flagger:latest . -f Dockerfile + +echo '>>> Installing Flagger' +kind load docker-image test/flagger:latest + +echo '>>> Installing Flagger' +helm upgrade -i flagger ${REPO_ROOT}/charts/flagger \ +--wait \ +--namespace gloo-system \ +--set prometheus.install=true \ +--set meshProvider=gloo + +# Give flagger permissions for gloo objects +kubectl create clusterrolebinding flagger-gloo --clusterrole=gloo-role-gateway --serviceaccount=gloo-system:flagger + +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/e2e-gloo-tests.sh b/test/e2e-gloo-tests.sh new file mode 100755 index 00000000..33ea0341 --- /dev/null +++ b/test/e2e-gloo-tests.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +# This script runs e2e tests for Canary initialization, analysis and promotion +# Prerequisites: Kubernetes Kind, Helm and NGINX ingress controller + +set -o errexit + +REPO_ROOT=$(git rev-parse --show-toplevel) +export KUBECONFIG="$(kind get kubeconfig-path --name="kind")" + +echo '>>> Creating test namespace' +kubectl create namespace test + +echo ">>> Downloading Gloo CLI" +curl -SsL https://github.com/solo-io/gloo/releases/download/v0.13.25/glooctl-linux-amd64 > glooctl +chmod +x glooctl + +echo '>>> Installing load tester' +kubectl -n test apply -f ${REPO_ROOT}/artifacts/loadtester/ +kubectl -n test rollout status deployment/flagger-loadtester + +echo '>>> Initialising canary' +kubectl apply -f ${REPO_ROOT}/test/e2e-workload.yaml +./glooctl add route --path-prefix / --upstream-group-name podinfo --upstream-group-namespace test + +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' diff --git a/test/e2e-gloo.sh b/test/e2e-gloo.sh new file mode 100755 index 00000000..430cb983 --- /dev/null +++ b/test/e2e-gloo.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +set -o errexit + +REPO_ROOT=$(git rev-parse --show-toplevel) +export KUBECONFIG="$(kind get kubeconfig-path --name="kind")" + +echo ">>> Installing Helm" +# curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash + +echo '>>> Installing Tiller' +kubectl --namespace kube-system create sa tiller +kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller +helm init --service-account tiller --upgrade --wait +helm repo add gloo https://storage.googleapis.com/solo-public-helm + +echo '>>> Installing Gloo' +helm upgrade -i gloo gloo/gloo --version 0.13.25 \ +--wait \ +--namespace gloo-system \ +--set gatewayProxies.gateway-proxy.service.type=NodePort + +kubectl -n gloo-system rollout status deployment/gloo +kubectl -n gloo-system rollout status deployment/gateway-proxy +kubectl -n gloo-system get all