Skip to content

Commit

Permalink
test: add e2e testing
Browse files Browse the repository at this point in the history
jkoelker committed Jan 10, 2020
1 parent e32c903 commit c9b3971
Showing 5 changed files with 168 additions and 1 deletion.
2 changes: 1 addition & 1 deletion staging/cert-manager-setup/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: v1
name: cert-manager-setup
home: https://github.com/mesosphere/charts
version: 0.1.6
version: 0.1.7
appVersion: 0.10.1
description: Install cert-manager and optionally add a ClusterIssuer
keywords:
5 changes: 5 additions & 0 deletions staging/cert-manager-setup/ci/test-values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
clusterissuer:
name: kubernetes-ca
spec:
ca:
secretName: kubernetes-intermediate-ca
38 changes: 38 additions & 0 deletions test/ct-e2e.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
debug: true
target-branch: dev
chart-dirs:
- stable
- staging
excluded-charts:
- common
- dex-controller # Moved to a different helm repo
- azuredisk-csi-driver # DCOS-62804
- defaultstorageclass # DCOS-62803
- dispatch # DCOS-62802
- gcpdiskprovisioner # DCOS-62801
- kommander # DCOS-62800
- kommander-karma # DCOS-62799
- kommander-thanos # DCOS-62798
- mtls-proxy # DCOS-62805
- dex-k8s-authenticator # DCOS-62806
- flagger # DCOS-62809
- gatekeeper # DCOS-62810
- generic-ingress # DCOS-62811
- istio # DCOS-62812
- knative # DCOS-62813
- kube-oidc-proxy # DCOS-62814
- kudo # DCOS-62815
- nvidia # DCOS-62816
- prometheus-operator # DCOS-62817
- traefik # DCOS-62818
- traefik-forward-auth # DCOS-62819
chart-repos:
- mesosphere-staging=https://mesosphere.github.io/charts/staging
- mesosphere-stable=https://mesosphere.github.io/charts/stable
- kubefed-charts=https://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/charts
- jetstack-charts=https://charts.jetstack.io
- kommander-cluster-lifecycle=https://mesosphere.github.io/kommander-cluster-lifecycle/charts
- banzaicloud=https://kubernetes-charts.banzaicloud.com
- helm-stable=https://kubernetes-charts.storage.googleapis.com/
- dex-controller=https://mesosphere.github.io/dex-controller/charts
helm-extra-args: --timeout 600
119 changes: 119 additions & 0 deletions test/e2e-kind.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
#!/usr/bin/env bash

set -o errexit
set -o nounset
set -o pipefail

readonly CT_VERSION=v2.4.0
readonly KIND_VERSION=v0.6.1
readonly CLUSTER_NAME=chart-testing
readonly K8S_VERSION=v1.16.3

tmp=$(mktemp -d)

run_ct_container() {
echo 'Running ct container...'
docker run --rm --interactive --detach --network host --name ct \
--volume "$(pwd)/test/ct-e2e.yaml:/etc/ct/ct.yaml" \
--volume "$(pwd):/workdir" \
--workdir /workdir \
"quay.io/helmpack/chart-testing:$CT_VERSION" \
cat
echo
}

cleanup() {
echo 'Removing ct container...'
docker kill ct > /dev/null 2>&1
"${tmp}/kind" delete cluster --name "$CLUSTER_NAME"
rm -rf "${tmp}"
echo 'Done!'
}

docker_exec() {
docker exec --interactive ct "$@"
}

create_kind_cluster() {
echo 'Downloading kind...'

curl -sSLo "${tmp}/kind" \
"https://github.com/kubernetes-sigs/kind/releases/download/$KIND_VERSION/kind-$(uname)-amd64"
chmod +x "${tmp}/kind"

"${tmp}/kind" create cluster --name "$CLUSTER_NAME" \
--config test/kind-config.yaml --image "kindest/node:$K8S_VERSION" \
--wait 60s

docker_exec mkdir -p /root/.kube

echo 'Copying kubeconfig to container...'
"${tmp}/kind" get kubeconfig --name "$CLUSTER_NAME" > "${tmp}/kube.config"
docker cp "${tmp}/kube.config" ct:/root/.kube/config

docker_exec kubectl cluster-info
echo

docker_exec kubectl get nodes
echo

echo 'Cluster ready!'
echo
}

install_local-path-provisioner() {
# kind doesn't support Dynamic PVC provisioning yet, this is one ways to
# get it working
# https://github.com/rancher/local-path-provisioner

# Remove default storage class. It will be recreated by
# local-path-provisioner
docker_exec kubectl delete storageclass standard

echo 'Installing local-path-provisioner...'
docker_exec kubectl apply -f \
https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
echo
}

install_tiller() {
echo 'Installing tiller...'
docker_exec kubectl --namespace kube-system create serviceaccount tiller
docker_exec kubectl create clusterrolebinding tiller-cluster-rule \
--clusterrole=cluster-admin --serviceaccount=kube-system:tiller
docker_exec helm init --history-max 10 --service-account tiller --wait
echo
}

install_certmanager() {
echo 'Generating root ca...'
docker_exec apk add openssl
docker_exec openssl genrsa -out /tmp/ca.key 4096
docker_exec openssl req -x509 -new -nodes -key /tmp/ca.key \
-sha256 -days 1 -out /tmp/ca.crt -subj "/CN=testing"
echo

echo 'Installing cert-manager...'
docker_exec kubectl create namespace cert-manager
docker_exec kubectl create secret tls kubernetes-root-ca \
--namespace=cert-manager --cert=/tmp/ca.crt --key=/tmp/ca.key
docker_exec helm install \
--values staging/cert-manager-setup/ci/test-values.yaml \
--namespace cert-manager staging/cert-manager-setup
echo
}

main() {
run_ct_container
trap cleanup EXIT

create_kind_cluster
install_local-path-provisioner
install_tiller
install_certmanager

docker_exec ct lint-and-install --upgrade --debug "$@"
echo
}

main "$@"
5 changes: 5 additions & 0 deletions test/kind-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker

0 comments on commit c9b3971

Please sign in to comment.