Skip to content

Commit 8565e37

Browse files
authored
Merge pull request kubernetes#125127 from my-git9/ut-compute
kubeadm: increase ut coverage for compute
2 parents 39c6bc3 + d24d82e commit 8565e37

File tree

1 file changed

+167
-24
lines changed

1 file changed

+167
-24
lines changed

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

Lines changed: 167 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package upgrade
1818

1919
import (
20+
"context"
21+
"errors"
2022
"fmt"
2123
"strings"
2224
"testing"
@@ -54,11 +56,17 @@ func (f *fakeVersionGetter) ClusterVersion() (string, *versionutil.Version, erro
5456

5557
// KubeadmVersion gets a fake kubeadm version
5658
func (f *fakeVersionGetter) KubeadmVersion() (string, *versionutil.Version, error) {
59+
if f.kubeadmVersion == "" {
60+
return "", nil, errors.New("get kubeadm version error")
61+
}
5762
return f.kubeadmVersion, versionutil.MustParseSemantic(f.kubeadmVersion), nil
5863
}
5964

6065
// VersionFromCILabel gets fake latest versions from CI
6166
func (f *fakeVersionGetter) VersionFromCILabel(ciVersionLabel, _ string) (string, *versionutil.Version, error) {
67+
if f.stableVersion == "" {
68+
return "", nil, errors.New("fake error")
69+
}
6270
if ciVersionLabel == "stable" {
6371
return f.stableVersion, versionutil.MustParseSemantic(f.stableVersion), nil
6472
}
@@ -73,6 +81,9 @@ func (f *fakeVersionGetter) VersionFromCILabel(ciVersionLabel, _ string) (string
7381

7482
// KubeletVersions should return a map with a version and a list of node names that describes how many kubelets there are for that version
7583
func (f *fakeVersionGetter) KubeletVersions() (map[string][]string, error) {
84+
if f.kubeletVersion == "" {
85+
return nil, errors.New("get kubelet version failed")
86+
}
7687
return map[string][]string{
7788
f.kubeletVersion: {"node1"},
7889
}, nil
@@ -89,6 +100,17 @@ func (f *fakeVersionGetter) ComponentVersions(name string) (map[string][]string,
89100
}, nil
90101
}
91102

103+
if f.componentVersion == "" {
104+
return nil, errors.New("get component version failed")
105+
}
106+
107+
if f.componentVersion == "multiVersion" {
108+
return map[string][]string{
109+
"node1": {"node1"},
110+
"node2": {"node2"},
111+
}, nil
112+
}
113+
92114
return map[string][]string{
93115
f.componentVersion: {"node1"},
94116
}, nil
@@ -136,6 +158,7 @@ func TestGetAvailableUpgrades(t *testing.T) {
136158
allowExperimental, allowRCs bool
137159
errExpected bool
138160
beforeDNSVersion string
161+
deployDNSFailed bool
139162
}{
140163
{
141164
name: "no action needed, already up-to-date",
@@ -154,6 +177,110 @@ func TestGetAvailableUpgrades(t *testing.T) {
154177
allowExperimental: false,
155178
errExpected: false,
156179
},
180+
{
181+
name: "get component version failed",
182+
vg: &fakeVersionGetter{
183+
clusterVersion: v1Y0.String(),
184+
componentVersion: "",
185+
kubeletVersion: v1Y0.String(),
186+
kubeadmVersion: v1Y0.String(),
187+
etcdVersion: fakeCurrentEtcdVersion,
188+
189+
stablePatchVersion: v1Y0.String(),
190+
stableVersion: v1Y0.String(),
191+
},
192+
beforeDNSVersion: fakeCurrentCoreDNSVersion,
193+
expectedUpgrades: nil,
194+
allowExperimental: false,
195+
errExpected: true,
196+
},
197+
{
198+
name: "there is version information about multiple components",
199+
vg: &fakeVersionGetter{
200+
clusterVersion: v1Y0.String(),
201+
componentVersion: "multiVersion",
202+
kubeletVersion: v1Y0.String(),
203+
kubeadmVersion: v1Y0.String(),
204+
etcdVersion: fakeCurrentEtcdVersion,
205+
206+
stablePatchVersion: v1Y0.String(),
207+
stableVersion: v1Y0.String(),
208+
},
209+
beforeDNSVersion: fakeCurrentCoreDNSVersion,
210+
expectedUpgrades: nil,
211+
allowExperimental: false,
212+
errExpected: true,
213+
},
214+
{
215+
name: "get kubeadm version failed",
216+
vg: &fakeVersionGetter{
217+
clusterVersion: v1Y0.String(),
218+
componentVersion: v1Y0.String(),
219+
kubeletVersion: v1Y0.String(),
220+
kubeadmVersion: "",
221+
etcdVersion: fakeCurrentEtcdVersion,
222+
223+
stablePatchVersion: v1Y0.String(),
224+
stableVersion: v1Y0.String(),
225+
},
226+
beforeDNSVersion: fakeCurrentCoreDNSVersion,
227+
expectedUpgrades: nil,
228+
allowExperimental: false,
229+
errExpected: true,
230+
},
231+
{
232+
name: "get kubelet version failed",
233+
vg: &fakeVersionGetter{
234+
clusterVersion: v1Y0.String(),
235+
componentVersion: v1Y0.String(),
236+
kubeletVersion: "",
237+
kubeadmVersion: v1Y0.String(),
238+
etcdVersion: fakeCurrentEtcdVersion,
239+
240+
stablePatchVersion: v1Y0.String(),
241+
stableVersion: v1Y0.String(),
242+
},
243+
beforeDNSVersion: fakeCurrentCoreDNSVersion,
244+
expectedUpgrades: nil,
245+
allowExperimental: false,
246+
errExpected: true,
247+
},
248+
{
249+
name: "deploy DNS failed",
250+
vg: &fakeVersionGetter{
251+
clusterVersion: v1Y0.String(),
252+
componentVersion: v1Y0.String(),
253+
kubeletVersion: v1Y0.String(),
254+
kubeadmVersion: v1Y0.String(),
255+
etcdVersion: fakeCurrentEtcdVersion,
256+
257+
stablePatchVersion: v1Y0.String(),
258+
stableVersion: v1Y0.String(),
259+
},
260+
beforeDNSVersion: fakeCurrentCoreDNSVersion,
261+
262+
expectedUpgrades: nil,
263+
allowExperimental: false,
264+
errExpected: false,
265+
},
266+
{
267+
name: "get stable version from CI label failed",
268+
vg: &fakeVersionGetter{
269+
clusterVersion: v1Y0.String(),
270+
componentVersion: v1Y0.String(),
271+
kubeletVersion: v1Y0.String(),
272+
kubeadmVersion: v1Y0.String(),
273+
etcdVersion: fakeCurrentEtcdVersion,
274+
275+
stablePatchVersion: v1Y0.String(),
276+
stableVersion: "",
277+
},
278+
beforeDNSVersion: fakeCurrentCoreDNSVersion,
279+
deployDNSFailed: true,
280+
expectedUpgrades: nil,
281+
allowExperimental: false,
282+
errExpected: true,
283+
},
157284
{
158285
name: "simple patch version upgrade",
159286
vg: &fakeVersionGetter{
@@ -781,30 +908,7 @@ func TestGetAvailableUpgrades(t *testing.T) {
781908

782909
dnsName := constants.CoreDNSDeploymentName
783910

784-
client := clientsetfake.NewSimpleClientset(&apps.Deployment{
785-
TypeMeta: metav1.TypeMeta{
786-
Kind: "Deployment",
787-
APIVersion: "apps/v1",
788-
},
789-
ObjectMeta: metav1.ObjectMeta{
790-
Name: dnsName,
791-
Namespace: "kube-system",
792-
Labels: map[string]string{
793-
"k8s-app": "kube-dns",
794-
},
795-
},
796-
Spec: apps.DeploymentSpec{
797-
Template: v1.PodTemplateSpec{
798-
Spec: v1.PodSpec{
799-
Containers: []v1.Container{
800-
{
801-
Image: "test:" + rt.beforeDNSVersion,
802-
},
803-
},
804-
},
805-
},
806-
},
807-
})
911+
client := newMockClientForTest(t, dnsName, rt.beforeDNSVersion, rt.deployDNSFailed)
808912

809913
actualUpgrades, actualErr := GetAvailableUpgrades(rt.vg, rt.allowExperimental, rt.allowRCs, client, &output.TextPrinter{})
810914
if diff := cmp.Diff(rt.expectedUpgrades, actualUpgrades); len(diff) > 0 {
@@ -995,3 +1099,42 @@ func TestGetSuggestedEtcdVersion(t *testing.T) {
9951099
})
9961100
}
9971101
}
1102+
1103+
func newMockClientForTest(t *testing.T, dnsName string, dnsVersion string, multiDNS bool) *clientsetfake.Clientset {
1104+
client := clientsetfake.NewSimpleClientset()
1105+
createDeployment := func(name string) {
1106+
_, err := client.AppsV1().Deployments(metav1.NamespaceSystem).Create(context.TODO(), &apps.Deployment{
1107+
TypeMeta: metav1.TypeMeta{
1108+
Kind: "Deployment",
1109+
APIVersion: "apps/v1",
1110+
},
1111+
ObjectMeta: metav1.ObjectMeta{
1112+
Name: dnsName + name,
1113+
Namespace: "kube-system",
1114+
Labels: map[string]string{
1115+
"k8s-app": "kube-dns",
1116+
},
1117+
},
1118+
Spec: apps.DeploymentSpec{
1119+
Template: v1.PodTemplateSpec{
1120+
Spec: v1.PodSpec{
1121+
Containers: []v1.Container{
1122+
{
1123+
Image: "test:" + dnsVersion + name,
1124+
},
1125+
},
1126+
},
1127+
},
1128+
},
1129+
}, metav1.CreateOptions{})
1130+
if err != nil {
1131+
t.Fatalf("error creating deployment: %v", err)
1132+
}
1133+
}
1134+
1135+
createDeployment("")
1136+
if multiDNS {
1137+
createDeployment("dns2")
1138+
}
1139+
return client
1140+
}

0 commit comments

Comments
 (0)