diff --git a/pkg/test/harness.go b/pkg/test/harness.go index baf12b45..b9032fd8 100644 --- a/pkg/test/harness.go +++ b/pkg/test/harness.go @@ -136,7 +136,7 @@ func (h *Harness) RunKIND() (*rest.Config, error) { if h.TestSuite.KINDConfig != "" { h.T.Logf("Loading KIND config from %s", h.TestSuite.KINDConfig) var err error - kindCfg, err = loadKindConfig(h.TestSuite.KINDConfig) + kindCfg, err = h.loadKindConfig(h.TestSuite.KINDConfig) if err != nil { return nil, err } @@ -583,7 +583,7 @@ func (h *Harness) Report() { } } -func loadKindConfig(path string) (*kindConfig.Cluster, error) { +func (h *Harness) loadKindConfig(path string) (*kindConfig.Cluster, error) { raw, err := ioutil.ReadFile(path) if err != nil { return nil, err @@ -597,6 +597,8 @@ func loadKindConfig(path string) (*kindConfig.Cluster, error) { if err := decoder.Decode(cluster); err != nil { return nil, err } - + if !IsMinVersion(cluster.APIVersion) { + h.T.Logf("Warning: %q in %s is not a supported version.\n", cluster.APIVersion, path) + } return cluster, nil } diff --git a/pkg/test/kind.go b/pkg/test/kind.go index 3537bec6..f097fc27 100644 --- a/pkg/test/kind.go +++ b/pkg/test/kind.go @@ -4,6 +4,7 @@ import ( "context" "testing" + "k8s.io/apimachinery/pkg/version" "sigs.k8s.io/kind/pkg/apis/config/v1alpha4" "sigs.k8s.io/kind/pkg/cluster" "sigs.k8s.io/kind/pkg/cluster/nodes" @@ -106,3 +107,10 @@ func loadContainer(docker testutils.DockerClient, node nodes.Node, container str return nil } + +// IsMinVersion checks if pass ver is the min required kind version +func IsMinVersion(ver string) bool { + minVersion := "kind.sigs.k8s.io/v1alpha4" + comp := version.CompareKubeAwareVersionStrings(minVersion, ver) + return comp != -1 +} diff --git a/pkg/test/kind_test.go b/pkg/test/kind_test.go new file mode 100644 index 00000000..0d8c9665 --- /dev/null +++ b/pkg/test/kind_test.go @@ -0,0 +1,45 @@ +package test + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestCheckVersion(t *testing.T) { + + tests := []struct { + name string + ver string + expected bool + }{ + { + name: `current version`, + ver: "kind.sigs.k8s.io/v1alpha4", + expected: true, + }, + { + name: `early version`, + ver: "kind.sigs.k8s.io/v1alpha3", + expected: false, + }, + { + name: `newer version`, + ver: "kind.sigs.k8s.io/v1beta1", + expected: true, + }, + { + name: `wrong group`, + ver: "foo/v1alpha4", + expected: false, + }, + } + + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + result := IsMinVersion(tt.ver) + assert.Equal(t, tt.expected, result) + }) + } +}