Skip to content

Commit 99c6c72

Browse files
committed
test(chart): test extra scripts import when import as sub-chart
[deploy] Signed-off-by: Viet Nguyen Duc <[email protected]>
1 parent 7662ace commit 99c6c72

File tree

11 files changed

+225
-11
lines changed

11 files changed

+225
-11
lines changed

.github/workflows/helm-chart-release.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ jobs:
1818
- name: Checkout
1919
uses: actions/checkout@main
2020
with:
21+
persist-credentials: false
2122
fetch-depth: 0
2223

2324
- name: Configure Git
@@ -28,6 +29,18 @@ jobs:
2829
- name: Get chart release notes (chart_release_notes.md)
2930
run: ./generate_chart_changelog.sh HEAD
3031

32+
- name: Commit files
33+
run: |
34+
git config --local user.email "[email protected]"
35+
git config --local user.name "Selenium CI Bot"
36+
git commit -m "Update tag in docs and files" -a
37+
38+
- name: Push changes
39+
uses: ad-m/github-push-action@master
40+
with:
41+
github_token: ${{ secrets.SELENIUM_CI_TOKEN }}
42+
branch: trunk
43+
3144
- name: Run chart-releaser
3245
uses: helm/chart-releaser-action@main
3346
with:

charts/selenium-grid/README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,11 @@ By default, ingress is enabled without annotations set. If NGINX ingress control
225225

226226
To make the user experience better, there are few annotations will be set by default if NGINX ingress controller is used. Mostly relates to timeouts and buffer sizes.
227227

228-
If you are not using NGINX ingress controller, you can disable these default annotations by setting `ingress.nginx` to `nil` (aka null) via Helm CLI `--set ingress.nginx=null`) or via an override-values.yaml as below:
228+
If you are not using NGINX ingress controller, you can disable these default annotations by setting `ingress.nginx` to `nil` (aka null) via Helm CLI `--set ingress.nginx=!`) or via an override-values.yaml as below:
229229

230230
```yaml
231231
ingress:
232-
nginx:
233-
# nginx: null (alternative way)
232+
nginx: !
234233
```
235234

236235
Similarly, if you want to disable a sub-config of `ingress.nginx`. For example: `--set ingress.nginx.proxyBuffer=null`)

tests/charts/bootstrap.sh

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,33 @@ python -m pip install pyyaml==6.0.1 \
1212
| grep -v 'Requirement already satisfied'
1313

1414
cd ..
15+
1516
helm template dummy --values tests/charts/templates/render/dummy.yaml \
16-
--set-file 'nodeConfigMap.extraScripts.nodePreStop\.sh=tests/charts/templates/render/dummy_external.sh' \
17-
--set-file 'recorderConfigMap.extraScripts.video\.sh=tests/charts/templates/render/dummy_external.sh' \
18-
--set-file 'recorderConfigMap.extraScripts.video_graphQLQuery\.sh=tests/charts/templates/render/dummy_external.sh' \
19-
--set-file 'recorderConfigMap.extraScripts.newInsertScript\.sh=tests/charts/templates/render/dummy_external.sh' \
20-
--set-file 'uploaderConfigMap.extraScripts.upload\.sh=tests/charts/templates/render/dummy_external.sh' \
21-
--set-file 'uploaderConfigMap.secretFiles.upload\.conf=tests/charts/templates/render/dummy_external.sh' \
17+
--set-file 'nodeConfigMap.extraScripts.setFromCommand\.sh=tests/charts/templates/render/dummy_external.sh' \
18+
--set-file 'recorderConfigMap.extraScripts.setFromCommand\.sh=tests/charts/templates/render/dummy_external.sh' \
19+
--set-file 'uploaderConfigMap.extraScripts.setFromCommand\.sh=tests/charts/templates/render/dummy_external.sh' \
2220
charts/selenium-grid > ./tests/tests/dummy_template_manifests.yaml
2321

2422
python tests/charts/templates/test.py "./tests/tests/dummy_template_manifests.yaml" dummy
25-
ret_code=$?
23+
if [ $? -ne 0 ]; then
24+
echo "Failed to validate the chart"
25+
exit 1
26+
fi
27+
28+
helm dependency update tests/charts/umbrella-charts
29+
helm dependency build tests/charts/umbrella-charts
30+
31+
helm template dummy --values tests/charts/templates/render/dummy_solution.yaml \
32+
--set-file 'selenium-grid.nodeConfigMap.extraScripts.setFromCommand\.sh=tests/charts/templates/render/dummy_external.sh' \
33+
--set-file 'selenium-grid.recorderConfigMap.extraScripts.setFromCommand\.sh=tests/charts/templates/render/dummy_external.sh' \
34+
--set-file 'selenium-grid.uploaderConfigMap.extraScripts.setFromCommand\.sh=tests/charts/templates/render/dummy_external.sh' \
35+
tests/charts/umbrella-charts > ./tests/tests/dummy_solution_template_manifests.yaml
36+
37+
python tests/charts/templates/test.py "./tests/tests/dummy_solution_template_manifests.yaml" dummy
38+
if [ $? -ne 0 ]; then
39+
echo "Failed to validate the umbrella chart"
40+
exit 1
41+
fi
2642

