7
7
8
8
. "github.com/onsi/ginkgo/v2"
9
9
. "github.com/onsi/gomega"
10
+ appsv1 "k8s.io/api/apps/v1"
10
11
v1 "k8s.io/api/core/v1"
11
12
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
12
13
"k8s.io/apimachinery/pkg/types"
@@ -39,6 +40,38 @@ func createListCallsFunc(nodes []v1.Node) func(
39
40
}
40
41
}
41
42
43
+ func createGetCallsFunc () func (
44
+ ctx context.Context ,
45
+ key client.ObjectKey ,
46
+ object client.Object ,
47
+ option ... client.GetOption ,
48
+ ) error {
49
+ return func (ctx context.Context , key client.ObjectKey , object client.Object , option ... client.GetOption ) error {
50
+ Expect (option ).To (BeEmpty ())
51
+
52
+ switch typedObj := object .(type ) {
53
+ case * v1.Pod :
54
+ typedObj .ObjectMeta = metav1.ObjectMeta {
55
+ Name : "pod1" ,
56
+ OwnerReferences : []metav1.OwnerReference {
57
+ {
58
+ Kind : "ReplicaSet" ,
59
+ Name : "replicaset1" ,
60
+ },
61
+ },
62
+ }
63
+ case * appsv1.ReplicaSet :
64
+ replicas := int32 (1 )
65
+ typedObj .Spec = appsv1.ReplicaSetSpec {
66
+ Replicas : & replicas ,
67
+ }
68
+ default :
69
+ Fail (fmt .Sprintf ("unknown type: %T" , typedObj ))
70
+ }
71
+ return nil
72
+ }
73
+ }
74
+
42
75
var _ = Describe ("Collector" , Ordered , func () {
43
76
var (
44
77
k8sClientReader * eventsfakes.FakeReader
@@ -61,7 +94,7 @@ var _ = Describe("Collector", Ordered, func() {
61
94
ProjectMetadata : telemetry.ProjectMetadata {Name : "NGF" , Version : version },
62
95
NodeCount : 0 ,
63
96
NGFResourceCounts : telemetry.NGFResourceCounts {},
64
- NGFReplicaCount : 0 ,
97
+ NGFReplicaCount : 1 ,
65
98
}
66
99
67
100
k8sClientReader = & eventsfakes.FakeReader {}
@@ -82,6 +115,7 @@ var _ = Describe("Collector", Ordered, func() {
82
115
Version : version ,
83
116
PodNSName : podNSName ,
84
117
})
118
+ k8sClientReader .GetCalls (createGetCallsFunc ())
85
119
})
86
120
87
121
Describe ("Normal case" , func () {
@@ -370,4 +404,106 @@ var _ = Describe("Collector", Ordered, func() {
370
404
})
371
405
})
372
406
})
407
+
408
+ Describe ("NGF replica count collector" , func () {
409
+ When ("collecting NGF replica count" , func () {
410
+ When ("it encounters an error while collecting data" , func () {
411
+ BeforeEach (func () {
412
+ k8sClientReader .GetReturns (nil )
413
+ k8sClientReader .GetCalls (createGetCallsFunc ())
414
+ })
415
+
416
+ It ("should error if the kubernetes client errored when getting the Pod" , func () {
417
+ k8sClientReader .GetReturnsOnCall (0 , errors .New ("there was an error" ))
418
+
419
+ _ , err := dataCollector .Collect (ctx )
420
+ Expect (err ).To (HaveOccurred ())
421
+ })
422
+
423
+ It ("should error if the Pod's owner reference is nil" , func () {
424
+ k8sClientReader .GetCalls (
425
+ func (ctx context.Context , key client.ObjectKey , object client.Object , option ... client.GetOption ) error {
426
+ Expect (option ).To (BeEmpty ())
427
+
428
+ switch typedObj := object .(type ) {
429
+ case * v1.Pod :
430
+ typedObj .ObjectMeta = metav1.ObjectMeta {
431
+ Name : "pod1" ,
432
+ OwnerReferences : nil ,
433
+ }
434
+ default :
435
+ Fail (fmt .Sprintf ("unknown type: %T" , typedObj ))
436
+ }
437
+ return nil
438
+ })
439
+
440
+ _ , err := dataCollector .Collect (ctx )
441
+ Expect (err ).To (HaveOccurred ())
442
+ })
443
+
444
+ It ("should error if the Pod has multiple owner references" , func () {
445
+ k8sClientReader .GetCalls (
446
+ func (ctx context.Context , key client.ObjectKey , object client.Object , option ... client.GetOption ) error {
447
+ Expect (option ).To (BeEmpty ())
448
+
449
+ switch typedObj := object .(type ) {
450
+ case * v1.Pod :
451
+ typedObj .ObjectMeta = metav1.ObjectMeta {
452
+ Name : "pod1" ,
453
+ OwnerReferences : []metav1.OwnerReference {
454
+ {
455
+ Kind : "ReplicaSet" ,
456
+ Name : "replicaset1" ,
457
+ },
458
+ {
459
+ Kind : "ReplicaSet" ,
460
+ Name : "replicaset2" ,
461
+ },
462
+ },
463
+ }
464
+ default :
465
+ Fail (fmt .Sprintf ("unknown type: %T" , typedObj ))
466
+ }
467
+ return nil
468
+ })
469
+
470
+ _ , err := dataCollector .Collect (ctx )
471
+ Expect (err ).To (HaveOccurred ())
472
+ })
473
+
474
+ It ("should error if the Pod's owner reference is not a ReplicaSet" , func () {
475
+ k8sClientReader .GetCalls (
476
+ func (ctx context.Context , key client.ObjectKey , object client.Object , option ... client.GetOption ) error {
477
+ Expect (option ).To (BeEmpty ())
478
+
479
+ switch typedObj := object .(type ) {
480
+ case * v1.Pod :
481
+ typedObj .ObjectMeta = metav1.ObjectMeta {
482
+ Name : "pod1" ,
483
+ OwnerReferences : []metav1.OwnerReference {
484
+ {
485
+ Kind : "Deployment" ,
486
+ Name : "deployment1" ,
487
+ },
488
+ },
489
+ }
490
+ default :
491
+ Fail (fmt .Sprintf ("unknown type: %T" , typedObj ))
492
+ }
493
+ return nil
494
+ })
495
+
496
+ _ , err := dataCollector .Collect (ctx )
497
+ Expect (err ).To (HaveOccurred ())
498
+ })
499
+
500
+ It ("should error if the kubernetes client errored when getting the ReplicaSet" , func () {
501
+ k8sClientReader .GetReturnsOnCall (1 , errors .New ("there was an error" ))
502
+
503
+ _ , err := dataCollector .Collect (ctx )
504
+ Expect (err ).To (HaveOccurred ())
505
+ })
506
+ })
507
+ })
508
+ })
373
509
})
0 commit comments