Skip to content

Commit 036b20c

Browse files
authored
feat(test): better bats tests, install from latest tag and then update from master (#986)
1 parent 48aa102 commit 036b20c

File tree

8 files changed

+359
-39
lines changed

8 files changed

+359
-39
lines changed

.devcontainer/devcontainer.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@
2424
"version": "latest"
2525
},
2626
"ghcr.io/brokenpip3/devcontainers-bats/bats-libs:0": {
27+
},
28+
"ghcr.io/devcontainers/features/nix:1": {
29+
"multiUser": "false",
30+
"extraNixConfig": "experimental-features = nix-command flakes"
31+
},
32+
"ghcr.io/devcontainers/features/hugo:1": {
33+
"version": "v0.99.1"
2734
}
2835
},
2936
// "forwardPorts": [],

.github/workflows/auto-tests-bats.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ on:
1919
- 'backup/**'
2020
- '*.md'
2121

22+
#TODO: create a matrix per earch bats file
2223
jobs:
2324
run-tests:
2425
if: github.event.pull_request.draft == false

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,4 @@ result
101101
### website
102102
website/node_modules
103103
website/public
104+
website/.hugo_build.lock

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,10 @@ update-lts-version: ## Update the latest lts version
181181
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/e2e/test_utility.go
182182
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/helm/helm_test.go
183183
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' pkg/constants/constants.go
184+
#TODO: source the version from config.base.env for bats test, no need of hardcoded version
185+
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/bats/1-deploy.bats
186+
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/bats/2-deploy-with-more-options.bats
187+
sed -i 's|jenkins/jenkins:[0-9]\+.[0-9]\+.[0-9]\+|jenkins/jenkins:$(LATEST_LTS_VERSION)|g' test/bats/3-deploy-with-webhook.bats
184188

185189
.PHONY: run
186190
run: export WATCH_NAMESPACE = $(NAMESPACE)

flake.nix

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@
4242
})
4343
go_15_pkgs.go
4444
golangci_pkgs.golangci-lint
45+
46+
pkgs.kind
47+
(pkgs.bats.withLibraries (p: [
48+
p.bats-support
49+
p.bats-assert
50+
p.bats-file
51+
p.bats-detik
52+
]))
4553
];
4654
shellHook = ''
4755
echo Operator Version ${operatorVersion}

test/bats/1-deploy.bats

Lines changed: 87 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,24 @@ diag() {
77
echo "# DEBUG $@" >&3
88
}
99

