1
16
17 package v1beta2_test
18
19 import (
20 "testing"
21
22 "k8s.io/api/apps/v1beta2"
23 v1 "k8s.io/api/core/v1"
24 "k8s.io/apimachinery/pkg/util/intstr"
25 "k8s.io/kubernetes/pkg/api/legacyscheme"
26 "k8s.io/kubernetes/pkg/apis/apps"
27 "k8s.io/kubernetes/pkg/apis/autoscaling"
28 api "k8s.io/kubernetes/pkg/apis/core"
29
30 apiequality "k8s.io/apimachinery/pkg/api/equality"
31 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
32 utilpointer "k8s.io/utils/pointer"
33 )
34
35 func TestV1beta2StatefulSetSpecConversion(t *testing.T) {
36 replicas := utilpointer.Int32(2)
37 selector := &metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}
38 v1beta2Template := v1.PodTemplateSpec{
39 ObjectMeta: metav1.ObjectMeta{Name: "foo"},
40 Spec: v1.PodSpec{
41 RestartPolicy: v1.RestartPolicy("bar"),
42 SecurityContext: new(v1.PodSecurityContext),
43 },
44 }
45 apiTemplate := api.PodTemplateSpec{
46 ObjectMeta: metav1.ObjectMeta{Name: "foo"},
47 Spec: api.PodSpec{
48 RestartPolicy: api.RestartPolicy("bar"),
49 SecurityContext: new(api.PodSecurityContext),
50 },
51 }
52 testcases := map[string]struct {
53 stsSpec1 *apps.StatefulSetSpec
54 stsSepc2 *v1beta2.StatefulSetSpec
55 }{
56 "StatefulSetSpec Conversion 1": {
57 stsSpec1: &apps.StatefulSetSpec{
58 Replicas: *replicas,
59 Template: apiTemplate,
60 },
61 stsSepc2: &v1beta2.StatefulSetSpec{
62 Replicas: replicas,
63 Template: v1beta2Template,
64 },
65 },
66 "StatefulSetSpec Conversion 2": {
67 stsSpec1: &apps.StatefulSetSpec{
68 Replicas: *replicas,
69 Selector: selector,
70 Template: apiTemplate,
71 ServiceName: "foo",
72 PodManagementPolicy: apps.PodManagementPolicyType("bar"),
73 },
74 stsSepc2: &v1beta2.StatefulSetSpec{
75 Replicas: replicas,
76 Selector: selector,
77 Template: v1beta2Template,
78 ServiceName: "foo",
79 PodManagementPolicy: v1beta2.PodManagementPolicyType("bar"),
80 },
81 },
82 }
83
84 for k, tc := range testcases {
85
86 internal1 := &v1beta2.StatefulSetSpec{}
87 if err := legacyscheme.Scheme.Convert(tc.stsSpec1, internal1, nil); err != nil {
88 t.Errorf("%q - %q: unexpected error: %v", k, "from extensions to v1beta2", err)
89 }
90
91 if !apiequality.Semantic.DeepEqual(internal1, tc.stsSepc2) {
92 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "from extensions to v1beta2", tc.stsSepc2, internal1)
93 }
94
95
96 internal2 := &apps.StatefulSetSpec{}
97 if err := legacyscheme.Scheme.Convert(tc.stsSepc2, internal2, nil); err != nil {
98 t.Errorf("%q - %q: unexpected error: %v", k, "from v1beta2 to extensions", err)
99 }
100 if !apiequality.Semantic.DeepEqual(internal2, tc.stsSpec1) {
101 t.Errorf("%q- %q: expected\n\t%#v, got \n\t%#v", k, "from v1beta2 to extensions", tc.stsSpec1, internal2)
102 }
103 }
104 }
105
106 func TestV1beta2StatefulSetUpdateStrategyConversion(t *testing.T) {
107 partition := utilpointer.Int32(2)
108 v1beta2rollingUpdate := new(v1beta2.RollingUpdateStatefulSetStrategy)
109 v1beta2rollingUpdate.Partition = partition
110 appsrollingUpdate := new(apps.RollingUpdateStatefulSetStrategy)
111 appsrollingUpdate.Partition = *partition
112 testcases := map[string]struct {
113 stsUpdateStrategy1 *apps.StatefulSetUpdateStrategy
114 stsUpdateStrategy2 *v1beta2.StatefulSetUpdateStrategy
115 }{
116 "StatefulSetUpdateStrategy Conversion 1": {
117 stsUpdateStrategy1: &apps.StatefulSetUpdateStrategy{Type: apps.StatefulSetUpdateStrategyType("foo")},
118 stsUpdateStrategy2: &v1beta2.StatefulSetUpdateStrategy{Type: v1beta2.StatefulSetUpdateStrategyType("foo")},
119 },
120 "StatefulSetUpdateStrategy Conversion 2": {
121 stsUpdateStrategy1: &apps.StatefulSetUpdateStrategy{
122 Type: apps.StatefulSetUpdateStrategyType("foo"),
123 RollingUpdate: appsrollingUpdate,
124 },
125 stsUpdateStrategy2: &v1beta2.StatefulSetUpdateStrategy{
126 Type: v1beta2.StatefulSetUpdateStrategyType("foo"),
127 RollingUpdate: v1beta2rollingUpdate,
128 },
129 },
130 }
131
132 for k, tc := range testcases {
133
134 internal1 := &v1beta2.StatefulSetUpdateStrategy{}
135 if err := legacyscheme.Scheme.Convert(tc.stsUpdateStrategy1, internal1, nil); err != nil {
136 t.Errorf("%q - %q: unexpected error: %v", "apps -> v1beta2", k, err)
137 }
138
139 if !apiequality.Semantic.DeepEqual(internal1, tc.stsUpdateStrategy2) {
140 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", "apps -> v1beta2", k, tc.stsUpdateStrategy2, internal1)
141 }
142
143
144 internal2 := &apps.StatefulSetUpdateStrategy{}
145 if err := legacyscheme.Scheme.Convert(tc.stsUpdateStrategy2, internal2, nil); err != nil {
146 t.Errorf("%q - %q: unexpected error: %v", "v1beta2 -> apps", k, err)
147 }
148 if !apiequality.Semantic.DeepEqual(internal2, tc.stsUpdateStrategy1) {
149 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", "v1beta2 -> apps", k, tc.stsUpdateStrategy1, internal2)
150 }
151 }
152 }
153
154 func TestV1beta2RollingUpdateDaemonSetConversion(t *testing.T) {
155 intorstr := intstr.FromInt32(1)
156 maxSurge := intstr.FromInt32(0)
157 testcases := map[string]struct {
158 rollingUpdateDs1 *apps.RollingUpdateDaemonSet
159 rollingUpdateDs2 *v1beta2.RollingUpdateDaemonSet
160 }{
161 "RollingUpdateDaemonSet Conversion 2": {
162 rollingUpdateDs1: &apps.RollingUpdateDaemonSet{MaxUnavailable: intorstr, MaxSurge: maxSurge},
163 rollingUpdateDs2: &v1beta2.RollingUpdateDaemonSet{MaxUnavailable: &intorstr, MaxSurge: &maxSurge},
164 },
165 }
166
167 for k, tc := range testcases {
168
169 internal1 := &v1beta2.RollingUpdateDaemonSet{}
170 if err := legacyscheme.Scheme.Convert(tc.rollingUpdateDs1, internal1, nil); err != nil {
171 t.Errorf("%q - %q: unexpected error: %v", k, "from extensions to v1beta2", err)
172 }
173 if !apiequality.Semantic.DeepEqual(internal1, tc.rollingUpdateDs2) {
174 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "from extensions to v1beta2", tc.rollingUpdateDs2, internal1)
175 }
176
177
178 internal2 := &apps.RollingUpdateDaemonSet{}
179 if err := legacyscheme.Scheme.Convert(tc.rollingUpdateDs2, internal2, nil); err != nil {
180 t.Errorf("%q - %q: unexpected error: %v", k, "from v1beta2 to extensions", err)
181 }
182 if !apiequality.Semantic.DeepEqual(internal2, tc.rollingUpdateDs1) {
183 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "from v1beta2 to extensions", tc.rollingUpdateDs1, internal2)
184 }
185 }
186 }
187
188 func TestV1beta2StatefulSetStatusConversion(t *testing.T) {
189 observedGeneration := new(int64)
190 *observedGeneration = 2
191 collisionCount := new(int32)
192 *collisionCount = 1
193 testcases := map[string]struct {
194 stsStatus1 *apps.StatefulSetStatus
195 stsStatus2 *v1beta2.StatefulSetStatus
196 }{
197 "StatefulSetStatus Conversion 1": {
198 stsStatus1: &apps.StatefulSetStatus{
199 Replicas: int32(3),
200 ReadyReplicas: int32(1),
201 CurrentReplicas: int32(3),
202 UpdatedReplicas: int32(3),
203 CurrentRevision: "12345",
204 UpdateRevision: "23456",
205 ObservedGeneration: observedGeneration,
206 },
207 stsStatus2: &v1beta2.StatefulSetStatus{
208 Replicas: int32(3),
209 ReadyReplicas: int32(1),
210 CurrentReplicas: int32(3),
211 UpdatedReplicas: int32(3),
212 CurrentRevision: "12345",
213 UpdateRevision: "23456",
214 ObservedGeneration: *observedGeneration,
215 },
216 },
217 "StatefulSetStatus Conversion 2": {
218 stsStatus1: &apps.StatefulSetStatus{
219 ObservedGeneration: observedGeneration,
220 Replicas: int32(3),
221 ReadyReplicas: int32(1),
222 CurrentReplicas: int32(3),
223 UpdatedReplicas: int32(3),
224 CurrentRevision: "12345",
225 UpdateRevision: "23456",
226 CollisionCount: collisionCount,
227 },
228 stsStatus2: &v1beta2.StatefulSetStatus{
229 ObservedGeneration: *observedGeneration,
230 Replicas: int32(3),
231 ReadyReplicas: int32(1),
232 CurrentReplicas: int32(3),
233 UpdatedReplicas: int32(3),
234 CurrentRevision: "12345",
235 UpdateRevision: "23456",
236 CollisionCount: collisionCount,
237 },
238 },
239 }
240
241 for k, tc := range testcases {
242
243 internal1 := &v1beta2.StatefulSetStatus{}
244 if err := legacyscheme.Scheme.Convert(tc.stsStatus1, internal1, nil); err != nil {
245 t.Errorf("%q - %q: unexpected error: %v", k, "from apps to v1beta2", err)
246 }
247
248 if !apiequality.Semantic.DeepEqual(internal1, tc.stsStatus2) {
249 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "from apps to v1beta2", tc.stsStatus2, internal1)
250 }
251
252
253 internal2 := &apps.StatefulSetStatus{}
254 if err := legacyscheme.Scheme.Convert(tc.stsStatus2, internal2, nil); err != nil {
255 t.Errorf("%q - %q: unexpected error: %v", k, "from v1beta2 to apps", err)
256 }
257 if !apiequality.Semantic.DeepEqual(internal2, tc.stsStatus1) {
258 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "from v1beta2 to apps", tc.stsStatus1, internal2)
259 }
260 }
261 }
262
263 func TestV1beta2DeploymentConversion(t *testing.T) {
264 replica := utilpointer.Int32(2)
265 rollbackTo := new(apps.RollbackConfig)
266 rollbackTo.Revision = int64(2)
267 testcases := map[string]struct {
268 deployment1 *apps.Deployment
269 deployment2 *v1beta2.Deployment
270 }{
271 "Deployment Conversion 1": {
272 deployment1: &apps.Deployment{
273 Spec: apps.DeploymentSpec{
274 Replicas: *replica,
275 RollbackTo: rollbackTo,
276 Template: api.PodTemplateSpec{
277 Spec: api.PodSpec{
278 SecurityContext: new(api.PodSecurityContext),
279 },
280 },
281 },
282 },
283 deployment2: &v1beta2.Deployment{
284 ObjectMeta: metav1.ObjectMeta{
285 Annotations: map[string]string{v1beta2.DeprecatedRollbackTo: "2"},
286 },
287 Spec: v1beta2.DeploymentSpec{
288 Replicas: replica,
289 Template: v1.PodTemplateSpec{
290 Spec: v1.PodSpec{
291 SecurityContext: new(v1.PodSecurityContext),
292 },
293 },
294 },
295 },
296 },
297 "Deployment Conversion 2": {
298 deployment1: &apps.Deployment{
299 Spec: apps.DeploymentSpec{
300 Replicas: *replica,
301 Template: api.PodTemplateSpec{
302 Spec: api.PodSpec{
303 SecurityContext: new(api.PodSecurityContext),
304 },
305 },
306 },
307 },
308 deployment2: &v1beta2.Deployment{
309 Spec: v1beta2.DeploymentSpec{
310 Replicas: replica,
311 Template: v1.PodTemplateSpec{
312 Spec: v1.PodSpec{
313 SecurityContext: new(v1.PodSecurityContext),
314 },
315 },
316 },
317 },
318 },
319 }
320
321 for k, tc := range testcases {
322
323 internal1 := &v1beta2.Deployment{}
324 if err := legacyscheme.Scheme.Convert(tc.deployment1, internal1, nil); err != nil {
325 t.Errorf("%q - %q: unexpected error: %v", k, "from extensions to v1beta2", err)
326 }
327 if !apiequality.Semantic.DeepEqual(internal1, tc.deployment2) {
328 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "from extensions to v1beta2", tc.deployment2, internal1)
329 }
330
331
332 internal2 := &apps.Deployment{}
333 if err := legacyscheme.Scheme.Convert(tc.deployment2, internal2, nil); err != nil {
334 t.Errorf("%q - %q: unexpected error: %v", k, "from v1beta2 to extensions", err)
335 }
336 if !apiequality.Semantic.DeepEqual(internal2, tc.deployment1) {
337 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "from v1beta2 to extensions", tc.deployment1, internal2)
338 }
339 }
340 }
341
342 func TestV1beta2ScaleStatusConversion(t *testing.T) {
343 matchLabels := map[string]string{"foo": "bar"}
344 selector1 := &metav1.LabelSelector{MatchLabels: matchLabels}
345 labelsSelector1, _ := metav1.LabelSelectorAsSelector(selector1)
346
347 matchExpressions := []metav1.LabelSelectorRequirement{
348 {Key: "foo", Operator: metav1.LabelSelectorOpIn, Values: []string{"foo"}},
349 }
350 selector2 := &metav1.LabelSelector{MatchLabels: matchLabels, MatchExpressions: matchExpressions}
351 labelsSelector2, _ := metav1.LabelSelectorAsSelector(selector2)
352
353 testcases := map[string]struct {
354 scaleStatus1 *autoscaling.ScaleStatus
355 scaleStatus2 *v1beta2.ScaleStatus
356 }{
357 "ScaleStatus Conversion 1": {
358 scaleStatus1: &autoscaling.ScaleStatus{Replicas: 2},
359 scaleStatus2: &v1beta2.ScaleStatus{Replicas: 2},
360 },
361 "ScaleStatus Conversion 2": {
362 scaleStatus1: &autoscaling.ScaleStatus{Replicas: 2, Selector: labelsSelector1.String()},
363 scaleStatus2: &v1beta2.ScaleStatus{Replicas: 2, Selector: matchLabels, TargetSelector: labelsSelector1.String()},
364 },
365 "ScaleStatus Conversion 3": {
366 scaleStatus1: &autoscaling.ScaleStatus{Replicas: 2, Selector: labelsSelector2.String()},
367 scaleStatus2: &v1beta2.ScaleStatus{Replicas: 2, Selector: map[string]string{}, TargetSelector: labelsSelector2.String()},
368 },
369 }
370
371 for k, tc := range testcases {
372
373 internal1 := &v1beta2.ScaleStatus{}
374 if err := legacyscheme.Scheme.Convert(tc.scaleStatus1, internal1, nil); err != nil {
375 t.Errorf("%q - %q: unexpected error: %v", k, "autoscaling -> v1beta2", err)
376 }
377
378 if !apiequality.Semantic.DeepEqual(internal1, tc.scaleStatus2) {
379 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "autoscaling -> v1beta2", tc.scaleStatus2, internal1)
380 }
381
382
383 internal2 := &autoscaling.ScaleStatus{}
384 if err := legacyscheme.Scheme.Convert(tc.scaleStatus2, internal2, nil); err != nil {
385 t.Errorf("%q - %q: unexpected error: %v", k, "v1beta2 -> autoscaling", err)
386 }
387 if !apiequality.Semantic.DeepEqual(internal2, tc.scaleStatus1) {
388 t.Errorf("%q - %q: expected\n\t%+v, got \n\t%+v", k, "v1beta2 -> autoscaling", tc.scaleStatus1, internal2)
389 }
390 }
391 }
392
393 func TestV1beta2DeploymentSpecConversion(t *testing.T) {
394 replica := utilpointer.Int32(2)
395 revisionHistoryLimit := utilpointer.Int32(2)
396 progressDeadlineSeconds := utilpointer.Int32(2)
397
398 testcases := map[string]struct {
399 deploymentSpec1 *apps.DeploymentSpec
400 deploymentSpec2 *v1beta2.DeploymentSpec
401 }{
402 "DeploymentSpec Conversion 1": {
403 deploymentSpec1: &apps.DeploymentSpec{
404 Replicas: *replica,
405 Template: api.PodTemplateSpec{
406 Spec: api.PodSpec{
407 SecurityContext: new(api.PodSecurityContext),
408 },
409 },
410 },
411 deploymentSpec2: &v1beta2.DeploymentSpec{
412 Replicas: replica,
413 Template: v1.PodTemplateSpec{
414 Spec: v1.PodSpec{
415 SecurityContext: new(v1.PodSecurityContext),
416 },
417 },
418 },
419 },
420 "DeploymentSpec Conversion 2": {
421 deploymentSpec1: &apps.DeploymentSpec{
422 Replicas: *replica,
423 RevisionHistoryLimit: revisionHistoryLimit,
424 MinReadySeconds: 2,
425 Paused: true,
426 Template: api.PodTemplateSpec{
427 Spec: api.PodSpec{
428 SecurityContext: new(api.PodSecurityContext),
429 },
430 },
431 },
432 deploymentSpec2: &v1beta2.DeploymentSpec{
433 Replicas: replica,
434 RevisionHistoryLimit: revisionHistoryLimit,
435 MinReadySeconds: 2,
436 Paused: true,
437 Template: v1.PodTemplateSpec{
438 Spec: v1.PodSpec{
439 SecurityContext: new(v1.PodSecurityContext),
440 },
441 },
442 },
443 },
444 "DeploymentSpec Conversion 3": {
445 deploymentSpec1: &apps.DeploymentSpec{
446 Replicas: *replica,
447 ProgressDeadlineSeconds: progressDeadlineSeconds,
448 Template: api.PodTemplateSpec{
449 Spec: api.PodSpec{
450 SecurityContext: new(api.PodSecurityContext),
451 },
452 },
453 },
454 deploymentSpec2: &v1beta2.DeploymentSpec{
455 Replicas: replica,
456 ProgressDeadlineSeconds: progressDeadlineSeconds,
457 Template: v1.PodTemplateSpec{
458 Spec: v1.PodSpec{
459 SecurityContext: new(v1.PodSecurityContext),
460 },
461 },
462 },
463 },
464 }
465
466
467 for k, tc := range testcases {
468 internal := &v1beta2.DeploymentSpec{}
469 if err := legacyscheme.Scheme.Convert(tc.deploymentSpec1, internal, nil); err != nil {
470 t.Errorf("%q - %q: unexpected error: %v", "extensions -> v1beta2", k, err)
471 }
472
473 if !apiequality.Semantic.DeepEqual(internal, tc.deploymentSpec2) {
474 t.Errorf("%q - %q: expected\n\t%+v, got \n\t%+v", "extensions -> v1beta2", k, tc.deploymentSpec2, internal)
475 }
476 }
477
478
479 for k, tc := range testcases {
480 internal := &apps.DeploymentSpec{}
481 if err := legacyscheme.Scheme.Convert(tc.deploymentSpec2, internal, nil); err != nil {
482 t.Errorf("%q - %q: unexpected error: %v", "v1beta2 -> extensions", k, err)
483 }
484 if !apiequality.Semantic.DeepEqual(internal, tc.deploymentSpec1) {
485 t.Errorf("%q - %q: expected\n\t%+v, got \n\t%+v", "v1beta2 -> extensions", k, tc.deploymentSpec1, internal)
486 }
487 }
488
489 }
490
491 func TestV1beta2DeploymentStrategyConversion(t *testing.T) {
492 maxUnavailable := intstr.FromInt32(2)
493 maxSurge := intstr.FromInt32(2)
494 extensionsRollingUpdate := apps.RollingUpdateDeployment{MaxUnavailable: maxUnavailable, MaxSurge: maxSurge}
495 v1beta2RollingUpdate := v1beta2.RollingUpdateDeployment{MaxUnavailable: &maxUnavailable, MaxSurge: &maxSurge}
496 testcases := map[string]struct {
497 deploymentStrategy1 *apps.DeploymentStrategy
498 deploymentStrategy2 *v1beta2.DeploymentStrategy
499 }{
500 "DeploymentStrategy Conversion 1": {
501 deploymentStrategy1: &apps.DeploymentStrategy{Type: apps.DeploymentStrategyType("foo")},
502 deploymentStrategy2: &v1beta2.DeploymentStrategy{Type: v1beta2.DeploymentStrategyType("foo")},
503 },
504 "DeploymentStrategy Conversion 2": {
505 deploymentStrategy1: &apps.DeploymentStrategy{Type: apps.DeploymentStrategyType("foo"), RollingUpdate: &extensionsRollingUpdate},
506 deploymentStrategy2: &v1beta2.DeploymentStrategy{Type: v1beta2.DeploymentStrategyType("foo"), RollingUpdate: &v1beta2RollingUpdate},
507 },
508 }
509
510 for k, tc := range testcases {
511
512 internal1 := &v1beta2.DeploymentStrategy{}
513 if err := legacyscheme.Scheme.Convert(tc.deploymentStrategy1, internal1, nil); err != nil {
514 t.Errorf("%q - %q: unexpected error: %v", k, "extensions -> v1beta2", err)
515 }
516 if !apiequality.Semantic.DeepEqual(internal1, tc.deploymentStrategy2) {
517 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "extensions -> v1beta2", tc.deploymentStrategy2, internal1)
518 }
519
520
521 internal2 := &apps.DeploymentStrategy{}
522 if err := legacyscheme.Scheme.Convert(tc.deploymentStrategy2, internal2, nil); err != nil {
523 t.Errorf("%q - %q: unexpected error: %v", k, "v1beta2 -> extensions", err)
524 }
525 if !apiequality.Semantic.DeepEqual(internal2, tc.deploymentStrategy1) {
526 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "v1beta2 -> extensions", tc.deploymentStrategy1, internal2)
527 }
528 }
529 }
530
531 func TestV1beta2RollingUpdateDeploymentConversion(t *testing.T) {
532 nilIntStr := intstr.IntOrString{}
533 maxUnavailable := intstr.FromInt32(2)
534 maxSurge := intstr.FromInt32(2)
535 testcases := map[string]struct {
536 rollingUpdateDeployment1 *apps.RollingUpdateDeployment
537 rollingUpdateDeployment2 *v1beta2.RollingUpdateDeployment
538 }{
539 "RollingUpdateDeployment Conversion 1": {
540 rollingUpdateDeployment1: &apps.RollingUpdateDeployment{},
541 rollingUpdateDeployment2: &v1beta2.RollingUpdateDeployment{MaxUnavailable: &nilIntStr, MaxSurge: &nilIntStr},
542 },
543 "RollingUpdateDeployment Conversion 2": {
544 rollingUpdateDeployment1: &apps.RollingUpdateDeployment{MaxUnavailable: maxUnavailable},
545 rollingUpdateDeployment2: &v1beta2.RollingUpdateDeployment{MaxUnavailable: &maxUnavailable, MaxSurge: &nilIntStr},
546 },
547 "RollingUpdateDeployment Conversion 3": {
548 rollingUpdateDeployment1: &apps.RollingUpdateDeployment{MaxSurge: maxSurge},
549 rollingUpdateDeployment2: &v1beta2.RollingUpdateDeployment{MaxSurge: &maxSurge, MaxUnavailable: &nilIntStr},
550 },
551 "RollingUpdateDeployment Conversion 4": {
552 rollingUpdateDeployment1: &apps.RollingUpdateDeployment{MaxUnavailable: maxUnavailable, MaxSurge: maxSurge},
553 rollingUpdateDeployment2: &v1beta2.RollingUpdateDeployment{MaxUnavailable: &maxUnavailable, MaxSurge: &maxSurge},
554 },
555 }
556
557 for k, tc := range testcases {
558
559 internal1 := &v1beta2.RollingUpdateDeployment{}
560 if err := legacyscheme.Scheme.Convert(tc.rollingUpdateDeployment1, internal1, nil); err != nil {
561 t.Errorf("%q - %q: unexpected error: %v", k, "extensions -> v1beta2", err)
562 }
563 if !apiequality.Semantic.DeepEqual(internal1, tc.rollingUpdateDeployment2) {
564 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "extensions -> v1beta2", tc.rollingUpdateDeployment2, internal1)
565 }
566
567
568 internal2 := &apps.RollingUpdateDeployment{}
569 if err := legacyscheme.Scheme.Convert(tc.rollingUpdateDeployment2, internal2, nil); err != nil {
570 t.Errorf("%q - %q: unexpected error: %v", k, "v1beta2 -> extensions", err)
571 }
572 if !apiequality.Semantic.DeepEqual(internal2, tc.rollingUpdateDeployment1) {
573 t.Errorf("%q - %q: expected\n\t%#v, got \n\t%#v", k, "v1beta2 -> extensions", tc.rollingUpdateDeployment1, internal2)
574 }
575 }
576 }
577
578 func TestV1beta2ReplicaSetSpecConversion(t *testing.T) {
579 replicas := new(int32)
580 *replicas = 2
581 matchExpressions := []metav1.LabelSelectorRequirement{
582 {Key: "foo", Operator: metav1.LabelSelectorOpIn, Values: []string{"foo"}},
583 }
584 matchLabels := map[string]string{"foo": "bar"}
585 selector := &metav1.LabelSelector{MatchLabels: matchLabels, MatchExpressions: matchExpressions}
586
587 testcases := map[string]struct {
588 replicaset1 *apps.ReplicaSetSpec
589 replicaset2 *v1beta2.ReplicaSetSpec
590 }{
591 "ReplicaSetSpec Conversion 1": {
592 replicaset1: &apps.ReplicaSetSpec{
593 Replicas: *replicas,
594 MinReadySeconds: 2,
595 Template: api.PodTemplateSpec{
596 Spec: api.PodSpec{
597 SecurityContext: new(api.PodSecurityContext),
598 },
599 },
600 },
601 replicaset2: &v1beta2.ReplicaSetSpec{
602 Replicas: replicas,
603 MinReadySeconds: 2,
604 Template: v1.PodTemplateSpec{
605 Spec: v1.PodSpec{
606 SecurityContext: new(v1.PodSecurityContext),
607 },
608 },
609 },
610 },
611 "ReplicaSetSpec Conversion 2": {
612 replicaset1: &apps.ReplicaSetSpec{
613 Replicas: *replicas,
614 Selector: selector,
615 Template: api.PodTemplateSpec{
616 Spec: api.PodSpec{
617 SecurityContext: new(api.PodSecurityContext),
618 },
619 },
620 },
621 replicaset2: &v1beta2.ReplicaSetSpec{
622 Replicas: replicas,
623 Selector: selector,
624 Template: v1.PodTemplateSpec{
625 Spec: v1.PodSpec{
626 SecurityContext: new(v1.PodSecurityContext),
627 },
628 },
629 },
630 },
631 }
632
633 for k, tc := range testcases {
634
635 internal1 := &v1beta2.ReplicaSetSpec{}
636 if err := legacyscheme.Scheme.Convert(tc.replicaset1, internal1, nil); err != nil {
637 t.Errorf("%q - %q: unexpected error: %v", k, "extensions -> v1beta2", err)
638 }
639
640 if !apiequality.Semantic.DeepEqual(internal1, tc.replicaset2) {
641 t.Errorf("%q - %q: expected\n\t%+v, got \n\t%+v", k, "extensions -> v1beta2", tc.replicaset2, internal1)
642 }
643
644
645 internal2 := &apps.ReplicaSetSpec{}
646 if err := legacyscheme.Scheme.Convert(tc.replicaset2, internal2, nil); err != nil {
647 t.Errorf("%q - %q: unexpected error: %v", k, "v1beta2 -> extensions", err)
648 }
649 if !apiequality.Semantic.DeepEqual(internal2, tc.replicaset1) {
650 t.Errorf("%q - %q: expected\n\t%+v, got \n\t%+v", k, "v1beta2 -> extensions", tc.replicaset1, internal2)
651 }
652 }
653 }
654
View as plain text