Skip to content

Commit 16a4e37

Browse files
committedOct 23, 2024··
fixing unit test as per Matt
Signed-off-by: Robert Sirchia <rsirchia@outlook.com>
1 parent a205af7 commit 16a4e37

File tree

1 file changed

+514
-8
lines changed

1 file changed

+514
-8
lines changed
 

‎pkg/kube/ready_test.go

+514-8
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ import (
3636

3737
const defaultNamespace = metav1.NamespaceDefault
3838

39-
// TODO: correct test cases to cover the positive and not just the negative.
40-
func Test_ReadyChecker_IsReady(t *testing.T) {
39+
func Test_ReadyChecker_IsReady_Pod(t *testing.T) {
4140
type fields struct {
4241
client kubernetes.Interface
4342
log func(string, ...interface{})
@@ -52,11 +51,12 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
5251
name string
5352
fields fields
5453
args args
54+
pod *corev1.Pod
5555
want bool
5656
wantErr bool
5757
}{
5858
{
59-
name: "IsReady Pod error while getting pod",
59+
name: "IsReady Pod",
6060
fields: fields{
6161
client: fake.NewSimpleClientset(),
6262
log: func(string, ...interface{}) {},
@@ -67,9 +67,70 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
6767
ctx: context.TODO(),
6868
resource: &resource.Info{Object: &corev1.Pod{}, Name: "foo", Namespace: defaultNamespace},
6969
},
70+
pod: newPodWithCondition("foo", corev1.ConditionTrue),
71+
want: true,
72+
wantErr: false,
73+
},
74+
{
75+
name: "IsReady Pod returns error",
76+
fields: fields{
77+
client: fake.NewSimpleClientset(),
78+
log: func(string, ...interface{}) {},
79+
checkJobs: true,
80+
pausedAsReady: false,
81+
},
82+
args: args{
83+
ctx: context.TODO(),
84+
resource: &resource.Info{Object: &corev1.Pod{}, Name: "foo", Namespace: defaultNamespace},
85+
},
86+
pod: newPodWithCondition("bar", corev1.ConditionTrue),
7087
want: false,
7188
wantErr: true,
7289
},
90+
}
91+
for _, tt := range tests {
92+
t.Run(tt.name, func(t *testing.T) {
93+
c := &ReadyChecker{
94+
client: tt.fields.client,
95+
log: tt.fields.log,
96+
checkJobs: tt.fields.checkJobs,
97+
pausedAsReady: tt.fields.pausedAsReady,
98+
}
99+
if _, err := c.client.CoreV1().Pods(defaultNamespace).Create(context.TODO(), tt.pod, metav1.CreateOptions{}); err != nil {
100+
t.Errorf("Failed to create Pod error: %v", err)
101+
return
102+
}
103+
got, err := c.IsReady(tt.args.ctx, tt.args.resource)
104+
if (err != nil) != tt.wantErr {
105+
t.Errorf("IsReady() error = %v, wantErr %v", err, tt.wantErr)
106+
return
107+
}
108+
if got != tt.want {
109+
t.Errorf("IsReady() = %v, want %v", got, tt.want)
110+
}
111+
})
112+
}
113+
}
114+
115+
func Test_ReadyChecker_IsReady_Job(t *testing.T) {
116+
type fields struct {
117+
client kubernetes.Interface
118+
log func(string, ...interface{})
119+
checkJobs bool
120+
pausedAsReady bool
121+
}
122+
type args struct {
123+
ctx context.Context
124+
resource *resource.Info
125+
}
126+
tests := []struct {
127+
name string
128+
fields fields
129+
args args
130+
job *batchv1.Job
131+
want bool
132+
wantErr bool
133+
}{
73134
{
74135
name: "IsReady Job error while getting job",
75136
fields: fields{
@@ -82,6 +143,7 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
82143
ctx: context.TODO(),
83144
resource: &resource.Info{Object: &batchv1.Job{}, Name: "foo", Namespace: defaultNamespace},
84145
},
146+
job: newJob("bar", 1, intToInt32(1), 1, 0),
85147
want: false,
86148
wantErr: true,
87149
},
@@ -97,9 +159,54 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
97159
ctx: context.TODO(),
98160
resource: &resource.Info{Object: &batchv1.Job{}, Name: "foo", Namespace: defaultNamespace},
99161
},
100-
want: false,
101-
wantErr: true,
162+
job: newJob("foo", 1, intToInt32(1), 1, 0),
163+
want: true,
164+
wantErr: false,
102165
},
166+
}
167+
for _, tt := range tests {
168+
t.Run(tt.name, func(t *testing.T) {
169+
c := &ReadyChecker{
170+
client: tt.fields.client,
171+
log: tt.fields.log,
172+
checkJobs: tt.fields.checkJobs,
173+
pausedAsReady: tt.fields.pausedAsReady,
174+
}
175+
if _, err := c.client.BatchV1().Jobs(defaultNamespace).Create(context.TODO(), tt.job, metav1.CreateOptions{}); err != nil {
176+
t.Errorf("Failed to create Job error: %v", err)
177+
return
178+
}
179+
got, err := c.IsReady(tt.args.ctx, tt.args.resource)
180+
if (err != nil) != tt.wantErr {
181+
t.Errorf("IsReady() error = %v, wantErr %v", err, tt.wantErr)
182+
}
183+
if got != tt.want {
184+
t.Errorf("IsReady() = %v, want %v", got, tt.want)
185+
}
186+
})
187+
}
188+
}
189+
190+
func Test_ReadyChecker_IsReady_Deployment(t *testing.T) {
191+
type fields struct {
192+
client kubernetes.Interface
193+
log func(string, ...interface{})
194+
checkJobs bool
195+
pausedAsReady bool
196+
}
197+
type args struct {
198+
ctx context.Context
199+
resource *resource.Info
200+
}
201+
tests := []struct {
202+
name string
203+
fields fields
204+
args args
205+
replicaSet *appsv1.ReplicaSet
206+
deployment *appsv1.Deployment
207+
want bool
208+
wantErr bool
209+
}{
103210
{
104211
name: "IsReady Deployments error while getting current Deployment",
105212
fields: fields{
@@ -112,9 +219,75 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
112219
ctx: context.TODO(),
113220
resource: &resource.Info{Object: &appsv1.Deployment{}, Name: "foo", Namespace: defaultNamespace},
114221
},
115-
want: false,
116-
wantErr: true,
222+
replicaSet: newReplicaSet("foo", 0, 0, true),
223+
deployment: newDeployment("bar", 1, 1, 0, true),
224+
want: false,
225+
wantErr: true,
117226
},
227+
{
228+
name: "IsReady Deployments", //TODO fix this one
229+
fields: fields{
230+
client: fake.NewSimpleClientset(),
231+
log: func(string, ...interface{}) {},
232+
checkJobs: true,
233+
pausedAsReady: false,
234+
},
235+
args: args{
236+
ctx: context.TODO(),
237+
resource: &resource.Info{Object: &appsv1.Deployment{}, Name: "foo", Namespace: defaultNamespace},
238+
},
239+
replicaSet: newReplicaSet("foo", 0, 0, true),
240+
deployment: newDeployment("foo", 1, 1, 0, true),
241+
want: false,
242+
wantErr: false,
243+
},
244+
}
245+
for _, tt := range tests {
246+
t.Run(tt.name, func(t *testing.T) {
247+
c := &ReadyChecker{
248+
client: tt.fields.client,
249+
log: tt.fields.log,
250+
checkJobs: tt.fields.checkJobs,
251+
pausedAsReady: tt.fields.pausedAsReady,
252+
}
253+
if _, err := c.client.AppsV1().Deployments(defaultNamespace).Create(context.TODO(), tt.deployment, metav1.CreateOptions{}); err != nil {
254+
t.Errorf("Failed to create Deployment error: %v", err)
255+
return
256+
}
257+
if _, err := c.client.AppsV1().ReplicaSets(defaultNamespace).Create(context.TODO(), tt.replicaSet, metav1.CreateOptions{}); err != nil {
258+
t.Errorf("Failed to create ReplicaSet error: %v", err)
259+
return
260+
}
261+
got, err := c.IsReady(tt.args.ctx, tt.args.resource)
262+
if (err != nil) != tt.wantErr {
263+
t.Errorf("IsReady() error = %v, wantErr %v", err, tt.wantErr)
264+
}
265+
if got != tt.want {
266+
t.Errorf("IsReady() = %v, want %v", got, tt.want)
267+
}
268+
})
269+
}
270+
}
271+
272+
func Test_ReadyChecker_IsReady_PersistentVolumeClaim(t *testing.T) {
273+
type fields struct {
274+
client kubernetes.Interface
275+
log func(string, ...interface{})
276+
checkJobs bool
277+
pausedAsReady bool
278+
}
279+
type args struct {
280+
ctx context.Context
281+
resource *resource.Info
282+
}
283+
tests := []struct {
284+
name string
285+
fields fields
286+
args args
287+
pvc *corev1.PersistentVolumeClaim
288+
want bool
289+
wantErr bool
290+
}{
118291
{
119292
name: "IsReady PersistentVolumeClaim",
120293
fields: fields{
@@ -127,9 +300,69 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
127300
ctx: context.TODO(),
128301
resource: &resource.Info{Object: &corev1.PersistentVolumeClaim{}, Name: "foo", Namespace: defaultNamespace},
129302
},
303+
pvc: newPersistentVolumeClaim("foo", corev1.ClaimPending),
304+
want: false,
305+
wantErr: false,
306+
},
307+
{
308+
name: "IsReady PersistentVolumeClaim with error",
309+
fields: fields{
310+
client: fake.NewSimpleClientset(),
311+
log: func(string, ...interface{}) {},
312+
checkJobs: true,
313+
pausedAsReady: false,
314+
},
315+
args: args{
316+
ctx: context.TODO(),
317+
resource: &resource.Info{Object: &corev1.PersistentVolumeClaim{}, Name: "foo", Namespace: defaultNamespace},
318+
},
319+
pvc: newPersistentVolumeClaim("bar", corev1.ClaimPending),
130320
want: false,
131321
wantErr: true,
132322
},
323+
}
324+
for _, tt := range tests {
325+
t.Run(tt.name, func(t *testing.T) {
326+
c := &ReadyChecker{
327+
client: tt.fields.client,
328+
log: tt.fields.log,
329+
checkJobs: tt.fields.checkJobs,
330+
pausedAsReady: tt.fields.pausedAsReady,
331+
}
332+
if _, err := c.client.CoreV1().PersistentVolumeClaims(defaultNamespace).Create(context.TODO(), tt.pvc, metav1.CreateOptions{}); err != nil {
333+
t.Errorf("Failed to create PersistentVolumeClaim error: %v", err)
334+
return
335+
}
336+
got, err := c.IsReady(tt.args.ctx, tt.args.resource)
337+
if (err != nil) != tt.wantErr {
338+
t.Errorf("IsReady() error = %v, wantErr %v", err, tt.wantErr)
339+
}
340+
if got != tt.want {
341+
t.Errorf("IsReady() = %v, want %v", got, tt.want)
342+
}
343+
})
344+
}
345+
}
346+
347+
func Test_ReadyChecker_IsReady_Service(t *testing.T) {
348+
type fields struct {
349+
client kubernetes.Interface
350+
log func(string, ...interface{})
351+
checkJobs bool
352+
pausedAsReady bool
353+
}
354+
type args struct {
355+
ctx context.Context
356+
resource *resource.Info
357+
}
358+
tests := []struct {
359+
name string
360+
fields fields
361+
args args
362+
svc *corev1.Service
363+
want bool
364+
wantErr bool
365+
}{
133366
{
134367
name: "IsReady Service",
135368
fields: fields{
@@ -142,9 +375,69 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
142375
ctx: context.TODO(),
143376
resource: &resource.Info{Object: &corev1.Service{}, Name: "foo", Namespace: defaultNamespace},
144377
},
378+
svc: newService("foo", corev1.ServiceSpec{Type: corev1.ServiceTypeLoadBalancer, ClusterIP: ""}),
379+
want: false,
380+
wantErr: false,
381+
},
382+
{
383+
name: "IsReady Service with error",
384+
fields: fields{
385+
client: fake.NewSimpleClientset(),
386+
log: func(string, ...interface{}) {},
387+
checkJobs: true,
388+
pausedAsReady: false,
389+
},
390+
args: args{
391+
ctx: context.TODO(),
392+
resource: &resource.Info{Object: &corev1.Service{}, Name: "foo", Namespace: defaultNamespace},
393+
},
394+
svc: newService("bar", corev1.ServiceSpec{Type: corev1.ServiceTypeExternalName, ClusterIP: ""}),
145395
want: false,
146396
wantErr: true,
147397
},
398+
}
399+
for _, tt := range tests {
400+
t.Run(tt.name, func(t *testing.T) {
401+
c := &ReadyChecker{
402+
client: tt.fields.client,
403+
log: tt.fields.log,
404+
checkJobs: tt.fields.checkJobs,
405+
pausedAsReady: tt.fields.pausedAsReady,
406+
}
407+
if _, err := c.client.CoreV1().Services(defaultNamespace).Create(context.TODO(), tt.svc, metav1.CreateOptions{}); err != nil {
408+
t.Errorf("Failed to create Service error: %v", err)
409+
return
410+
}
411+
got, err := c.IsReady(tt.args.ctx, tt.args.resource)
412+
if (err != nil) != tt.wantErr {
413+
t.Errorf("IsReady() error = %v, wantErr %v", err, tt.wantErr)
414+
}
415+
if got != tt.want {
416+
t.Errorf("IsReady() = %v, want %v", got, tt.want)
417+
}
418+
})
419+
}
420+
}
421+
422+
func Test_ReadyChecker_IsReady_DaemonSet(t *testing.T) {
423+
type fields struct {
424+
client kubernetes.Interface
425+
log func(string, ...interface{})
426+
checkJobs bool
427+
pausedAsReady bool
428+
}
429+
type args struct {
430+
ctx context.Context
431+
resource *resource.Info
432+
}
433+
tests := []struct {
434+
name string
435+
fields fields
436+
args args
437+
ds *appsv1.DaemonSet
438+
want bool
439+
wantErr bool
440+
}{
148441
{
149442
name: "IsReady DaemonSet",
150443
fields: fields{
@@ -157,9 +450,69 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
157450
ctx: context.TODO(),
158451
resource: &resource.Info{Object: &appsv1.DaemonSet{}, Name: "foo", Namespace: defaultNamespace},
159452
},
453+
ds: newDaemonSet("foo", 0, 0, 1, 0, true),
454+
want: false,
455+
wantErr: false,
456+
},
457+
{
458+
name: "IsReady DaemonSet with error",
459+
fields: fields{
460+
client: fake.NewSimpleClientset(),
461+
log: func(string, ...interface{}) {},
462+
checkJobs: true,
463+
pausedAsReady: false,
464+
},
465+
args: args{
466+
ctx: context.TODO(),
467+
resource: &resource.Info{Object: &appsv1.DaemonSet{}, Name: "foo", Namespace: defaultNamespace},
468+
},
469+
ds: newDaemonSet("bar", 0, 1, 1, 1, true),
160470
want: false,
161471
wantErr: true,
162472
},
473+
}
474+
for _, tt := range tests {
475+
t.Run(tt.name, func(t *testing.T) {
476+
c := &ReadyChecker{
477+
client: tt.fields.client,
478+
log: tt.fields.log,
479+
checkJobs: tt.fields.checkJobs,
480+
pausedAsReady: tt.fields.pausedAsReady,
481+
}
482+
if _, err := c.client.AppsV1().DaemonSets(defaultNamespace).Create(context.TODO(), tt.ds, metav1.CreateOptions{}); err != nil {
483+
t.Errorf("Failed to create DaemonSet error: %v", err)
484+
return
485+
}
486+
got, err := c.IsReady(tt.args.ctx, tt.args.resource)
487+
if (err != nil) != tt.wantErr {
488+
t.Errorf("IsReady() error = %v, wantErr %v", err, tt.wantErr)
489+
}
490+
if got != tt.want {
491+
t.Errorf("IsReady() = %v, want %v", got, tt.want)
492+
}
493+
})
494+
}
495+
}
496+
497+
func Test_ReadyChecker_IsReady_StatefulSet(t *testing.T) {
498+
type fields struct {
499+
client kubernetes.Interface
500+
log func(string, ...interface{})
501+
checkJobs bool
502+
pausedAsReady bool
503+
}
504+
type args struct {
505+
ctx context.Context
506+
resource *resource.Info
507+
}
508+
tests := []struct {
509+
name string
510+
fields fields
511+
args args
512+
ss *appsv1.StatefulSet
513+
want bool
514+
wantErr bool
515+
}{
163516
{
164517
name: "IsReady StatefulSet",
165518
fields: fields{
@@ -172,9 +525,69 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
172525
ctx: context.TODO(),
173526
resource: &resource.Info{Object: &appsv1beta1.StatefulSet{}, Name: "foo", Namespace: defaultNamespace},
174527
},
528+
ss: newStatefulSet("foo", 1, 0, 0, 1, true),
529+
want: false,
530+
wantErr: false,
531+
},
532+
{
533+
name: "IsReady StatefulSet with error",
534+
fields: fields{
535+
client: fake.NewSimpleClientset(),
536+
log: func(string, ...interface{}) {},
537+
checkJobs: true,
538+
pausedAsReady: false,
539+
},
540+
args: args{
541+
ctx: context.TODO(),
542+
resource: &resource.Info{Object: &appsv1beta1.StatefulSet{}, Name: "foo", Namespace: defaultNamespace},
543+
},
544+
ss: newStatefulSet("bar", 1, 0, 1, 1, true),
175545
want: false,
176546
wantErr: true,
177547
},
548+
}
549+
for _, tt := range tests {
550+
t.Run(tt.name, func(t *testing.T) {
551+
c := &ReadyChecker{
552+
client: tt.fields.client,
553+
log: tt.fields.log,
554+
checkJobs: tt.fields.checkJobs,
555+
pausedAsReady: tt.fields.pausedAsReady,
556+
}
557+
if _, err := c.client.AppsV1().StatefulSets(defaultNamespace).Create(context.TODO(), tt.ss, metav1.CreateOptions{}); err != nil {
558+
t.Errorf("Failed to create StatefulSet error: %v", err)
559+
return
560+
}
561+
got, err := c.IsReady(tt.args.ctx, tt.args.resource)
562+
if (err != nil) != tt.wantErr {
563+
t.Errorf("IsReady() error = %v, wantErr %v", err, tt.wantErr)
564+
}
565+
if got != tt.want {
566+
t.Errorf("IsReady() = %v, want %v", got, tt.want)
567+
}
568+
})
569+
}
570+
}
571+
572+
func Test_ReadyChecker_IsReady_ReplicationController(t *testing.T) {
573+
type fields struct {
574+
client kubernetes.Interface
575+
log func(string, ...interface{})
576+
checkJobs bool
577+
pausedAsReady bool
578+
}
579+
type args struct {
580+
ctx context.Context
581+
resource *resource.Info
582+
}
583+
tests := []struct {
584+
name string
585+
fields fields
586+
args args
587+
rc *corev1.ReplicationController
588+
want bool
589+
wantErr bool
590+
}{
178591
{
179592
name: "IsReady ReplicationController",
180593
fields: fields{
@@ -187,9 +600,85 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
187600
ctx: context.TODO(),
188601
resource: &resource.Info{Object: &corev1.ReplicationController{}, Name: "foo", Namespace: defaultNamespace},
189602
},
603+
rc: newReplicationController("foo", false),
604+
want: false,
605+
wantErr: false,
606+
},
607+
{
608+
name: "IsReady ReplicationController with error",
609+
fields: fields{
610+
client: fake.NewSimpleClientset(),
611+
log: func(string, ...interface{}) {},
612+
checkJobs: true,
613+
pausedAsReady: false,
614+
},
615+
args: args{
616+
ctx: context.TODO(),
617+
resource: &resource.Info{Object: &corev1.ReplicationController{}, Name: "foo", Namespace: defaultNamespace},
618+
},
619+
rc: newReplicationController("bar", false),
190620
want: false,
191621
wantErr: true,
192622
},
623+
{
624+
name: "IsReady ReplicationController and pods not ready for object",
625+
fields: fields{
626+
client: fake.NewSimpleClientset(),
627+
log: func(string, ...interface{}) {},
628+
checkJobs: true,
629+
pausedAsReady: false,
630+
},
631+
args: args{
632+
ctx: context.TODO(),
633+
resource: &resource.Info{Object: &corev1.ReplicationController{}, Name: "foo", Namespace: defaultNamespace},
634+
},
635+
rc: newReplicationController("foo", true),
636+
want: true,
637+
wantErr: false,
638+
},
639+
}
640+
for _, tt := range tests {
641+
t.Run(tt.name, func(t *testing.T) {
642+
c := &ReadyChecker{
643+
client: tt.fields.client,
644+
log: tt.fields.log,
645+
checkJobs: tt.fields.checkJobs,
646+
pausedAsReady: tt.fields.pausedAsReady,
647+
}
648+
if _, err := c.client.CoreV1().ReplicationControllers(defaultNamespace).Create(context.TODO(), tt.rc, metav1.CreateOptions{}); err != nil {
649+
t.Errorf("Failed to create ReplicationController error: %v", err)
650+
return
651+
}
652+
got, err := c.IsReady(tt.args.ctx, tt.args.resource)
653+
if (err != nil) != tt.wantErr {
654+
t.Errorf("IsReady() error = %v, wantErr %v", err, tt.wantErr)
655+
}
656+
if got != tt.want {
657+
t.Errorf("IsReady() = %v, want %v", got, tt.want)
658+
}
659+
})
660+
}
661+
}
662+
663+
func Test_ReadyChecker_IsReady_ReplicaSet(t *testing.T) {
664+
type fields struct {
665+
client kubernetes.Interface
666+
log func(string, ...interface{})
667+
checkJobs bool
668+
pausedAsReady bool
669+
}
670+
type args struct {
671+
ctx context.Context
672+
resource *resource.Info
673+
}
674+
tests := []struct {
675+
name string
676+
fields fields
677+
args args
678+
rs *appsv1.ReplicaSet
679+
want bool
680+
wantErr bool
681+
}{
193682
{
194683
name: "IsReady ReplicaSet",
195684
fields: fields{
@@ -202,6 +691,23 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
202691
ctx: context.TODO(),
203692
resource: &resource.Info{Object: &extensionsv1beta1.ReplicaSet{}, Name: "foo", Namespace: defaultNamespace},
204693
},
694+
rs: newReplicaSet("foo", 1, 1, true),
695+
want: false,
696+
wantErr: true,
697+
},
698+
{
699+
name: "IsReady ReplicaSet not ready",
700+
fields: fields{
701+
client: fake.NewSimpleClientset(),
702+
log: func(string, ...interface{}) {},
703+
checkJobs: true,
704+
pausedAsReady: false,
705+
},
706+
args: args{
707+
ctx: context.TODO(),
708+
resource: &resource.Info{Object: &extensionsv1beta1.ReplicaSet{}, Name: "foo", Namespace: defaultNamespace},
709+
},
710+
rs: newReplicaSet("bar", 1, 1, false),
205711
want: false,
206712
wantErr: true,
207713
},
@@ -214,10 +720,10 @@ func Test_ReadyChecker_IsReady(t *testing.T) {
214720
checkJobs: tt.fields.checkJobs,
215721
pausedAsReady: tt.fields.pausedAsReady,
216722
}
723+
//
217724
got, err := c.IsReady(tt.args.ctx, tt.args.resource)
218725
if (err != nil) != tt.wantErr {
219726
t.Errorf("IsReady() error = %v, wantErr %v", err, tt.wantErr)
220-
return
221727
}
222728
if got != tt.want {
223729
t.Errorf("IsReady() = %v, want %v", got, tt.want)

0 commit comments

Comments
 (0)
Please sign in to comment.