2743
if [ "${CI:-false}" = "false" ]; then
2844
deactivate

tests/charts/templates/render/dummy.yaml

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ ingress:
3131
proxyTimeout: 360 # Set different proxy timout
3232
proxyBuffer:
3333
# size: 512M # Keep using sub-config default
34-
number: # Disable sub-config
34+
number: ! # Disable sub-config
3535
annotations: # Add you own annotations
3636
nginx.ingress.kubernetes.io/use-regex: "true" # Add new key
3737
nginx.ingress.kubernetes.io/rewrite-target: /$2
@@ -87,6 +87,7 @@ videoRecorder:
8787
enabled: true
8888
uploader:
8989
enabled: true
90+
name: s3
9091
destinationPrefix: "s3://bucket-name"
9192
secrets:
9293
RCLONE_CONFIG_S3_TYPE: "s3"
@@ -97,3 +98,21 @@ videoRecorder:
9798
RCLONE_CONFIG_S3_ACL: "private"
9899
RCLONE_CONFIG_S3_ACCESS_KEY_ID: "xxx"
99100
RCLONE_CONFIG_S3_SECRET_ACCESS_KEY: "xxx"
101+
102+
nodeConfigMap:
103+
extraScripts:
104+
nodeCustomTask.sh: |
105+
#!/bin/bash
106+
echo "This is a custom task"
107+
108+
recorderConfigMap:
109+
extraScripts:
110+
video.sh: |
111+
#!/bin/bash
112+
echo "This is override script"
113+
114+
uploaderConfigMap:
115+
extraScripts:
116+
upload.sh: |
117+
#!/bin/bash
118+
echo "This is override script"
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
# This is dummy values file for chart template testing
2+
global:
3+
K8S_PUBLIC_IP: "10.10.10.10"
4+
seleniumGrid:
5+
logLevel: FINE
6+
affinity: &affinity
7+
podAffinity:
8+
requiredDuringSchedulingIgnoredDuringExecution:
9+
- labelSelector:
10+
matchExpressions:
11+
- key: app
12+
operator: In
13+
values:
14+
- selenium
15+
topologyKey: "kubernetes.io/hostname"
16+
17+
selenium-grid:
18+
autoscaling:
19+
enableWithExistingKEDA: true
20+
scalingType: deployment
21+
22+
basicAuth:
23+
username: sysadmin
24+
password: strongPassword
25+
26+
tls:
27+
enabled: true
28+
generateTLS: false
29+
30+
ingress:
31+
nginx:
32+
proxyTimeout: 360 # Set different proxy timout
33+
proxyBuffer:
34+
# size: 512M # Keep using sub-config default
35+
number: ! # Disable sub-config
36+
annotations: # Add you own annotations
37+
nginx.ingress.kubernetes.io/use-regex: "true" # Add new key
38+
nginx.ingress.kubernetes.io/rewrite-target: /$2
39+
nginx.ingress.kubernetes.io/app-root: &gridAppRoot "/selenium"
40+
nginx.ingress.kubernetes.io/proxy-connect-timeout: "3600" # Override default key
41+
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # Override default key
42+
hostname: ""
43+
ports:
44+
http: 8081
45+
https: 8443
46+
paths:
47+
- path: /selenium(/|$)(.*)
48+
pathType: ImplementationSpecific
49+
backend:
50+
service:
51+
name: '{{ ternary (include "seleniumGrid.router.fullname" $ ) (include "seleniumGrid.hub.fullname" $ ) $.Values.isolateComponents }}'
52+
port:
53+
number: 4444
54+
- path: /(/?)(session/.*/se/vnc)
55+
pathType: ImplementationSpecific
56+
backend:
57+
service:
58+
name: '{{ ternary (include "seleniumGrid.router.fullname" $ ) (include "seleniumGrid.hub.fullname" $ ) $.Values.isolateComponents }}'
59+
port:
60+
number: 4444
61+
62+
isolateComponents: true
63+
64+
components:
65+
subPath: *gridAppRoot
66+
disableUI: true
67+
router:
68+
serviceType: NodePort
69+
distributor:
70+
serviceType: NodePort
71+
eventBus:
72+
serviceType: NodePort
73+
sessionQueue:
74+
serviceType: NodePort
75+
sessionMap:
76+
serviceType: NodePort
77+
78+
chromeNode:
79+
affinity: *affinity
80+
81+
firefoxNode:
82+
affinity: *affinity
83+
84+
edgeNode:
85+
affinity: *affinity
86+
87+
videoRecorder:
88+
enabled: true
89+
uploader:
90+
enabled: true
91+
destinationPrefix: "s3://bucket-name"
92+
secrets:
93+
RCLONE_CONFIG_S3_TYPE: "s3"
94+
RCLONE_CONFIG_S3_PROVIDER: "AWS"
95+
RCLONE_CONFIG_S3_ENV_AUTH: "true"
96+
RCLONE_CONFIG_S3_REGION: "ap-southeast-1"
97+
RCLONE_CONFIG_S3_LOCATION_CONSTRAINT: "ap-southeast-1"
98+
RCLONE_CONFIG_S3_ACL: "private"
99+
RCLONE_CONFIG_S3_ACCESS_KEY_ID: "xxx"
100+
RCLONE_CONFIG_S3_SECRET_ACCESS_KEY: "xxx"
101+
102+
nodeConfigMap:
103+
extraScripts:
104+
nodeCustomTask.sh: |
105+
#!/bin/bash
106+
echo "This is a custom task"
107+
108+
recorderConfigMap:
109+
extraScripts:
110+
video.sh: |
111+
#!/bin/bash
112+
echo "This is override script"
113+
114+
uploaderConfigMap:
115+
extraScripts:
116+
upload.sh: |
117+
#!/bin/bash
118+
echo "This is override script"

