Skip to content

Commit e3538ed

Browse files
committed
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.
1 parent 207ffa7 commit e3538ed

File tree

5 files changed

+26
-14
lines changed

5 files changed

+26
-14
lines changed

cmd/kubeadm/app/cmd/config_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,8 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
208208

209209
func TestConfigImagesListOutput(t *testing.T) {
210210

211-
etcdVersion, ok := constants.SupportedEtcdVersion[uint8(dummyKubernetesVersion.Minor())]
212-
if !ok {
211+
etcdVersion, _, err := constants.EtcdSupportedVersion(constants.SupportedEtcdVersion, dummyKubernetesVersionStr)
212+
if err != nil {
213213
t.Fatalf("cannot determine etcd version for Kubernetes version %s", dummyKubernetesVersionStr)
214214
}
215215
versionMapping := struct {
@@ -218,7 +218,7 @@ func TestConfigImagesListOutput(t *testing.T) {
218218
PauseVersion string
219219
CoreDNSVersion string
220220
}{
221-
EtcdVersion: etcdVersion,
221+
EtcdVersion: etcdVersion.String(),
222222
KubeVersion: "v" + dummyKubernetesVersionStr,
223223
PauseVersion: constants.PauseVersion,
224224
CoreDNSVersion: constants.CoreDNSVersion,

cmd/kubeadm/app/phases/upgrade/compute_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ spec:
8585
image: k8s.gcr.io/etcd:` + fakeCurrentEtcdVersion
8686

8787
func getEtcdVersion(v *versionutil.Version) string {
88-
return constants.SupportedEtcdVersion[uint8(v.Minor())]
88+
etcdVer, _, _ := constants.EtcdSupportedVersion(constants.SupportedEtcdVersion, v.String())
89+
return etcdVer.String()
8990
}
9091

9192
const fakeCurrentCoreDNSVersion = "1.0.6"

cmd/kubeadm/app/phases/upgrade/policy_test.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func TestEnforceVersionPolicies(t *testing.T) {
7676
kubeletVersion: "v1.12.3",
7777
kubeadmVersion: "v1.12.3",
7878
},
79-
newK8sVersion: "v1.11.10",
79+
newK8sVersion: "v1.10.10",
8080
expectedMandatoryErrs: 1, // version must be higher than v1.12.0
8181
expectedSkippableErrs: 1, // can't upgrade old k8s with newer kubeadm
8282
},
@@ -85,9 +85,9 @@ func TestEnforceVersionPolicies(t *testing.T) {
8585
vg: &fakeVersionGetter{
8686
clusterVersion: "v1.11.3",
8787
kubeletVersion: "v1.11.3",
88-
kubeadmVersion: constants.CurrentKubernetesVersion.String(),
88+
kubeadmVersion: "v1.13.0",
8989
},
90-
newK8sVersion: constants.CurrentKubernetesVersion.String(),
90+
newK8sVersion: "v1.13.0",
9191
expectedMandatoryErrs: 1, // can't upgrade two minor versions
9292
expectedSkippableErrs: 1, // kubelet <-> apiserver skew too large
9393
},
@@ -124,11 +124,11 @@ func TestEnforceVersionPolicies(t *testing.T) {
124124
{
125125
name: "the maximum skew between the cluster version and the kubelet versions should be one minor version. This may be forced through though.",
126126
vg: &fakeVersionGetter{
127-
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
128-
kubeletVersion: "v1.12.8",
129-
kubeadmVersion: constants.CurrentKubernetesVersion.String(),
127+
clusterVersion: "v1.12.0",
128+
kubeletVersion: "v1.10.8",
129+
kubeadmVersion: "v1.12.0",
130130
},
131-
newK8sVersion: constants.CurrentKubernetesVersion.String(),
131+
newK8sVersion: "v1.12.0",
132132
expectedSkippableErrs: 1,
133133
},
134134
{

cmd/kubeadm/app/preflight/checks_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,7 @@ func TestKubeletVersionCheck(t *testing.T) {
793793
expectWarnings bool
794794
}{
795795
{"v" + constants.CurrentKubernetesVersion.WithPatch(2).String(), "", false, false}, // check minimally supported version when there is no information about control plane
796-
{"v1.11.3", "v1.11.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail.
796+
{"v1.1.0", "v1.11.8", true, false}, // too old kubelet, should fail.
797797
{"v" + constants.MinimumKubeletVersion.String(), constants.MinimumControlPlaneVersion.WithPatch(5).String(), false, false}, // kubelet within same major.minor as control plane
798798
{"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
799799
{"v" + constants.MinimumKubeletVersion.String(), constants.CurrentKubernetesVersion.WithPatch(1).String(), false, false}, // kubelet is lower than control plane, but newer than minimally supported

cmd/kubeadm/test/cmd/init_test.go

+13-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ package kubeadm
1919
import (
2020
"fmt"
2121
"os"
22+
"strings"
2223
"testing"
2324

24-
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
25+
"k8s.io/apimachinery/pkg/util/version"
2526

2627
"github.com/lithammer/dedent"
2728
)
@@ -37,6 +38,16 @@ func runKubeadmInit(args ...string) (string, string, int, error) {
3738
return RunCmd(kubeadmPath, kubeadmArgs...)
3839
}
3940

41+
func getKubeadmVersion() *version.Version {
42+
kubeadmPath := getKubeadmPath()
43+
kubeadmArgs := []string{"version", "-o=short"}
44+
out, _, _, err := RunCmd(kubeadmPath, kubeadmArgs...)
45+
if err != nil {
46+
panic(fmt.Sprintf("could not run 'kubeadm version -o=short': %v", err))
47+
}
48+
return version.MustParseSemantic(strings.TrimSpace(out))
49+
}
50+
4051
func TestCmdInitToken(t *testing.T) {
4152
initTest := []struct {
4253
name string
@@ -94,7 +105,7 @@ func TestCmdInitKubernetesVersion(t *testing.T) {
94105
},
95106
{
96107
name: "valid version is accepted",
97-
args: "--kubernetes-version=" + constants.CurrentKubernetesVersion.String(),
108+
args: "--kubernetes-version=" + getKubeadmVersion().String(),
98109
expected: true,
99110
},
100111
}

0 commit comments

Comments
 (0)