From 5eea7753b8d4ee1a97860a7bc361baa2b4ffffd4 Mon Sep 17 00:00:00 2001 From: Stavros Foteinopoulos Date: Tue, 28 Nov 2023 14:12:30 +0200 Subject: [PATCH] Introducing unit tests for helm chart Signed-off-by: Stavros Foteinopoulos --- .github/workflows/ci.yaml | 8 +++ .gitignore | 1 + charts/ingress-nginx/.helmignore | 1 + .../default-backend-extra-configmaps.yaml | 3 +- ...default-backend-extra-configmaps_test.yaml | 49 +++++++++++++++++++ 5 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 charts/ingress-nginx/tests/default-backend-extra-configmaps_test.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1203be01b..7af11c277 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -163,6 +163,14 @@ jobs: go-version: '1.21.3' check-latest: true + - name: Install Helm Unit Test Plugin + run: | + helm plugin install https://github.com/quintush/helm-unittest + + - name: Run Helm Unit Tests + run: | + helm unittest charts/ingress-nginx -d + - name: cache uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 with: diff --git a/.gitignore b/.gitignore index 60bf6a304..73108f627 100644 --- a/.gitignore +++ b/.gitignore @@ -61,3 +61,4 @@ cmd/plugin/release/*.tar.gz cmd/plugin/release/LICENSE tmp/ test/junitreports/ +tests/__snapshot__ diff --git a/charts/ingress-nginx/.helmignore b/charts/ingress-nginx/.helmignore index 50af03172..109b40811 100644 --- a/charts/ingress-nginx/.helmignore +++ b/charts/ingress-nginx/.helmignore @@ -20,3 +20,4 @@ .idea/ *.tmproj .vscode/ +__snapshot__ diff --git a/charts/ingress-nginx/templates/default-backend-extra-configmaps.yaml b/charts/ingress-nginx/templates/default-backend-extra-configmaps.yaml index 5d04043e3..88b59280b 100644 --- a/charts/ingress-nginx/templates/default-backend-extra-configmaps.yaml +++ b/charts/ingress-nginx/templates/default-backend-extra-configmaps.yaml @@ -1,10 +1,11 @@ {{- if .Values.defaultBackend.enabled }} {{- range .Values.defaultBackend.extraConfigMaps }} +--- apiVersion: v1 kind: ConfigMap metadata: name: {{ .name }} - namespace: {{ include "ingress-nginx.namespace" . }} + namespace: {{ include "ingress-nginx.namespace" $ | quote }} labels: {{- include "ingress-nginx.labels" $ | nindent 4 }} {{- with $.Values.defaultBackend.labels }} diff --git a/charts/ingress-nginx/tests/default-backend-extra-configmaps_test.yaml b/charts/ingress-nginx/tests/default-backend-extra-configmaps_test.yaml new file mode 100644 index 000000000..b18ceedfa --- /dev/null +++ b/charts/ingress-nginx/tests/default-backend-extra-configmaps_test.yaml @@ -0,0 +1,49 @@ +suite: test default backend extra ConfigMaps +templates: + - default-backend-extra-configmaps.yaml + +tests: + - it: should not create any ConfigMap by default + set: + Release.Namespace: default + defaultBackend.enabled: true + asserts: + - hasDocuments: + count: 0 + + - it: should create one ConfigMap + set: + Release.Namespace: default + defaultBackend.enabled: true + defaultBackend.extraConfigMaps: + - name: my-configmap-1 + data: + key1: value1 + asserts: + - hasDocuments: + count: 1 + - isKind: + of: ConfigMap + - equal: + path: metadata.name + value: my-configmap-1 + + - it: should correctly render multiple ConfigMaps + set: + Release.Namespace: nginx + defaultBackend.enabled: true + defaultBackend.extraConfigMaps: + - name: my-configmap-1 + data: + key1: value1 + - name: my-configmap-2 + data: + key2: value2 + asserts: + - hasDocuments: + count: 2 + - isKind: + of: ConfigMap + - matchRegex: + path: metadata.name + pattern: "my-configmap-\\d+"