10-
#bats test_tags=phase:setup
11-
@test "1.0 Create namespace" {
10+
#bats test_tags=phase:setup,scenario:vanilla
11+
@test "1.0 Init: create namespace" {
1212
${KUBECTL} get ns ${DETIK_CLIENT_NAMESPACE} && skip "Namespace ${DETIK_CLIENT_NAMESPACE} already exists"
1313
run ${KUBECTL} create ns ${DETIK_CLIENT_NAMESPACE}
1414
assert_success
1515
}
1616

17-
#bats test_tags=phase:helm
18-
@test "1.1 Vanilla install helm chart" {
17+
#bats test_tags=phase:setup,scenario:vanilla
18+
@test "1.1 Init: add helm chart repo" {
19+
${HELM} repo list|grep -qc jenkins-operator && skip "Jenkins repo already exists"
20+
upstream_url="https://raw.githubusercontent.com/jenkinsci/kubernetes-operator/master/chart"
21+
run ${HELM} repo add jenkins-operator $upstream_url
22+
assert_success
23+
assert_output '"jenkins-operator" has been added to your repositories'
24+
}
25+
26+
#bats test_tags=phase:helm,scenario:vanilla
27+
@test "1.2 Helm: vanilla install helm chart latest tagged version" {
1928
run echo ${DETIK_CLIENT_NAMESPACE}
2029
run echo ${OPERATOR_IMAGE}
2130
${HELM} status default && skip "Helm release 'default' already exists"
@@ -24,15 +33,16 @@ diag() {
2433
--set namespace=${DETIK_CLIENT_NAMESPACE} \
2534
--set operator.image=${OPERATOR_IMAGE} \
2635
--set jenkins.latestPlugins=true \
36+
--set jenkins.image="jenkins/jenkins:2.440.1-lts" \
2737
--set jenkins.backup.makeBackupBeforePodDeletion=false \
28-
chart/jenkins-operator
38+
jenkins-operator/jenkins-operator --version=$(cat ../../VERSION.txt | sed 's/v//')
2939
assert_success
3040
assert ${HELM} status default
3141
touch "chart/jenkins-operator/deploy.tmp"
3242
}
3343

34-
#bats test_tags=phase:helm
35-
@test "1.2 Helm: check Jenkins operator pods status" {
44+
#bats test_tags=phase:helm,scenario:vanilla
45+
@test "1.2 Helm: check Jenkins operator pods status" {
3646
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
3747
run verify "there is 1 deployment named 'default-jenkins-operator'"
3848
assert_success
@@ -44,8 +54,8 @@ diag() {
4454
assert_success
4555
}
4656

47-
#bats test_tags=phase:helm
48-
@test "1.3 Helm: check Jenkins Pod status" {
57+
#bats test_tags=phase:helm,scenario:vanilla
58+
@test "1.3 Helm: check Jenkins Pod status" {
4959
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
5060
run try "at most 20 times every 10s to get pods named 'jenkins-jenkins' and verify that '.status.containerStatuses[?(@.name==\"jenkins-master\")].ready' is 'true'"
5161
assert_success
@@ -54,8 +64,8 @@ diag() {
5464
assert_success
5565
}
5666

57-
#bats test_tags=phase:helm
58-
@test "1.4 Helm: check Jenkins service status" {
67+
#bats test_tags=phase:helm,scenario:vanilla
68+
@test "1.4 Helm: check Jenkins service status" {
5969
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
6070
run verify "there is 1 service named 'jenkins-operator-http-jenkins'"
6171
assert_success
@@ -64,8 +74,8 @@ diag() {
6474
assert_success
6575
}
6676

67-
#bats test_tags=phase:helm
68-
@test "1.5 Helm: check Jenkins configmaps created" {
77+
#bats test_tags=phase:helm,scenario:vanilla
78+
@test "1.5 Helm: check Jenkins configmaps created" {
6979
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
7080
run verify "there is 1 configmap named 'jenkins-operator-base-configuration-jenkins'"
7181
assert_success
@@ -75,44 +85,99 @@ diag() {
7585
assert_success
7686
}
7787

78-
#bats test_tags=phase:helm
79-
@test "1.6 Helm: check Jenkins operator role status" {
88+
#bats test_tags=phase:helm,scenario:vanilla
89+
@test "1.6 Helm: check Jenkins operator role status" {
8090
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
8191
run verify "there are 2 role named 'jenkins-operator*'"
8292
assert_success
8393
run verify "there is 1 role named 'leader-election-role'"
8494
assert_success
8595
}
8696

87-
#bats test_tags=phase:helm
88-
@test "1.7 Helm: check Jenkins operator role binding status" {
97+
#bats test_tags=phase:helm,scenario:vanilla
98+
@test "1.7 Helm: check Jenkins operator role binding status" {
8999
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
90100
run verify "there is 1 rolebinding named 'jenkins-operator-jenkins'"
91101
assert_success
92102
run verify "there is 1 rolebinding named 'leader-election-rolebinding'"
93103
assert_success
94104
}
95105

96-
#bats test_tags=phase:helm
97-
@test "1.8 Helm: check Jenkins operator service account status" {
106+
#bats test_tags=phase:helm,scenario:vanilla
107+
@test "1.8 Helm: check Jenkins operator service account status" {
98108
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
99109
run verify "there are 2 serviceaccount named 'jenkins-operator*'"
100110
assert_success
101111
}
102112

103-
#bats test_tags=phase:helm
104-
@test "1.9 Helm: check Jenkins crd" {
113+
#bats test_tags=phase:helm,scenario:vanilla
114+
@test "1.9 Helm: check Jenkins crd" {
105115
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
106116
run verify "there is 1 crd named 'jenkins.jenkins.io'"
107117
assert_success
108118
}
109119

110-
@test "1.9 Helm: Clean" {
120+
#bats test_tags=phase:helm,scenario:vanilla
121+
@test "1.10 Helm: upgrade from main branch same values" {
122+
run echo ${DETIK_CLIENT_NAMESPACE}
123+
run echo ${OPERATOR_IMAGE}
124+
run ${HELM} upgrade default \
125+
--set jenkins.namespace=${DETIK_CLIENT_NAMESPACE} \
126+
--set namespace=${DETIK_CLIENT_NAMESPACE} \
127+
--set operator.image=${OPERATOR_IMAGE} \
128+
--set jenkins.latestPlugins=true \
129+
--set jenkins.image="jenkins/jenkins:2.440.1-lts" \
130+
--set jenkins.backup.makeBackupBeforePodDeletion=false \
131+
chart/jenkins-operator
132+
assert_success
133+
assert ${HELM} status default
134+
}
135+
136+
#bats test_tags=phase:helm,scenario:vanilla
137+
@test "1.11 Helm: check Jenkins operator pods status again" {
138+
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
139+
run verify "there is 1 deployment named 'default-jenkins-operator'"
140+
assert_success
141+
142+
run verify "there is 1 pod named 'default-jenkins-operator-'"
143+
assert_success
144+
145+
run try "at most 20 times every 10s to get pods named 'default-jenkins-operator-' and verify that '.status.containerStatuses[?(@.name==\"jenkins-operator\")].ready' is 'true'"
146+
assert_success
147+
}
148+
149+
#bats test_tags=phase:helm,scenario:vanilla
150+
@test "1.12 Helm: check Jenkins operator pods status" {
151+
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
152+
run verify "there is 1 deployment named 'default-jenkins-operator'"
153+
assert_success
154+
155+
run verify "there is 1 pod named 'default-jenkins-operator-'"
156+
assert_success
157+
158+
run try "at most 20 times every 10s to get pods named 'default-jenkins-operator-' and verify that '.status.containerStatuses[?(@.name==\"jenkins-operator\")].ready' is 'true'"
159+
assert_success
160+
}
161+
162+
#bats test_tags=phase:helm,scenario:vanilla
163+
@test "1.13 Helm: check Jenkins Pod status" {
164+
[[ ! -f "chart/jenkins-operator/deploy.tmp" ]] && skip "Jenkins helm chart have not been deployed correctly"
165+
run try "at most 20 times every 10s to get pods named 'jenkins-jenkins' and verify that '.status.containerStatuses[?(@.name==\"jenkins-master\")].ready' is 'true'"
166+
assert_success
167+
168+
run try "at most 20 times every 5s to get pods named 'jenkins-jenkins' and verify that '.status.containerStatuses[?(@.name==\"jenkins-master\")].ready' is 'true'"
169+
assert_success
170+
}
171+
172+
#bats test_tags=phase:helm,scenario:vanilla
173+
@test "1.14 Helm: clean" {
111174
run ${HELM} uninstall default
112175
assert_success
113176
# Wait for the complete removal
114177
sleep 30
178+
115179
run verify "there is 0 pvc named 'jenkins backup'"
116180
assert_success
181+
117182
rm "chart/jenkins-operator/deploy.tmp"
118183
}

0 commit comments

Comments
 (0)