mirror of
https://github.com/kubernetes-sigs/prometheus-adapter.git
synced 2026-04-05 17:27:51 +00:00
Add initial e2e tests
This commit is contained in:
parent
b03cc3e7c8
commit
1145dbfe93
13 changed files with 537 additions and 0 deletions
134
test/run-e2e-tests.sh
Executable file
134
test/run-e2e-tests.sh
Executable file
|
|
@ -0,0 +1,134 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright 2022 The Kubernetes Authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
set -x
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
|
||||
# Tool versions
|
||||
K8S_VERSION=${KUBERNETES_VERSION:-v1.26.0} # cf https://hub.docker.com/r/kindest/node/tags
|
||||
KIND_VERSION=${KIND_VERSION:-v0.17.0} # cf https://github.com/kubernetes-sigs/kind/releases
|
||||
PROM_OPERATOR_VERSION=${PROM_OPERATOR_VERSION:-v0.62.0} # cf https://github.com/prometheus-operator/prometheus-operator/releases
|
||||
|
||||
# Variables; set to empty if unbound/empty
|
||||
REGISTRY=${REGISTRY:-}
|
||||
KIND_E2E=${KIND_E2E:-}
|
||||
SKIP_INSTALL=${SKIP_INSTALL:-}
|
||||
SKIP_CLEAN_AFTER=${SKIP_CLEAN_AFTER:-}
|
||||
CLEAN_BEFORE=${CLEAN_BEFORE:-}
|
||||
|
||||
# KUBECONFIG - will be overriden if a cluster is deployed with Kind
|
||||
KUBECONFIG=${KUBECONFIG:-"${HOME}/.kube/config"}
|
||||
|
||||
# A temporary directory used by the tests
|
||||
E2E_DIR="${PWD}/.e2e"
|
||||
|
||||
# The namespace where prometheus-adapter is deployed
|
||||
NAMESPACE="prometheus-adapter-e2e"
|
||||
|
||||
if [[ -z "${REGISTRY}" && -z "${KIND_E2E}" ]]; then
|
||||
echo -e "Either REGISTRY or KIND_E2E should be set."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
function clean {
|
||||
if [[ -n "${KIND_E2E}" ]]; then
|
||||
kind delete cluster || true
|
||||
else
|
||||
kubectl delete -f ./deploy/manifests || true
|
||||
kubectl delete -f ./test/prometheus-manifests || true
|
||||
kubectl delete namespace "${NAMESPACE}" || true
|
||||
fi
|
||||
|
||||
rm -rf "${E2E_DIR}"
|
||||
}
|
||||
|
||||
if [[ -n "${CLEAN_BEFORE}" ]]; then
|
||||
clean
|
||||
fi
|
||||
|
||||
function on_exit {
|
||||
local error_code="$?"
|
||||
|
||||
echo "Obtaining prometheus-adapter pod logs..."
|
||||
kubectl logs -l app.kubernetes.io/name=prometheus-adapter -n "${NAMESPACE}" || true
|
||||
|
||||
if [[ -z "${SKIP_CLEAN_AFTER}" ]]; then
|
||||
clean
|
||||
fi
|
||||
|
||||
test "${error_code}" == 0 && return;
|
||||
}
|
||||
trap on_exit EXIT
|
||||
|
||||
if [[ -d "${E2E_DIR}" ]]; then
|
||||
echo -e "${E2E_DIR} already exists."
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p "${E2E_DIR}"
|
||||
|
||||
if [[ -n "${KIND_E2E}" ]]; then
|
||||
# Install kubectl and kind, if we did not set SKIP_INSTALL
|
||||
if [[ -z "${SKIP_INSTALL}" ]]; then
|
||||
BIN="${E2E_DIR}/bin"
|
||||
mkdir -p "${BIN}"
|
||||
curl -Lo "${BIN}/kubectl" "https://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/linux/amd64/kubectl" && chmod +x "${BIN}/kubectl"
|
||||
curl -Lo "${BIN}/kind" "https://kind.sigs.k8s.io/dl/${KIND_VERSION}/kind-linux-amd64" && chmod +x "${BIN}/kind"
|
||||
export PATH="${BIN}:${PATH}"
|
||||
fi
|
||||
|
||||
kind create cluster --image "kindest/node:${K8S_VERSION}"
|
||||
|
||||
REGISTRY="localhost"
|
||||
|
||||
KUBECONFIG="${E2E_DIR}/kubeconfig"
|
||||
kind get kubeconfig > "${KUBECONFIG}"
|
||||
fi
|
||||
|
||||
# Create the test namespace
|
||||
kubectl create namespace "${NAMESPACE}"
|
||||
|
||||
export REGISTRY
|
||||
IMAGE_NAME="${REGISTRY}/prometheus-adapter-$(go env GOARCH)"
|
||||
IMAGE_TAG="v$(cat VERSION)"
|
||||
|
||||
if [[ -n "${KIND_E2E}" ]]; then
|
||||
make container
|
||||
kind load docker-image "${IMAGE_NAME}:${IMAGE_TAG}"
|
||||
else
|
||||
make push
|
||||
fi
|
||||
|
||||
# Install prometheus-operator
|
||||
kubectl apply -f "https://github.com/prometheus-operator/prometheus-operator/releases/download/${PROM_OPERATOR_VERSION}/bundle.yaml" --server-side
|
||||
|
||||
# Install and setup prometheus
|
||||
kubectl apply -f ./test/prometheus-manifests --server-side
|
||||
|
||||
# Customize prometheus-adapter manifests
|
||||
# TODO: use Kustomize or generate manifests from Jsonnet
|
||||
cp -r ./deploy/manifests "${E2E_DIR}/manifests"
|
||||
prom_url="http://prometheus.${NAMESPACE}.svc:9090/"
|
||||
sed -i -e "s|--prometheus-url=.*$|--prometheus-url=${prom_url}|g" "${E2E_DIR}/manifests/deployment.yaml"
|
||||
sed -i -e "s|image: .*$|image: ${IMAGE_NAME}:${IMAGE_TAG}|g" "${E2E_DIR}/manifests/deployment.yaml"
|
||||
find "${E2E_DIR}/manifests" -type f -exec sed -i -e "s|namespace: monitoring|namespace: ${NAMESPACE}|g" {} \;
|
||||
|
||||
# Deploy prometheus-adapter
|
||||
kubectl apply -f "${E2E_DIR}/manifests" --server-side
|
||||
|
||||
PROJECT_PREFIX="sigs.k8s.io/prometheus-adapter"
|
||||
export KUBECONFIG
|
||||
go test "${PROJECT_PREFIX}/test/e2e/" -v -count=1
|
||||
Loading…
Add table
Add a link
Reference in a new issue