From 769a939f771a771bd64d6a594ed4d249cc3c5426 Mon Sep 17 00:00:00 2001 From: Zhou Hao Date: Wed, 18 Nov 2020 14:10:03 +0800 Subject: [PATCH] add UT for chart with unknown field Signed-off-by: Zhou Hao --- cmd/helm/install_test.go | 7 +++++ cmd/helm/template_test.go | 6 ++++ .../output/install-chart-unknown-field.txt | 1 + .../output/template-chart-unknown-field.txt | 2 ++ .../testcharts/chart-unknown-field/Chart.yaml | 8 ++++++ .../testcharts/chart-unknown-field/README.md | 13 +++++++++ .../chart-unknown-field/extra_values.yaml | 2 ++ .../chart-unknown-field/more_values.yaml | 2 ++ .../templates/alpine-pod.yaml | 28 +++++++++++++++++++ .../chart-unknown-field/values.yaml | 1 + 10 files changed, 70 insertions(+) create mode 100644 cmd/helm/testdata/output/install-chart-unknown-field.txt create mode 100644 cmd/helm/testdata/output/template-chart-unknown-field.txt create mode 100644 cmd/helm/testdata/testcharts/chart-unknown-field/Chart.yaml create mode 100644 cmd/helm/testdata/testcharts/chart-unknown-field/README.md create mode 100644 cmd/helm/testdata/testcharts/chart-unknown-field/extra_values.yaml create mode 100644 cmd/helm/testdata/testcharts/chart-unknown-field/more_values.yaml create mode 100644 cmd/helm/testdata/testcharts/chart-unknown-field/templates/alpine-pod.yaml create mode 100644 cmd/helm/testdata/testcharts/chart-unknown-field/values.yaml diff --git a/cmd/helm/install_test.go b/cmd/helm/install_test.go index 6892fcd86..0f147dd0e 100644 --- a/cmd/helm/install_test.go +++ b/cmd/helm/install_test.go @@ -201,6 +201,13 @@ func TestInstall(t *testing.T) { name: "install chart with only crds", cmd: "install crd-test testdata/testcharts/chart-with-only-crds --namespace default", }, + // Install, chart with unknown field + { + name: "install chart with unknown field", + cmd: "install unknownfield testdata/testcharts/chart-unknown-field", + wantError: true, + golden: "output/install-chart-unknown-field.txt", + }, } runTestActionCmd(t, tests) diff --git a/cmd/helm/template_test.go b/cmd/helm/template_test.go index 6f7ca939d..f1c6ecaae 100644 --- a/cmd/helm/template_test.go +++ b/cmd/helm/template_test.go @@ -121,6 +121,12 @@ func TestTemplateCmd(t *testing.T) { wantError: true, golden: "output/template-with-invalid-yaml-debug.txt", }, + { + name: "chart with template with unknown field", + cmd: fmt.Sprintf("template '%s' --validate --output-dir '%s'", "testdata/testcharts/chart-unknown-field", "output/dump"), + wantError: true, + golden: "output/template-chart-unknown-field.txt", + }, } runTestCmd(t, tests) } diff --git a/cmd/helm/testdata/output/install-chart-unknown-field.txt b/cmd/helm/testdata/output/install-chart-unknown-field.txt new file mode 100644 index 000000000..f9d6c5db2 --- /dev/null +++ b/cmd/helm/testdata/output/install-chart-unknown-field.txt @@ -0,0 +1 @@ +Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: ValidationError(Pod.spec): unknown field "invalidKey" in io.k8s.api.core.v1.PodSpec diff --git a/cmd/helm/testdata/output/template-chart-unknown-field.txt b/cmd/helm/testdata/output/template-chart-unknown-field.txt new file mode 100644 index 000000000..6f340a88c --- /dev/null +++ b/cmd/helm/testdata/output/template-chart-unknown-field.txt @@ -0,0 +1,2 @@ +wrote output/dump/alpine/templates/alpine-pod.yaml +Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: ValidationError(Pod.spec): unknown field "invalidKey" in io.k8s.api.core.v1.PodSpec diff --git a/cmd/helm/testdata/testcharts/chart-unknown-field/Chart.yaml b/cmd/helm/testdata/testcharts/chart-unknown-field/Chart.yaml new file mode 100644 index 000000000..1d6bad825 --- /dev/null +++ b/cmd/helm/testdata/testcharts/chart-unknown-field/Chart.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +appVersion: "3.9" +description: Deploy a basic Alpine Linux pod +home: https://helm.sh/helm +name: alpine +sources: +- https://github.com/helm/helm +version: 0.1.0 diff --git a/cmd/helm/testdata/testcharts/chart-unknown-field/README.md b/cmd/helm/testdata/testcharts/chart-unknown-field/README.md new file mode 100644 index 000000000..05d39dbbc --- /dev/null +++ b/cmd/helm/testdata/testcharts/chart-unknown-field/README.md @@ -0,0 +1,13 @@ +# Alpine: A simple Helm chart + +Run a single pod of Alpine Linux. + +This example was generated using the command `helm create alpine`. + +The `templates/` directory contains a very simple pod resource with a +couple of parameters. + +The `values.yaml` file contains the default values for the +`alpine-pod.yaml` template. + +You can install this example using `helm install ./alpine`. diff --git a/cmd/helm/testdata/testcharts/chart-unknown-field/extra_values.yaml b/cmd/helm/testdata/testcharts/chart-unknown-field/extra_values.yaml new file mode 100644 index 000000000..468bbacbc --- /dev/null +++ b/cmd/helm/testdata/testcharts/chart-unknown-field/extra_values.yaml @@ -0,0 +1,2 @@ +test: + Name: extra-values diff --git a/cmd/helm/testdata/testcharts/chart-unknown-field/more_values.yaml b/cmd/helm/testdata/testcharts/chart-unknown-field/more_values.yaml new file mode 100644 index 000000000..3d21e1fed --- /dev/null +++ b/cmd/helm/testdata/testcharts/chart-unknown-field/more_values.yaml @@ -0,0 +1,2 @@ +test: + Name: more-values diff --git a/cmd/helm/testdata/testcharts/chart-unknown-field/templates/alpine-pod.yaml b/cmd/helm/testdata/testcharts/chart-unknown-field/templates/alpine-pod.yaml new file mode 100644 index 000000000..cb3bac8de --- /dev/null +++ b/cmd/helm/testdata/testcharts/chart-unknown-field/templates/alpine-pod.yaml @@ -0,0 +1,28 @@ +apiVersion: v1 +kind: Pod +metadata: + name: "{{.Release.Name}}-{{.Values.Name}}" + labels: + # The "app.kubernetes.io/managed-by" label is used to track which tool + # deployed a given chart. It is useful for admins who want to see what + # releases a particular tool is responsible for. + app.kubernetes.io/managed-by: {{.Release.Service | quote }} + # The "app.kubernetes.io/instance" convention makes it easy to tie a release + # to all of the Kubernetes resources that were created as part of that + # release. + app.kubernetes.io/instance: {{.Release.Name | quote }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + # This makes it easy to audit chart usage. + helm.sh/chart: "{{.Chart.Name}}-{{.Chart.Version}}" + values: {{.Values.Name}} +spec: + # This shows how to use a simple value. This will look for a passed-in value + # called restartPolicy. If it is not found, it will use the default value. + # {{default "Never" .restartPolicy}} is a slightly optimized version of the + # more conventional syntax: {{.restartPolicy | default "Never"}} + restartPolicy: {{default "Never" .Values.restartPolicy}} + containers: + - name: waiter + image: "alpine:{{ .Chart.AppVersion }}" + command: ["/bin/sleep","9000"] + invalidKey: invalidValue diff --git a/cmd/helm/testdata/testcharts/chart-unknown-field/values.yaml b/cmd/helm/testdata/testcharts/chart-unknown-field/values.yaml new file mode 100644 index 000000000..807e12aea --- /dev/null +++ b/cmd/helm/testdata/testcharts/chart-unknown-field/values.yaml @@ -0,0 +1 @@ +Name: my-alpine