blob: 555192be4ad0f6ec1f171fa0078950d3bf9ef54b [file] [log] [blame]
// Copyright Istio Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package k8sversion
import (
"bytes"
"fmt"
"strings"
"testing"
)
import (
pkgVersion "istio.io/pkg/version"
"k8s.io/apimachinery/pkg/version"
fakediscovery "k8s.io/client-go/discovery/fake"
)
import (
"github.com/apache/dubbo-go-pixiu/operator/pkg/util/clog"
"github.com/apache/dubbo-go-pixiu/pkg/kube"
)
var (
version1_17 = &version.Info{
Major: "1",
Minor: "17",
GitVersion: "1.17",
}
version1_8 = &version.Info{
Major: "1",
Minor: "8",
GitVersion: "v1.8",
}
version1_18 = &version.Info{
Major: "1",
Minor: "18",
GitVersion: "v1.18.5",
}
version1_19 = &version.Info{
Major: "1",
Minor: "19",
GitVersion: "v1.19.4",
}
version1_20 = &version.Info{
Major: "1",
Minor: "20",
GitVersion: "v1.20.2",
}
version1_19RC = &version.Info{
Major: "1",
Minor: "19",
GitVersion: "v1.19.5-rc.0",
}
version1_17GKE = &version.Info{
Major: "1",
Minor: "17+",
GitVersion: "v1.17.7-gke.10",
}
version1_8GKE = &version.Info{
Major: "1",
Minor: "8",
GitVersion: "v1.8.7-gke.8",
}
versionInvalid1 = &version.Info{
Major: "1",
Minor: "7",
GitVersion: "v1.invalid.7",
}
versionInvalid2 = &version.Info{
Major: "one",
Minor: "seven",
GitVersion: "one.seven",
}
)
func TestExtractKubernetesVersion(t *testing.T) {
cases := []struct {
version *version.Info
expected int
errMsg error
isValid bool
}{
{
version: version1_17,
expected: 17,
errMsg: nil,
isValid: true,
},
{
version: version1_8,
expected: 8,
errMsg: nil,
isValid: true,
},
{
version: version1_18,
expected: 18,
errMsg: nil,
isValid: true,
},
{
version: version1_19,
expected: 19,
errMsg: nil,
isValid: true,
},
{
version: version1_20,
expected: 20,
errMsg: nil,
isValid: true,
},
{
version: version1_19RC,
expected: 19,
errMsg: nil,
isValid: true,
},
{
version: version1_17GKE,
expected: 17,
errMsg: nil,
isValid: true,
},
{
version: version1_8GKE,
expected: 8,
errMsg: nil,
isValid: true,
},
{
version: versionInvalid1,
errMsg: fmt.Errorf("could not parse Malformed version: %v", versionInvalid1.GitVersion),
isValid: false,
},
{
version: versionInvalid2,
errMsg: fmt.Errorf("could not parse Malformed version: %v", versionInvalid2.GitVersion),
isValid: false,
},
}
for i, c := range cases {
t.Run(fmt.Sprintf("case %d %s", i, c.version), func(t *testing.T) {
got, err := extractKubernetesVersion(c.version)
if c.errMsg != err && c.isValid {
t.Fatalf("\nwanted: %v \nbut found: %v", c.errMsg, err)
}
if got != c.expected {
t.Fatalf("wanted %v got %v", c.expected, got)
}
})
}
}
func TestIsK8VersionSupported(t *testing.T) {
cases := []struct {
version *version.Info
logMsg string
isValid bool
}{
{
version: version1_18,
logMsg: fmt.Sprintf(UnSupportedK8SVersionLogMsg, version1_18.GitVersion, pkgVersion.Info.Version, MinK8SVersion),
isValid: false,
},
{
version: version1_8,
logMsg: fmt.Sprintf(UnSupportedK8SVersionLogMsg, version1_8.GitVersion, pkgVersion.Info.Version, MinK8SVersion),
isValid: false,
},
{
version: version1_17GKE,
logMsg: fmt.Sprintf(UnSupportedK8SVersionLogMsg, version1_17GKE.GitVersion, pkgVersion.Info.Version, MinK8SVersion),
isValid: false,
},
{
version: versionInvalid1,
logMsg: fmt.Sprintf(UnSupportedK8SVersionLogMsg, versionInvalid1.GitVersion, pkgVersion.Info.Version, MinK8SVersion),
isValid: false,
},
{
version: version1_20,
isValid: true,
},
}
var outBuf bytes.Buffer
var errBuf bytes.Buffer
for i, c := range cases {
t.Run(fmt.Sprintf("case %d %s", i, c.version), func(t *testing.T) {
k8sClient := kube.NewFakeClient()
k8sClient.Discovery().(*fakediscovery.FakeDiscovery).FakedServerVersion = c.version
logger := clog.NewConsoleLogger(&outBuf, &errBuf, nil)
IsK8VersionSupported(k8sClient, logger)
errMsgTrim := strings.TrimSpace(c.logMsg)
outBufTrim := strings.TrimSpace(outBuf.String())
if !c.isValid && strings.Compare(errMsgTrim, outBufTrim) != 0 {
t.Fatalf("\nwanted: %v \nbut found: %v", errMsgTrim, outBufTrim)
}
if c.isValid && outBuf.Len() > 0 {
t.Fatalf("\nwanted: %v \nbut found: %v", errMsgTrim, outBufTrim)
}
outBuf.Reset()
})
}
}