tests/charts/templates/test.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,41 @@ def test_all_metadata_name_is_prefixed_with_release_name(self):
135135
self.assertTrue(doc['metadata']['name'].startswith(RELEASE_NAME),
136136
f"Metadata name {doc['metadata']['name']} is not prefixed with RELEASE NAME: {RELEASE_NAME}")
137137

138+
def test_extra_script_import_to_node_configmap(self):
139+
resources_name = ['{0}-selenium-node-config'.format(RELEASE_NAME)]
140+
count = 0
141+
for doc in LIST_OF_DOCUMENTS:
142+
if doc['metadata']['name'] in resources_name and doc['kind'] == 'ConfigMap':
143+
logger.info(f"Assert default file is imported to Node ConfigMap")
144+
self.assertTrue(doc['data']['nodeProbe.sh'] is not None)
145+
self.assertTrue(doc['data']['nodePreStop.sh'] is not None)
146+
self.assertTrue(doc['data']['nodeCustomTask.sh'] is not None)
147+
self.assertTrue(doc['data']['setFromCommand.sh'] is not None)
148+
count += 1
149+
self.assertEqual(count, len(resources_name), "No node config resources found")
150+
151+
def test_extra_script_import_to_uploader_configmap(self):
152+
resources_name = ['{0}-selenium-uploader-config'.format(RELEASE_NAME)]
153+
count = 0
154+
for doc in LIST_OF_DOCUMENTS:
155+
if doc['metadata']['name'] in resources_name and doc['kind'] == 'ConfigMap':
156+
logger.info(f"Assert extra script is imported to Uploader ConfigMap")
157+
self.assertTrue(doc['data']['upload.sh'] is not None)
158+
self.assertTrue(doc['data']['setFromCommand.sh'] is not None)
159+
count += 1
160+
self.assertEqual(count, len(resources_name), "No uploader config resources found")
161+
162+
def test_extra_script_import_to_recorder_configmap(self):
163+
resources_name = ['{0}-selenium-recorder-config'.format(RELEASE_NAME)]
164+
count = 0
165+
for doc in LIST_OF_DOCUMENTS:
166+
if doc['metadata']['name'] in resources_name and doc['kind'] == 'ConfigMap':
167+
logger.info(f"Assert extra script is imported to Recorder ConfigMap")
168+
self.assertTrue(doc['data']['video.sh'] is not None)
169+
self.assertTrue(doc['data']['setFromCommand.sh'] is not None)
170+
count += 1
171+
self.assertEqual(count, len(resources_name), "No recorder config resources found")
172+
138173
if __name__ == '__main__':
139174
failed = False
140175
try:
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
charts
2+
Chart.lock
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.git/
2+
.gitignore
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: v2
2+
name: umbrella-charts
3+
description: A Helm chart for Umbrella Chart Test
4+
type: application
5+
version: 0.0.1
6+
appVersion: "1.0.0"
7+
dependencies:
8+
- name: selenium-grid
9+
version: 0.28.1
10+
repository: file://../../../charts/selenium-grid

tests/charts/umbrella-charts/templates/NOTES.txt

Whitespace-only changes.

tests/charts/umbrella-charts/values.yaml

Whitespace-only changes.

0 commit comments

Comments
 (0)