From 34a93d77cb87da2c45b45457203494c7f9866a37 Mon Sep 17 00:00:00 2001 From: Haoyuan Ge Date: Thu, 23 Jan 2020 07:33:19 -0600 Subject: [PATCH] Verify kubernetesVersion when running 'package verify'. (#1296) --- pkg/kudoctl/cmd/verify/verify.go | 20 ++++++++++++++++ pkg/kudoctl/cmd/verify/verify_test.go | 33 +++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/pkg/kudoctl/cmd/verify/verify.go b/pkg/kudoctl/cmd/verify/verify.go index 43463d761..936d1a184 100644 --- a/pkg/kudoctl/cmd/verify/verify.go +++ b/pkg/kudoctl/cmd/verify/verify.go @@ -8,11 +8,13 @@ import ( "github.com/kudobuilder/kudo/pkg/kudoctl/packages/verifier" "github.com/kudobuilder/kudo/pkg/kudoctl/packages/verifier/task" "github.com/kudobuilder/kudo/pkg/kudoctl/packages/verifier/template" + "github.com/kudobuilder/kudo/pkg/version" ) var verifiers = []verifier.PackageVerifier{ DuplicateVerifier{}, InvalidCharVerifier{";,"}, + K8sVersionVerifier{}, task.ReferenceVerifier{}, template.ParametersVerifier{}, template.ReferenceVerifier{}, @@ -61,3 +63,21 @@ func (v InvalidCharVerifier) Verify(pf *packages.Files) verifier.Result { return res } + +// K8sVersionVerifier verifies the kubernetesVersion of operator.yaml +type K8sVersionVerifier struct{} + +func (K8sVersionVerifier) Verify(pf *packages.Files) verifier.Result { + res := verifier.NewResult() + if pf.Operator == nil { + res.AddErrors("Operator not defined.") + return res + } + _, err := version.New(pf.Operator.KubernetesVersion) + if err != nil { + res.AddErrors(fmt.Sprintf("Unable to parse operators kubernetes version: %v", err)) + return res + } + + return res +} diff --git a/pkg/kudoctl/cmd/verify/verify_test.go b/pkg/kudoctl/cmd/verify/verify_test.go index 0087f31a2..dbcb2ea86 100644 --- a/pkg/kudoctl/cmd/verify/verify_test.go +++ b/pkg/kudoctl/cmd/verify/verify_test.go @@ -75,3 +75,36 @@ func packageFileForParams(params []v1beta1.Parameter) *packages.Files { Params: &p, } } + +func TestK8sVersionVerifier(t *testing.T) { + tests := []struct { + name string + operatorFile *packages.OperatorFile + expectedWarnings []string + expectedErrors []string + }{ + {"no warning or error", &packages.OperatorFile{ + APIVersion: packages.APIVersion, + Name: "kafka", + KubernetesVersion: "1.15", + }, []string{}, []string{}}, + {"no warning or error", &packages.OperatorFile{ + APIVersion: packages.APIVersion, + Name: "kafka", + KubernetesVersion: "", + }, []string{}, []string{"Unable to parse operators kubernetes version: Invalid Semantic Version"}}, + } + + verifier := K8sVersionVerifier{} + for _, tt := range tests { + res := verifier.Verify(packageFileForOperator(tt.operatorFile)) + assert.Equal(t, tt.expectedWarnings, res.Warnings, tt.name) + assert.Equal(t, tt.expectedErrors, res.Errors, tt.name) + } +} + +func packageFileForOperator(op *packages.OperatorFile) *packages.Files { + return &packages.Files{ + Operator: op, + } +}