linkerd2/pkg/k8s/version_test.go

85 lines
2.3 KiB
Go

package k8s
import (
"testing"
)
func TestGetK8sVersion(t *testing.T) {
t.Run("Correctly parses a Version string", func(t *testing.T) {
versions := map[string][3]int{
"v1.8.4": {1, 8, 4},
"v2.7.1": {2, 7, 1},
"v2.0.1": {2, 0, 1},
"v1.9.0-beta.2": {1, 9, 0},
"v1.7.9+7f63532e4ff4f": {1, 7, 9},
}
for k, expectedVersion := range versions {
actualVersion, err := getK8sVersion(k)
if err != nil {
t.Fatalf("Error parsing string: %v", err)
}
if actualVersion != expectedVersion {
t.Fatalf("Expecting %s to be parsed into %v but got %v", k, expectedVersion, actualVersion)
}
}
})
t.Run("Returns error if Version string looks broken", func(t *testing.T) {
versions := []string{
"",
"1",
"1.8.",
"1.9-beta.2",
"v1.7+7f63532e4ff4f",
"Client Version: v1.8.4",
"Version.Info{Major:\"1\", Minor:\"8\", GitVersion:\"v1.8.4\", GitCommit:\"9befc2b8928a9426501d3bf62f72849d5cbcd5a3\", GitTreeState:\"clean\", BuildDate:\"2017-11-20T05:28:34Z\", GoVersion:\"go1.8.3\", Compiler:\"gc\", Platform:\"darwin/amd64\"}",
}
for _, invalidVersion := range versions {
_, err := getK8sVersion(invalidVersion)
if err == nil {
t.Fatalf("Expected error parsing string: %s", invalidVersion)
}
}
})
}
func TestIsCompatibleVersion(t *testing.T) {
t.Run("Success when compatible versions", func(t *testing.T) {
compatibleVersions := map[[3]int][3]int{
{1, 8, 4}: {1, 8, 4},
{1, 9, 2}: {1, 9, 4},
{1, 1, 1}: {1, 1, 1},
{1, 1, 1}: {2, 1, 2},
{1, 1, 1}: {1, 2, 1},
{1, 1, 1}: {1, 1, 2},
{1, 1, 1}: {100, 1, 2},
}
for e, a := range compatibleVersions {
if !isCompatibleVersion(e, a) {
t.Fatalf("Expected required version [%v] to be compatible with [%v] but it wasn't", e, a)
}
}
})
t.Run("Fail when incompatible versions", func(t *testing.T) {
inCompatibleVersions := map[[3]int][3]int{
{1, 8, 4}: {1, 7, 1},
{1, 9, 2}: {1, 9, 0},
{10, 10, 10}: {9, 10, 10},
{10, 10, 10}: {10, 9, 10},
{10, 10, 10}: {10, 10, 9},
{10, 10, 10}: {0, 10, 9},
}
for e, a := range inCompatibleVersions {
if isCompatibleVersion(e, a) {
t.Fatalf("Expected required version [%v] to NOT be compatible with [%v] but it was'", e, a)
}
}
})
}