Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Package Verify of Versions #1460

Merged
merged 1 commit into from
Apr 14, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pkg/kudoctl/cmd/testdata/invalid-params.golden
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ parameter "comma," defined but not used.
Errors
parameter "Cpus" has a duplicate
parameter "comma," contains invalid character ','
"operatorVersion" is required and must be semver
plan "not-existing-plan" used in parameter "comma," is not defined
34 changes: 24 additions & 10 deletions pkg/kudoctl/cmd/verify/verify.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
var verifiers = []packages.Verifier{
DuplicateVerifier{},
InvalidCharVerifier{";,"},
K8sVersionVerifier{},
VersionVerifier{},
task.BuildVerifier{},
task.ReferenceVerifier{},
plan.ReferenceVerifier{},
Expand Down Expand Up @@ -68,20 +68,34 @@ func (v InvalidCharVerifier) Verify(pf *packages.Files) verifier.Result {
return res
}

// K8sVersionVerifier verifies the kubernetesVersion of operator.yaml
type K8sVersionVerifier struct{}
// VersionVerifier verifies the version in operator.yaml, kubernetesVersion, operatorVersion and kudoVersion
type VersionVerifier struct{}

func (K8sVersionVerifier) Verify(pf *packages.Files) verifier.Result {
func (VersionVerifier) Verify(pf *packages.Files) verifier.Result {
res := verifier.NewResult()
if pf.Operator == nil {
res.AddErrors("Operator not defined.")
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
verifySemVer(pf.Operator.OperatorVersion, "operatorVersion", &res, true)
verifySemVer(pf.Operator.KubernetesVersion, "kubernetesVersion", &res, true)
verifySemVer(pf.Operator.KUDOVersion, "kudoVersion", &res, false)
return res
}

func verifySemVer(ver string, name string, res *verifier.Result, required bool) {
v := strings.TrimSpace(ver)
if !required && v == "" {
return
}

return res
if required && v == "" {
res.AddErrors(fmt.Sprintf("%q is required and must be semver", name))
return
}

_, err := version.New(ver)
if err != nil {
res.AddErrors(fmt.Sprintf("unable to parse %q: %v", name, err))
}
}
57 changes: 53 additions & 4 deletions pkg/kudoctl/cmd/verify/verify_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,19 +82,68 @@ func TestK8sVersionVerifier(t *testing.T) {
expectedWarnings []string
expectedErrors []string
}{
{"no warning or error", &packages.OperatorFile{
{"no warning or error with all versions", &packages.OperatorFile{
APIVersion: packages.APIVersion,
Name: "kafka",
KubernetesVersion: "1.15",
KUDOVersion: "0.12.0",
OperatorVersion: "0.1.0",
}, []string{}, []string{}},
{"no warning or error", &packages.OperatorFile{
{"no warning or error without kudo version", &packages.OperatorFile{
APIVersion: packages.APIVersion,
Name: "kafka",
KubernetesVersion: "1.15",
OperatorVersion: "0.1.0",
}, []string{}, []string{}},
{"kubernetesVersion required", &packages.OperatorFile{
APIVersion: packages.APIVersion,
Name: "kafka",
KubernetesVersion: "",
}, []string{}, []string{"Unable to parse operators kubernetes version: Invalid Semantic Version"}},
KUDOVersion: "0.12.0",
OperatorVersion: "0.1.0",
}, []string{}, []string{"\"kubernetesVersion\" is required and must be semver"}},
{"kubernetesVersion must be semver", &packages.OperatorFile{
APIVersion: packages.APIVersion,
Name: "kafka",
KubernetesVersion: "1.",
KUDOVersion: "0.12.0",
OperatorVersion: "0.1.0",
}, []string{}, []string{"unable to parse \"kubernetesVersion\": Invalid Semantic Version"}},
{"kubernetesVersion required", &packages.OperatorFile{
APIVersion: packages.APIVersion,
Name: "kafka",
KubernetesVersion: "1.15",
KUDOVersion: "0.12.0",
OperatorVersion: "",
}, []string{}, []string{"\"operatorVersion\" is required and must be semver"}},
{"kubernetesVersion must be semver", &packages.OperatorFile{
APIVersion: packages.APIVersion,
Name: "kafka",
KubernetesVersion: "1.15",
KUDOVersion: "0.12.0",
OperatorVersion: "0.1.",
}, []string{}, []string{"unable to parse \"operatorVersion\": Invalid Semantic Version"}},
{"kudoVersion must be semver", &packages.OperatorFile{
APIVersion: packages.APIVersion,
Name: "kafka",
KubernetesVersion: "1.15",
KUDOVersion: "0.12.",
OperatorVersion: "0.1.0",
}, []string{}, []string{"unable to parse \"kudoVersion\": Invalid Semantic Version"}},
{"kubernetesVersion and OperatorVersion missing", &packages.OperatorFile{
APIVersion: packages.APIVersion,
Name: "kafka",
KUDOVersion: "0.12.0",
}, []string{}, []string{"\"operatorVersion\" is required and must be semver", "\"kubernetesVersion\" is required and must be semver"}},
{"kubernetesVersion missing and OperatorVersion not semver", &packages.OperatorFile{
APIVersion: packages.APIVersion,
Name: "kafka",
KUDOVersion: "0.12.0",
OperatorVersion: "0.1.",
}, []string{}, []string{"unable to parse \"operatorVersion\": Invalid Semantic Version", "\"kubernetesVersion\" is required and must be semver"}},
}

verifier := K8sVersionVerifier{}
verifier := VersionVerifier{}
for _, tt := range tests {
res := verifier.Verify(packageFileForOperator(tt.operatorFile))
assert.Equal(t, tt.expectedWarnings, res.Warnings, tt.name)
Expand Down