Skip to content

Commit

Permalink
Add semver version validation rules to Machine type
Browse files Browse the repository at this point in the history
  • Loading branch information
Sedef committed Mar 13, 2020
1 parent 5252a7a commit fd40ba7
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
8 changes: 8 additions & 0 deletions api/v1alpha3/machine_webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package v1alpha3
import (
"fmt"

"github.com/blang/semver"
apierrors "k8s.io/apimachinery/pkg/api/errors"
runtime "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/validation/field"
Expand Down Expand Up @@ -114,6 +115,13 @@ func (m *Machine) validate(old *Machine) error {
)
}

if m.Spec.Version != nil {
_, err := semver.ParseTolerant(*m.Spec.Version)
if err != nil {
allErrs = append(allErrs, field.Invalid(field.NewPath("spec", "version"), m.Spec.Version, "must be a valid semantic version"))
}
}

if len(allErrs) == 0 {
return nil
}
Expand Down
43 changes: 43 additions & 0 deletions api/v1alpha3/machine_webhook_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,3 +189,46 @@ func TestMachineClusterNameImmutable(t *testing.T) {
})
}
}

func TestMachineVersionValidation(t *testing.T) {
tests := []struct {
name string
version string
expectErr bool
}{
{
name: "should succeed when given a valid semantic version with prepended 'v'",
version: "v1.17.2",
expectErr: false,
},
{
name: "should succeed when given a valid semantic version without 'v'",
version: "1.17.2",
expectErr: false,
},
{
name: "should return error when given an invalid semantic version",
version: "vv1.17.2",
expectErr: true,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
g := NewWithT(t)

m := &Machine{
Spec: MachineSpec{
Version: &tt.version,
Bootstrap: Bootstrap{ConfigRef: nil, DataSecretName: pointer.StringPtr("test")},
},
}

if tt.expectErr {
g.Expect(m.ValidateCreate()).NotTo(Succeed())
} else {
g.Expect(m.ValidateCreate()).To(Succeed())
}
})
}
}

0 comments on commit fd40ba7

Please sign in to comment.