Skip to content

Commit 280192a

Browse files
committed
Add e2e tests for ServerSideApply
Add end-to-end tests to verify the ServerSideApply field works correctly for install, upgrade, and rollback operations. The tests verify that when serverSideApply is set, the Helm release uses the SSA apply method (apply_method: ssa in the release secret). Signed-off-by: cappyzawa <[email protected]>
1 parent 0926e40 commit 280192a

File tree

5 files changed

+172
-0
lines changed

5 files changed

+172
-0
lines changed

.github/workflows/e2e.yaml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,80 @@ jobs:
6363
kubectl -n helm-system wait helmreleases/podinfo-git --for=condition=ready --timeout=4m
6464
kubectl -n helm-system wait helmreleases/podinfo-oci --for=condition=ready --timeout=4m
6565
kubectl -n helm-system delete -f config/testdata/podinfo
66+
- name: Run server-side apply test
67+
run: |
68+
test_name=server-side-apply
69+
kubectl -n helm-system apply -f config/testdata/$test_name/install.yaml
70+
kubectl -n helm-system wait helmreleases/$test_name --for=condition=ready --timeout=4m
71+
72+
# Verify the release is deployed with SSA.
73+
APPLY_METHOD=$(kubectl -n helm-system get secret sh.helm.release.v1.$test_name.v1 -o jsonpath='{.data.release}' | base64 -d | base64 -d | gunzip | jq -r '.apply_method')
74+
if [ "$APPLY_METHOD" != "ssa" ]; then
75+
echo -e "Unexpected apply method: $APPLY_METHOD (expected: ssa)"
76+
exit 1
77+
fi
78+
79+
# Upgrade with SSA.
80+
kubectl -n helm-system apply -f config/testdata/$test_name/upgrade.yaml
81+
kubectl -n helm-system wait helmreleases/$test_name --for=condition=ready --timeout=4m
82+
83+
# Validate release was upgraded.
84+
REVISION_COUNT=$(helm -n helm-system history -o json $test_name | jq 'length')
85+
if [ "$REVISION_COUNT" != 2 ]; then
86+
echo -e "Unexpected revision count: $REVISION_COUNT"
87+
exit 1
88+
fi
89+
90+
kubectl -n helm-system delete -f config/testdata/$test_name/install.yaml
91+
- name: Run server-side apply rollback test
92+
run: |
93+
test_name=server-side-apply-rollback
94+
kubectl -n helm-system apply -f config/testdata/server-side-apply/rollback-install.yaml
95+
kubectl -n helm-system wait helmreleases/$test_name --for=condition=ready --timeout=4m
96+
97+
# Verify the release is deployed with SSA.
98+
APPLY_METHOD=$(kubectl -n helm-system get secret sh.helm.release.v1.$test_name.v1 -o jsonpath='{.data.release}' | base64 -d | base64 -d | gunzip | jq -r '.apply_method')
99+
if [ "$APPLY_METHOD" != "ssa" ]; then
100+
echo -e "Unexpected apply method: $APPLY_METHOD (expected: ssa)"
101+
exit 1
102+
fi
103+
104+
# Upgrade with failing config to trigger rollback.
105+
kubectl -n helm-system apply -f config/testdata/server-side-apply/rollback-upgrade.yaml
106+
echo -n ">>> Waiting for rollback"
107+
count=0
108+
until [ 'true' == "$( kubectl -n helm-system get helmrelease/$test_name -o json | jq '.status.conditions | map( { (.type): .status } ) | add | .Released=="False" and .Ready=="False" and .Remediated=="True"' )" ]; do
109+
echo -n '.'
110+
sleep 5
111+
count=$((count + 1))
112+
if [[ ${count} -eq 24 ]]; then
113+
echo ' No more retries left!'
114+
exit 1
115+
fi
116+
done
117+
echo ' done'
118+
119+
# Validate rollback happened with SSA (revision 3 = rollback to 1).
120+
HISTORY=$(helm -n helm-system history -o json $test_name)
121+
REVISION_COUNT=$(echo "$HISTORY" | jq 'length')
122+
if [ "$REVISION_COUNT" != 3 ]; then
123+
echo -e "Unexpected revision count: $REVISION_COUNT"
124+
exit 1
125+
fi
126+
LAST_REVISION_DESCRIPTION=$(echo "$HISTORY" | jq -r 'last | .description')
127+
if [ "$LAST_REVISION_DESCRIPTION" != "Rollback to 1" ]; then
128+
echo -e "Unexpected last revision description: $LAST_REVISION_DESCRIPTION"
129+
exit 1
130+
fi
131+
132+
# Verify the rollback release used SSA.
133+
APPLY_METHOD=$(kubectl -n helm-system get secret sh.helm.release.v1.$test_name.v3 -o jsonpath='{.data.release}' | base64 -d | base64 -d | gunzip | jq -r '.apply_method')
134+
if [ "$APPLY_METHOD" != "ssa" ]; then
135+
echo -e "Unexpected apply method after rollback: $APPLY_METHOD (expected: ssa)"
136+
exit 1
137+
fi
138+
139+
kubectl -n helm-system delete -f config/testdata/server-side-apply/rollback-install.yaml
66140
- name: Run dependency tests
67141
run: |
68142
kubectl -n helm-system apply -f config/testdata/dependencies
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: helm.toolkit.fluxcd.io/v2
2+
kind: HelmRelease
3+
metadata:
4+
name: server-side-apply
5+
spec:
6+
interval: 5m
7+
install:
8+
serverSideApply: true
9+
chart:
10+
spec:
11+
chart: podinfo
12+
version: '>=6.0.0 <7.0.0'
13+
sourceRef:
14+
kind: HelmRepository
15+
name: podinfo
16+
interval: 1m
17+
values:
18+
resources:
19+
requests:
20+
cpu: 100m
21+
memory: 64Mi
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: helm.toolkit.fluxcd.io/v2
2+
kind: HelmRelease
3+
metadata:
4+
name: server-side-apply-rollback
5+
spec:
6+
interval: 30s
7+
install:
8+
serverSideApply: true
9+
chart:
10+
spec:
11+
chart: podinfo
12+
version: '>=6.0.0 <7.0.0'
13+
sourceRef:
14+
kind: HelmRepository
15+
name: podinfo
16+
interval: 10m
17+
values:
18+
resources:
19+
requests:
20+
cpu: 100m
21+
memory: 64Mi
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
apiVersion: helm.toolkit.fluxcd.io/v2
2+
kind: HelmRelease
3+
metadata:
4+
name: server-side-apply-rollback
5+
spec:
6+
interval: 30s
7+
install:
8+
serverSideApply: true
9+
upgrade:
10+
serverSideApply: enabled
11+
remediation:
12+
remediateLastFailure: true
13+
rollback:
14+
serverSideApply: enabled
15+
chart:
16+
spec:
17+
chart: podinfo
18+
version: '>=6.0.0 <7.0.0'
19+
sourceRef:
20+
kind: HelmRepository
21+
name: podinfo
22+
interval: 10m
23+
values:
24+
resources:
25+
requests:
26+
cpu: 100m
27+
memory: 64Mi
28+
# Make wait fail to trigger rollback
29+
replicaCount: 2
30+
faults:
31+
unready: true
32+
timeout: 3s
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
apiVersion: helm.toolkit.fluxcd.io/v2
2+
kind: HelmRelease
3+
metadata:
4+
name: server-side-apply
5+
spec:
6+
interval: 5m
7+
install:
8+
serverSideApply: true
9+
upgrade:
10+
serverSideApply: enabled
11+
chart:
12+
spec:
13+
chart: podinfo
14+
version: '>=6.0.0 <7.0.0'
15+
sourceRef:
16+
kind: HelmRepository
17+
name: podinfo
18+
interval: 1m
19+
values:
20+
resources:
21+
requests:
22+
cpu: 100m
23+
memory: 64Mi
24+
replicaCount: 2

0 commit comments

Comments
 (0)