forked from fluxcd/source-controller
-
Notifications
You must be signed in to change notification settings - Fork 0
/
e2e.sh
executable file
·138 lines (110 loc) · 5.18 KB
/
e2e.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/usr/bin/env bash
set -eoux pipefail
CREATE_CLUSTER="${CREATE_CLUSTER:-true}"
KIND_CLUSTER_NAME="${KIND_CLUSTER_NAME:-kind}"
LOAD_IMG_INTO_KIND="${LOAD_IMG_INTO_KIND:-true}"
BUILD_PLATFORM="${BUILD_PLATFORM:-linux/amd64}"
MINIO_HELM_VER="${MINIO_HELM_VER:-v6.3.1}"
# Older tags do not bundle multiple architectures. Newer tags are 5-6 times larger.
MINIO_TAG="${MINIO_TAG:-RELEASE.2020-09-17T04-49-20Z}"
IMG=test/source-controller
TAG=latest
MC_RELEASE=mc.RELEASE.2021-12-16T23-38-39Z
MC_AMD64_SHA256=d14302bbdaa180a073c1627ff9fbf55243221e33d47e32df61a950f635810978
MC_ARM64_SHA256=00791995bf8d102e3159e23b3af2f5e6f4c784fafd88c60161dcf3f0169aa217
ROOT_DIR="$(git rev-parse --show-toplevel)"
BUILD_DIR="${ROOT_DIR}/build"
if "${CREATE_CLUSTER}"; then
KIND_CLUSTER_NAME="flux-${RANDOM}"
export KUBECONFIG="${ROOT_DIR}/build/kindconfig"
echo "Spinning up flux kind cluster"
kind create cluster --name "${KIND_CLUSTER_NAME}" --kubeconfig "${KUBECONFIG}"
fi
function cleanup(){
EXIT_CODE="$?"
# only dump all logs if an error has occurred
if [ ${EXIT_CODE} -ne 0 ]; then
kubectl -n kube-system describe pods
kubectl -n source-system describe pods
kubectl -n source-system get gitrepositories -oyaml
kubectl -n source-system get helmrepositories -oyaml
kubectl -n source-system get helmcharts -oyaml
kubectl -n source-system get all
kubectl -n source-system logs deploy/source-controller
kubectl -n minio get all
kubectl -n minio describe pods
else
echo "All E2E tests passed!"
fi
if "${CREATE_CLUSTER}"; then
echo "Delete cluster"
kind delete cluster --name "${KIND_CLUSTER_NAME}"
fi
exit ${EXIT_CODE}
}
trap cleanup EXIT
kubectl wait node "${KIND_CLUSTER_NAME}-control-plane" --for=condition=ready --timeout=2m
echo "Build, load image into kind and deploy controller"
make docker-build IMG="${IMG}" TAG="${TAG}" BUILD_PLATFORMS="${BUILD_PLATFORM}" BUILD_ARGS=--load
if "${LOAD_IMG_INTO_KIND}"; then
kind load docker-image --name "${KIND_CLUSTER_NAME}" "${IMG}":"${TAG}"
fi
make dev-deploy IMG="${IMG}" TAG="${TAG}"
echo "Run smoke tests"
kubectl -n source-system apply -f "${ROOT_DIR}/config/samples"
kubectl -n source-system rollout status deploy/source-controller --timeout=1m
kubectl -n source-system wait gitrepository/gitrepository-sample --for=condition=ready --timeout=1m
kubectl -n source-system wait helmrepository/helmrepository-sample --for=condition=ready --timeout=1m
kubectl -n source-system wait helmchart/helmchart-sample --for=condition=ready --timeout=1m
kubectl -n source-system delete -f "${ROOT_DIR}/config/samples"
echo "Run HelmChart values file tests"
kubectl -n source-system apply -f "${ROOT_DIR}/config/testdata/helmchart-valuesfile"
kubectl -n source-system wait helmchart/podinfo --for=condition=ready --timeout=5m
kubectl -n source-system wait helmchart/podinfo-git --for=condition=ready --timeout=5m
kubectl -n source-system delete -f "${ROOT_DIR}/config/testdata/helmchart-valuesfile"
echo "Setup Minio"
kubectl create ns minio
helm repo add minio https://helm.min.io/
helm upgrade minio minio/minio --wait -i \
--version "${MINIO_HELM_VER}" \
--namespace minio \
--set accessKey=myaccesskey \
--set secretKey=mysecretkey \
--set resources.requests.memory=128Mi \
--set persistence.enable=false \
--set image.tag="${MINIO_TAG}"
kubectl -n minio port-forward svc/minio 9000:9000 &>/dev/null &
sleep 2
if [ ! -f "${BUILD_DIR}/mc" ]; then
MC_SHA256="${MC_AMD64_SHA256}"
ARCH="amd64"
if [ "${BUILD_PLATFORM}" = "linux/arm64" ]; then
MC_SHA256="${MC_ARM64_SHA256}"
ARCH="arm64"
fi
mkdir -p "${BUILD_DIR}"
curl -o "${BUILD_DIR}/mc" -LO "https://dl.min.io/client/mc/release/linux-${ARCH}/archive/${MC_RELEASE}"
if ! echo "${MC_SHA256} ${BUILD_DIR}/mc" | sha256sum --check; then
echo "Checksum failed for mc."
rm "${BUILD_DIR}/mc"
exit 1
fi
chmod +x "${BUILD_DIR}/mc"
fi
"${BUILD_DIR}/mc" alias set minio http://localhost:9000 myaccesskey mysecretkey --api S3v4
kubectl -n source-system apply -f "${ROOT_DIR}/config/testdata/minio/secret.yaml"
echo "Run Bucket tests"
"${BUILD_DIR}/mc" mb minio/podinfo
"${BUILD_DIR}/mc" mirror "${ROOT_DIR}/config/testdata/minio/manifests/" minio/podinfo
kubectl -n source-system apply -f "${ROOT_DIR}/config/testdata/bucket/source.yaml"
kubectl -n source-system wait bucket/podinfo --for=condition=ready --timeout=1m
echo "Run HelmChart from Bucket tests"
"${BUILD_DIR}/mc" mb minio/charts
"${BUILD_DIR}/mc" mirror "${ROOT_DIR}/controllers/testdata/charts/helmchart/" minio/charts/helmchart
kubectl -n source-system apply -f "${ROOT_DIR}/config/testdata/helmchart-from-bucket/source.yaml"
kubectl -n source-system wait bucket/charts --for=condition=ready --timeout=1m
kubectl -n source-system wait helmchart/helmchart-bucket --for=condition=ready --timeout=1m
echo "Run large Git repo tests"
kubectl -n source-system apply -f "${ROOT_DIR}/config/testdata/git/large-repo.yaml"
kubectl -n source-system wait gitrepository/large-repo-go-git --for=condition=ready --timeout=2m
kubectl -n source-system wait gitrepository/large-repo-libgit2 --for=condition=ready --timeout=2m