Skip to content

Commit cdd49d0

Browse files
committed
Added unit tests for conversion functions added for setting v3 APIVersion
1 parent 18cd641 commit cdd49d0

File tree

2 files changed

+246
-8
lines changed

2 files changed

+246
-8
lines changed

api/v1alpha2/conversion.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
apiconversion "k8s.io/apimachinery/pkg/conversion"
2424
"k8s.io/apimachinery/pkg/runtime/schema"
2525
"sigs.k8s.io/cluster-api/api/v1alpha3"
26-
bootstrapv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1alpha3"
26+
bootstrapv1a3 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1alpha3"
2727
"sigs.k8s.io/controller-runtime/pkg/conversion"
2828
)
2929

@@ -166,14 +166,15 @@ func Convert_v1alpha2_MachineSpec_To_v1alpha3_MachineSpec(in *MachineSpec, out *
166166
if err != nil {
167167
return err
168168
}
169-
if inGV.Group == bootstrapv1.GroupVersion.Group && (out.Bootstrap.ConfigRef.Kind == kubeadmConfigKind || out.Bootstrap.ConfigRef.Kind == kubeadmConfigTemplateKind) {
170-
out.Bootstrap.ConfigRef.APIVersion = bootstrapv1.GroupVersion.String()
171-
}
172169

173170
if err := autoConvert_v1alpha2_MachineSpec_To_v1alpha3_MachineSpec(in, out, s); err != nil {
174171
return err
175172
}
176173

174+
if inGV.Group == bootstrapv1a3.GroupVersion.Group && (out.Bootstrap.ConfigRef.Kind == kubeadmConfigKind || out.Bootstrap.ConfigRef.Kind == kubeadmConfigTemplateKind) {
175+
out.Bootstrap.ConfigRef.APIVersion = bootstrapv1a3.GroupVersion.String()
176+
}
177+
177178
// Discards unused ObjectMeta
178179

179180
return nil
@@ -184,23 +185,33 @@ func Convert_v1alpha2_MachineSetSpec_To_v1alpha3_MachineSetSpec(in *MachineSetSp
184185
if err != nil {
185186
return err
186187
}
187-
if inGV.Group == bootstrapv1.GroupVersion.Group && (out.Template.Spec.Bootstrap.ConfigRef.Kind == kubeadmConfigKind || out.Template.Spec.Bootstrap.ConfigRef.Kind == kubeadmConfigTemplateKind) {
188+
189+
if err = autoConvert_v1alpha2_MachineSetSpec_To_v1alpha3_MachineSetSpec(in, out, s); err != nil {
190+
return err
191+
}
192+
193+
if inGV.Group == bootstrapv1a3.GroupVersion.Group && (out.Template.Spec.Bootstrap.ConfigRef.Kind == kubeadmConfigKind || out.Template.Spec.Bootstrap.ConfigRef.Kind == kubeadmConfigTemplateKind) {
188194
out.Template.Spec.Bootstrap.ConfigRef.APIVersion = in.Template.Spec.Bootstrap.ConfigRef.GroupVersionKind().Group + "/" + "v1alpha3"
189195
}
190196

191-
return autoConvert_v1alpha2_MachineSetSpec_To_v1alpha3_MachineSetSpec(in, out, s)
197+
return nil
192198
}
193199

194200
func Convert_v1alpha2_MachineDeploymentSpec_To_v1alpha3_MachineDeploymentSpec(in *MachineDeploymentSpec, out *v1alpha3.MachineDeploymentSpec, s apiconversion.Scope) error {
195201
inGV, err := schema.ParseGroupVersion(in.Template.Spec.Bootstrap.ConfigRef.APIVersion)
196202
if err != nil {
197203
return err
198204
}
199-
if inGV.Group == bootstrapv1.GroupVersion.Group && (out.Template.Spec.Bootstrap.ConfigRef.Kind == kubeadmConfigKind || out.Template.Spec.Bootstrap.ConfigRef.Kind == kubeadmConfigTemplateKind) {
205+
206+
if err = autoConvert_v1alpha2_MachineDeploymentSpec_To_v1alpha3_MachineDeploymentSpec(in, out, s); err != nil {
207+
return err
208+
}
209+
210+
if inGV.Group == bootstrapv1a3.GroupVersion.Group && (out.Template.Spec.Bootstrap.ConfigRef.Kind == kubeadmConfigKind || out.Template.Spec.Bootstrap.ConfigRef.Kind == kubeadmConfigTemplateKind) {
200211
out.Template.Spec.Bootstrap.ConfigRef.APIVersion = in.Template.Spec.Bootstrap.ConfigRef.GroupVersionKind().Group + "/" + "v1alpha3"
201212
}
202213

203-
return autoConvert_v1alpha2_MachineDeploymentSpec_To_v1alpha3_MachineDeploymentSpec(in, out, s)
214+
return nil
204215
}
205216

206217
func Convert_v1alpha2_ClusterSpec_To_v1alpha3_ClusterSpec(in *ClusterSpec, out *v1alpha3.ClusterSpec, s apiconversion.Scope) error {

api/v1alpha2/conversion_test.go

Lines changed: 227 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
/*
2+
Copyright 2019 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package v1alpha2
18+
19+
import (
20+
apicorev1 "k8s.io/api/core/v1"
21+
"sigs.k8s.io/cluster-api/api/v1alpha3"
22+
bootstrapv1a2 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1alpha2"
23+
bootstrapv1a3 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1alpha3"
24+
"testing"
25+
)
26+
27+
var (
28+
kubeAdmObj = &apicorev1.ObjectReference{
29+
Kind: kubeadmConfigKind,
30+
APIVersion: bootstrapv1a2.GroupVersion.String(),
31+
}
32+
kubeAdmConfigTemplateObj = &apicorev1.ObjectReference{
33+
Kind: kubeadmConfigTemplateKind,
34+
APIVersion: bootstrapv1a2.GroupVersion.String(),
35+
}
36+
kubeAdmObjInvalidAPIVersion = &apicorev1.ObjectReference{
37+
Kind: kubeadmConfigKind,
38+
APIVersion: bootstrapv1a2.GroupVersion.String() + "/",
39+
}
40+
verV1alpha3 = bootstrapv1a3.GroupVersion.String()
41+
)
42+
43+
func TestConvert_v1alpha2_MachineSpec_To_v1alpha3_MachineSpec(t *testing.T) {
44+
45+
t.Run("Convert 'v1alpha2' APIVersion to 'v1alpha3' for 'KubeadmConfig' object reference in MachineSpec", func(t *testing.T) {
46+
b := new(Bootstrap)
47+
b.ConfigRef = kubeAdmObj
48+
in := new(MachineSpec)
49+
in.Bootstrap = *b
50+
out := new(v1alpha3.MachineSpec)
51+
52+
err := Convert_v1alpha2_MachineSpec_To_v1alpha3_MachineSpec(in, out, nil)
53+
if err != nil {
54+
t.Fatalf("Expected no errors, got %v", err)
55+
}
56+
if out.Bootstrap.ConfigRef.APIVersion != verV1alpha3 {
57+
t.Fatalf("Unexpected APIVersion value in MachineSpec: "+
58+
"expected: %q\n"+
59+
"actual : %q", verV1alpha3, out.Bootstrap.ConfigRef.APIVersion)
60+
}
61+
if out.Bootstrap.ConfigRef.Kind != kubeadmConfigKind {
62+
t.Fatalf("Unexpected Kind value in MachineSpec: "+
63+
"expected: %q\n"+
64+
"actual : %q", kubeadmConfigKind, out.Bootstrap.ConfigRef.Kind)
65+
}
66+
})
67+
68+
t.Run("Convert 'v1alpha2' APIVersion to 'v1alpha3' for 'kubeAdmConflictTemplate' object reference in MachineSpec", func(t *testing.T) {
69+
b := new(Bootstrap)
70+
b.ConfigRef = kubeAdmConfigTemplateObj
71+
in := new(MachineSpec)
72+
in.Bootstrap = *b
73+
out := new(v1alpha3.MachineSpec)
74+
75+
err := Convert_v1alpha2_MachineSpec_To_v1alpha3_MachineSpec(in, out, nil)
76+
if err != nil {
77+
t.Fatalf("Expected no errors, got %v", err)
78+
}
79+
if out.Bootstrap.ConfigRef.APIVersion != verV1alpha3 {
80+
t.Fatalf("\nUnexpected APIVersion value in MachineSpec: "+
81+
"\nexpected: %q"+
82+
"\nactual : %q", verV1alpha3, out.Bootstrap.ConfigRef.APIVersion)
83+
}
84+
if out.Bootstrap.ConfigRef.Kind != kubeadmConfigTemplateKind {
85+
t.Fatalf("\nUnexpected Kind value in MachineSpec: "+
86+
"\nexpected: %q"+
87+
"\nactual : %q", kubeadmConfigTemplateKind, out.Bootstrap.ConfigRef.Kind)
88+
}
89+
})
90+
91+
t.Run("Invalid 'v1alpha2' APIVersion for 'KubeadmConfig' object reference in MachineSpec", func(t *testing.T) {
92+
b := new(Bootstrap)
93+
b.ConfigRef = kubeAdmObjInvalidAPIVersion
94+
in := new(MachineSpec)
95+
in.Bootstrap = *b
96+
out := new(v1alpha3.MachineSpec)
97+
98+
err := Convert_v1alpha2_MachineSpec_To_v1alpha3_MachineSpec(in, out, nil)
99+
if err == nil {
100+
t.Fatalf("\nExpected error, but got nil")
101+
}
102+
})
103+
}
104+
105+
func TestConvert_v1alpha2_MachineSetSpec_To_v1alpha3_MachineSetSpec(t *testing.T) {
106+
107+
t.Run("Convert 'v1alpha2' APIVersion to 'v1alpha3' for 'KubeadmConfig' object reference in MachineSetSpec", func(t *testing.T) {
108+
b := new(Bootstrap)
109+
b.ConfigRef = kubeAdmObj
110+
in := new(MachineSetSpec)
111+
in.Template.Spec.Bootstrap = *b
112+
out := new(v1alpha3.MachineSetSpec)
113+
114+
err := Convert_v1alpha2_MachineSetSpec_To_v1alpha3_MachineSetSpec(in, out, nil)
115+
if err != nil {
116+
t.Fatalf("Expected no errors, got %v", err)
117+
}
118+
if out.Template.Spec.Bootstrap.ConfigRef.APIVersion != verV1alpha3 {
119+
t.Fatalf("\nUnexpected APIVersion value in MachineSetSpec: "+
120+
"\nexpected: %q"+
121+
"\nactual : %q", verV1alpha3, out.Template.Spec.Bootstrap.ConfigRef.APIVersion)
122+
}
123+
if out.Template.Spec.Bootstrap.ConfigRef.Kind != kubeadmConfigKind {
124+
t.Fatalf("\nUnexpected Kind value in MachineSetSpec: "+
125+
"\nexpected: %q"+
126+
"\nactual : %q", kubeadmConfigKind, out.Template.Spec.Bootstrap.ConfigRef.Kind)
127+
}
128+
})
129+
130+
t.Run("Convert 'v1alpha2' APIVersion to 'v1alpha3' for 'kubeAdmConflictTemplate' object reference in MachineSetSpec", func(t *testing.T) {
131+
b := new(Bootstrap)
132+
b.ConfigRef = kubeAdmConfigTemplateObj
133+
in := new(MachineSetSpec)
134+
in.Template.Spec.Bootstrap = *b
135+
out := new(v1alpha3.MachineSetSpec)
136+
137+
err := Convert_v1alpha2_MachineSetSpec_To_v1alpha3_MachineSetSpec(in, out, nil)
138+
if err != nil {
139+
t.Fatalf("Expected no errors, got %v", err)
140+
}
141+
if out.Template.Spec.Bootstrap.ConfigRef.APIVersion != verV1alpha3 {
142+
t.Fatalf("\nUnexpected APIVersion value in MachineSetSpec: "+
143+
"\nexpected: %q"+
144+
"\nactual : %q", verV1alpha3, out.Template.Spec.Bootstrap.ConfigRef.APIVersion)
145+
}
146+
if out.Template.Spec.Bootstrap.ConfigRef.Kind != kubeadmConfigTemplateKind {
147+
t.Fatalf("\nUnexpected Kind value in MachineSetSpec: "+
148+
"\nexpected: %q"+
149+
"\nactual : %q", kubeadmConfigTemplateKind, out.Template.Spec.Bootstrap.ConfigRef.Kind)
150+
}
151+
})
152+
153+
t.Run("Invalid 'v1alpha2' APIVersion for 'KubeadmConfig' object reference in MachineSetSpec", func(t *testing.T) {
154+
b := new(Bootstrap)
155+
b.ConfigRef = kubeAdmObjInvalidAPIVersion
156+
in := new(MachineSetSpec)
157+
in.Template.Spec.Bootstrap = *b
158+
out := new(v1alpha3.MachineSetSpec)
159+
160+
err := Convert_v1alpha2_MachineSetSpec_To_v1alpha3_MachineSetSpec(in, out, nil)
161+
if err == nil {
162+
t.Fatalf("\nExpected error, but got nil")
163+
}
164+
})
165+
}
166+
167+
func TestConvert_v1alpha2_MachineDeploymentSpec_To_v1alpha3_MachineDeploymentSpec(t *testing.T) {
168+
169+
t.Run("Convert 'v1alpha2' APIVersion to 'v1alpha3' for 'KubeadmConfig' object reference in MachineDeploymentSpec", func(t *testing.T) {
170+
b := new(Bootstrap)
171+
b.ConfigRef = kubeAdmObj
172+
in := new(MachineDeploymentSpec)
173+
in.Template.Spec.Bootstrap = *b
174+
out := new(v1alpha3.MachineDeploymentSpec)
175+
176+
err := Convert_v1alpha2_MachineDeploymentSpec_To_v1alpha3_MachineDeploymentSpec(in, out, nil)
177+
if err != nil {
178+
t.Fatalf("Expected no errors, got %v", err)
179+
}
180+
if out.Template.Spec.Bootstrap.ConfigRef.APIVersion != verV1alpha3 {
181+
t.Fatalf("\nUnexpected APIVersion value in MachineSetSpec: "+
182+
"\nexpected: %q"+
183+
"\nactual : %q", verV1alpha3, out.Template.Spec.Bootstrap.ConfigRef.APIVersion)
184+
}
185+
if out.Template.Spec.Bootstrap.ConfigRef.Kind != kubeadmConfigKind {
186+
t.Fatalf("\nUnexpected Kind value in MachineSpec: "+
187+
"\nexpected: %q"+
188+
"\nactual : %q", kubeadmConfigKind, out.Template.Spec.Bootstrap.ConfigRef.Kind)
189+
}
190+
})
191+
192+
t.Run("Convert 'v1alpha2' APIVersion to 'v1alpha3' for 'kubeAdmConflictTemplate' object reference in MachineDeploymentSpec", func(t *testing.T) {
193+
b := new(Bootstrap)
194+
b.ConfigRef = kubeAdmConfigTemplateObj
195+
in := new(MachineDeploymentSpec)
196+
in.Template.Spec.Bootstrap = *b
197+
out := new(v1alpha3.MachineDeploymentSpec)
198+
199+
err := Convert_v1alpha2_MachineDeploymentSpec_To_v1alpha3_MachineDeploymentSpec(in, out, nil)
200+
if err != nil {
201+
t.Fatalf("Expected no errors, got %v", err)
202+
}
203+
if out.Template.Spec.Bootstrap.ConfigRef.APIVersion != verV1alpha3 {
204+
t.Fatalf("\nUnexpected APIVersion value in MachineDeploymentSpec:"+
205+
"\nexpected: %q"+
206+
"\nactual : %q", verV1alpha3, out.Template.Spec.Bootstrap.ConfigRef.APIVersion)
207+
}
208+
if out.Template.Spec.Bootstrap.ConfigRef.Kind != kubeadmConfigTemplateKind {
209+
t.Fatalf("\nUnexpected Kind value in MachineDeploymentSpec:"+
210+
"\nexpected: %q"+
211+
"\nactual : %q", kubeadmConfigTemplateKind, out.Template.Spec.Bootstrap.ConfigRef.Kind)
212+
}
213+
})
214+
215+
t.Run("Invalid 'v1alpha2' APIVersion for 'KubeadmConfig' object reference in MachineSetSpec", func(t *testing.T) {
216+
b := new(Bootstrap)
217+
b.ConfigRef = kubeAdmObjInvalidAPIVersion
218+
in := new(MachineDeploymentSpec)
219+
in.Template.Spec.Bootstrap = *b
220+
out := new(v1alpha3.MachineDeploymentSpec)
221+
222+
err := Convert_v1alpha2_MachineDeploymentSpec_To_v1alpha3_MachineDeploymentSpec(in, out, nil)
223+
if err == nil {
224+
t.Fatalf("\nExpected error, but got nil")
225+
}
226+
})
227+
}

0 commit comments

Comments
 (0)