From e3538edc227b3495bbedaf1b646317f9e1a022fe Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Thu, 29 Jul 2021 04:30:27 +0300 Subject: [PATCH] kubeadm: update unit tests to support dynamic version updates Tests under /app and /test would fail if the current/minimum k8s version is dynamically populated from the version in the kubeadm binary. Adapt the tests to support that. --- cmd/kubeadm/app/cmd/config_test.go | 6 +++--- cmd/kubeadm/app/phases/upgrade/compute_test.go | 3 ++- cmd/kubeadm/app/phases/upgrade/policy_test.go | 14 +++++++------- cmd/kubeadm/app/preflight/checks_test.go | 2 +- cmd/kubeadm/test/cmd/init_test.go | 15 +++++++++++++-- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/cmd/kubeadm/app/cmd/config_test.go b/cmd/kubeadm/app/cmd/config_test.go index 46644acd891..8477fcec644 100644 --- a/cmd/kubeadm/app/cmd/config_test.go +++ b/cmd/kubeadm/app/cmd/config_test.go @@ -208,8 +208,8 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) { func TestConfigImagesListOutput(t *testing.T) { - etcdVersion, ok := constants.SupportedEtcdVersion[uint8(dummyKubernetesVersion.Minor())] - if !ok { + etcdVersion, _, err := constants.EtcdSupportedVersion(constants.SupportedEtcdVersion, dummyKubernetesVersionStr) + if err != nil { t.Fatalf("cannot determine etcd version for Kubernetes version %s", dummyKubernetesVersionStr) } versionMapping := struct { @@ -218,7 +218,7 @@ func TestConfigImagesListOutput(t *testing.T) { PauseVersion string CoreDNSVersion string }{ - EtcdVersion: etcdVersion, + EtcdVersion: etcdVersion.String(), KubeVersion: "v" + dummyKubernetesVersionStr, PauseVersion: constants.PauseVersion, CoreDNSVersion: constants.CoreDNSVersion, diff --git a/cmd/kubeadm/app/phases/upgrade/compute_test.go b/cmd/kubeadm/app/phases/upgrade/compute_test.go index 85b3e78cdc0..220232bd7e6 100644 --- a/cmd/kubeadm/app/phases/upgrade/compute_test.go +++ b/cmd/kubeadm/app/phases/upgrade/compute_test.go @@ -85,7 +85,8 @@ spec: image: k8s.gcr.io/etcd:` + fakeCurrentEtcdVersion func getEtcdVersion(v *versionutil.Version) string { - return constants.SupportedEtcdVersion[uint8(v.Minor())] + etcdVer, _, _ := constants.EtcdSupportedVersion(constants.SupportedEtcdVersion, v.String()) + return etcdVer.String() } const fakeCurrentCoreDNSVersion = "1.0.6" diff --git a/cmd/kubeadm/app/phases/upgrade/policy_test.go b/cmd/kubeadm/app/phases/upgrade/policy_test.go index 81e35898395..9cebdf8b045 100644 --- a/cmd/kubeadm/app/phases/upgrade/policy_test.go +++ b/cmd/kubeadm/app/phases/upgrade/policy_test.go @@ -76,7 +76,7 @@ func TestEnforceVersionPolicies(t *testing.T) { kubeletVersion: "v1.12.3", kubeadmVersion: "v1.12.3", }, - newK8sVersion: "v1.11.10", + newK8sVersion: "v1.10.10", expectedMandatoryErrs: 1, // version must be higher than v1.12.0 expectedSkippableErrs: 1, // can't upgrade old k8s with newer kubeadm }, @@ -85,9 +85,9 @@ func TestEnforceVersionPolicies(t *testing.T) { vg: &fakeVersionGetter{ clusterVersion: "v1.11.3", kubeletVersion: "v1.11.3", - kubeadmVersion: constants.CurrentKubernetesVersion.String(), + kubeadmVersion: "v1.13.0", }, - newK8sVersion: constants.CurrentKubernetesVersion.String(), + newK8sVersion: "v1.13.0", expectedMandatoryErrs: 1, // can't upgrade two minor versions expectedSkippableErrs: 1, // kubelet <-> apiserver skew too large }, @@ -124,11 +124,11 @@ func TestEnforceVersionPolicies(t *testing.T) { { name: "the maximum skew between the cluster version and the kubelet versions should be one minor version. This may be forced through though.", vg: &fakeVersionGetter{ - clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(), - kubeletVersion: "v1.12.8", - kubeadmVersion: constants.CurrentKubernetesVersion.String(), + clusterVersion: "v1.12.0", + kubeletVersion: "v1.10.8", + kubeadmVersion: "v1.12.0", }, - newK8sVersion: constants.CurrentKubernetesVersion.String(), + newK8sVersion: "v1.12.0", expectedSkippableErrs: 1, }, { diff --git a/cmd/kubeadm/app/preflight/checks_test.go b/cmd/kubeadm/app/preflight/checks_test.go index 80b51a8f0cb..760689025ae 100644 --- a/cmd/kubeadm/app/preflight/checks_test.go +++ b/cmd/kubeadm/app/preflight/checks_test.go @@ -793,7 +793,7 @@ func TestKubeletVersionCheck(t *testing.T) { expectWarnings bool }{ {"v" + constants.CurrentKubernetesVersion.WithPatch(2).String(), "", false, false}, // check minimally supported version when there is no information about control plane - {"v1.11.3", "v1.11.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail. + {"v1.1.0", "v1.11.8", true, false}, // too old kubelet, should fail. {"v" + constants.MinimumKubeletVersion.String(), constants.MinimumControlPlaneVersion.WithPatch(5).String(), false, false}, // kubelet within same major.minor as control plane {"v" + constants.MinimumKubeletVersion.WithPatch(5).String(), constants.MinimumControlPlaneVersion.WithPatch(1).String(), false, false}, // kubelet is newer, but still within same major.minor as control plane {"v" + constants.MinimumKubeletVersion.String(), constants.CurrentKubernetesVersion.WithPatch(1).String(), false, false}, // kubelet is lower than control plane, but newer than minimally supported diff --git a/cmd/kubeadm/test/cmd/init_test.go b/cmd/kubeadm/test/cmd/init_test.go index 5c376b7a2d1..1e2d82ae9c9 100644 --- a/cmd/kubeadm/test/cmd/init_test.go +++ b/cmd/kubeadm/test/cmd/init_test.go @@ -19,9 +19,10 @@ package kubeadm import ( "fmt" "os" + "strings" "testing" - "k8s.io/kubernetes/cmd/kubeadm/app/constants" + "k8s.io/apimachinery/pkg/util/version" "github.com/lithammer/dedent" ) @@ -37,6 +38,16 @@ func runKubeadmInit(args ...string) (string, string, int, error) { return RunCmd(kubeadmPath, kubeadmArgs...) } +func getKubeadmVersion() *version.Version { + kubeadmPath := getKubeadmPath() + kubeadmArgs := []string{"version", "-o=short"} + out, _, _, err := RunCmd(kubeadmPath, kubeadmArgs...) + if err != nil { + panic(fmt.Sprintf("could not run 'kubeadm version -o=short': %v", err)) + } + return version.MustParseSemantic(strings.TrimSpace(out)) +} + func TestCmdInitToken(t *testing.T) { initTest := []struct { name string @@ -94,7 +105,7 @@ func TestCmdInitKubernetesVersion(t *testing.T) { }, { name: "valid version is accepted", - args: "--kubernetes-version=" + constants.CurrentKubernetesVersion.String(), + args: "--kubernetes-version=" + getKubeadmVersion().String(), expected: true, }, }