@@ -10,6 +10,7 @@ import (
10
10
. "github.com/onsi/gomega"
11
11
appsv1 "k8s.io/api/apps/v1"
12
12
v1 "k8s.io/api/core/v1"
13
+ meta "k8s.io/apimachinery/pkg/apis/meta/v1"
13
14
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14
15
"k8s.io/apimachinery/pkg/types"
15
16
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -41,12 +42,14 @@ func createListCallsFunc(nodes []v1.Node) func(
41
42
}
42
43
}
43
44
44
- func createGetCallsFunc ( objects ... client. Object ) func (
45
+ type getCallsFunc = func (
45
46
context.Context ,
46
47
types.NamespacedName ,
47
48
client.Object ,
48
49
... client.GetOption ,
49
- ) error {
50
+ ) error
51
+
52
+ func createGetCallsFunc (objects ... client.Object ) getCallsFunc {
50
53
return func (_ context.Context , _ types.NamespacedName , object client.Object , option ... client.GetOption ) error {
51
54
Expect (option ).To (BeEmpty ())
52
55
@@ -57,7 +60,6 @@ func createGetCallsFunc(objects ...client.Object) func(
57
60
}
58
61
}
59
62
60
- Fail (fmt .Sprintf ("unknown type: %T" , object ))
61
63
return nil
62
64
}
63
65
}
@@ -74,6 +76,9 @@ var _ = Describe("Collector", Ordered, func() {
74
76
podNSName types.NamespacedName
75
77
ngfPod * v1.Pod
76
78
ngfReplicaSet * appsv1.ReplicaSet
79
+ kubeNamespace * v1.Namespace
80
+
81
+ baseGetCalls getCallsFunc
77
82
)
78
83
79
84
BeforeAll (func () {
@@ -103,6 +108,13 @@ var _ = Describe("Collector", Ordered, func() {
103
108
Namespace : "nginx-gateway" ,
104
109
Name : "ngf-pod" ,
105
110
}
111
+
112
+ kubeNamespace = & v1.Namespace {
113
+ ObjectMeta : metav1.ObjectMeta {
114
+ Name : meta .NamespaceSystem ,
115
+ UID : "test-uid" ,
116
+ },
117
+ }
106
118
})
107
119
108
120
BeforeEach (func () {
@@ -111,6 +123,7 @@ var _ = Describe("Collector", Ordered, func() {
111
123
NodeCount : 0 ,
112
124
NGFResourceCounts : telemetry.NGFResourceCounts {},
113
125
NGFReplicaCount : 1 ,
126
+ ClusterID : string (kubeNamespace .GetUID ()),
114
127
}
115
128
116
129
k8sClientReader = & eventsfakes.FakeReader {}
@@ -127,21 +140,43 @@ var _ = Describe("Collector", Ordered, func() {
127
140
Version : version ,
128
141
PodNSName : podNSName ,
129
142
})
130
- k8sClientReader .GetCalls (createGetCallsFunc (ngfPod , ngfReplicaSet ))
143
+
144
+ baseGetCalls = createGetCallsFunc (ngfPod , ngfReplicaSet , kubeNamespace )
145
+ k8sClientReader .GetCalls (baseGetCalls )
131
146
})
132
147
148
+ mergeGetCallsWithBase := func (f getCallsFunc ) getCallsFunc {
149
+ return func (
150
+ ctx context.Context ,
151
+ nsName types.NamespacedName ,
152
+ object client.Object ,
153
+ option ... client.GetOption ,
154
+ ) error {
155
+ err := baseGetCalls (ctx , nsName , object , option ... )
156
+ Expect (err ).ToNot (HaveOccurred ())
157
+
158
+ return f (ctx , nsName , object , option ... )
159
+ }
160
+ }
161
+
133
162
Describe ("Normal case" , func () {
134
163
When ("collecting telemetry data" , func () {
135
164
It ("collects all fields" , func () {
136
165
nodes := []v1.Node {
137
166
{
138
- ObjectMeta : metav1.ObjectMeta {Name : "node1" },
167
+ ObjectMeta : metav1.ObjectMeta {
168
+ Name : "node1" ,
169
+ },
139
170
},
140
171
{
141
- ObjectMeta : metav1.ObjectMeta {Name : "node2" },
172
+ ObjectMeta : metav1.ObjectMeta {
173
+ Name : "node2" ,
174
+ },
142
175
},
143
176
{
144
- ObjectMeta : metav1.ObjectMeta {Name : "node3" },
177
+ ObjectMeta : metav1.ObjectMeta {
178
+ Name : "node3" ,
179
+ },
145
180
},
146
181
}
147
182
@@ -239,6 +274,27 @@ var _ = Describe("Collector", Ordered, func() {
239
274
})
240
275
})
241
276
277
+ Describe ("clusterID collector" , func () {
278
+ When ("collecting clusterID" , func () {
279
+ When ("it encounters an error while collecting data" , func () {
280
+ It ("should error if the kubernetes client errored when getting the namespace" , func () {
281
+ expectedError := errors .New ("there was an error getting clusterID" )
282
+ k8sClientReader .GetCalls (mergeGetCallsWithBase (
283
+ func (_ context.Context , _ types.NamespacedName , object client.Object , _ ... client.GetOption ) error {
284
+ switch object .(type ) {
285
+ case * v1.Namespace :
286
+ return expectedError
287
+ }
288
+ return nil
289
+ }))
290
+
291
+ _ , err := dataCollector .Collect (ctx )
292
+ Expect (err ).To (MatchError (expectedError ))
293
+ })
294
+ })
295
+ })
296
+ })
297
+
242
298
Describe ("node count collector" , func () {
243
299
When ("collecting node count data" , func () {
244
300
It ("collects correct data for no nodes" , func () {
@@ -425,41 +481,38 @@ var _ = Describe("Collector", Ordered, func() {
425
481
When ("it encounters an error while collecting data" , func () {
426
482
It ("should error if the kubernetes client errored when getting the Pod" , func () {
427
483
expectedErr := errors .New ("there was an error getting the Pod" )
428
- k8sClientReader .GetCalls (
429
- func (_ context.Context , _ client.ObjectKey , object client.Object , option ... client.GetOption ) error {
430
- Expect (option ).To (BeEmpty ())
431
-
432
- switch typedObj := object .(type ) {
484
+ k8sClientReader .GetCalls (mergeGetCallsWithBase (
485
+ func (_ context.Context , _ client.ObjectKey , object client.Object , _ ... client.GetOption ) error {
486
+ switch object .(type ) {
433
487
case * v1.Pod :
434
488
return expectedErr
435
- default :
436
- Fail (fmt .Sprintf ("unknown type: %T" , typedObj ))
437
489
}
438
490
return nil
439
- })
491
+ },
492
+ ))
440
493
441
494
_ , err := dataCollector .Collect (ctx )
442
495
Expect (err ).To (MatchError (expectedErr ))
443
496
})
444
497
445
498
It ("should error if the Pod's owner reference is nil" , func () {
446
499
expectedErr := errors .New ("expected one owner reference of the NGF Pod, got 0" )
447
- k8sClientReader .GetCalls (createGetCallsFunc (
500
+ k8sClientReader .GetCalls (mergeGetCallsWithBase ( createGetCallsFunc (
448
501
& v1.Pod {
449
502
ObjectMeta : metav1.ObjectMeta {
450
503
Name : "pod1" ,
451
504
OwnerReferences : nil ,
452
505
},
453
506
},
454
- ))
507
+ )))
455
508
456
509
_ , err := dataCollector .Collect (ctx )
457
510
Expect (err ).To (MatchError (expectedErr ))
458
511
})
459
512
460
513
It ("should error if the Pod has multiple owner references" , func () {
461
514
expectedErr := errors .New ("expected one owner reference of the NGF Pod, got 2" )
462
- k8sClientReader .GetCalls (createGetCallsFunc (
515
+ k8sClientReader .GetCalls (mergeGetCallsWithBase ( createGetCallsFunc (
463
516
& v1.Pod {
464
517
ObjectMeta : metav1.ObjectMeta {
465
518
Name : "pod1" ,
@@ -475,15 +528,15 @@ var _ = Describe("Collector", Ordered, func() {
475
528
},
476
529
},
477
530
},
478
- ))
531
+ )))
479
532
480
533
_ , err := dataCollector .Collect (ctx )
481
534
Expect (err ).To (MatchError (expectedErr ))
482
535
})
483
536
484
537
It ("should error if the Pod's owner reference is not a ReplicaSet" , func () {
485
538
expectedErr := errors .New ("expected pod owner reference to be ReplicaSet, got Deployment" )
486
- k8sClientReader .GetCalls (createGetCallsFunc (
539
+ k8sClientReader .GetCalls (mergeGetCallsWithBase ( createGetCallsFunc (
487
540
& v1.Pod {
488
541
ObjectMeta : metav1.ObjectMeta {
489
542
Name : "pod1" ,
@@ -495,61 +548,36 @@ var _ = Describe("Collector", Ordered, func() {
495
548
},
496
549
},
497
550
},
498
- ))
551
+ )))
499
552
500
553
_ , err := dataCollector .Collect (ctx )
501
554
Expect (err ).To (MatchError (expectedErr ))
502
555
})
503
556
504
557
It ("should error if the replica set's replicas is nil" , func () {
505
558
expectedErr := errors .New ("replica set replicas was nil" )
506
- k8sClientReader .GetCalls (createGetCallsFunc (
507
- & v1.Pod {
508
- ObjectMeta : metav1.ObjectMeta {
509
- Name : "pod1" ,
510
- OwnerReferences : []metav1.OwnerReference {
511
- {
512
- Kind : "ReplicaSet" ,
513
- Name : "replicaset1" ,
514
- },
515
- },
516
- },
517
- },
559
+ k8sClientReader .GetCalls (mergeGetCallsWithBase (createGetCallsFunc (
518
560
& appsv1.ReplicaSet {
519
561
Spec : appsv1.ReplicaSetSpec {
520
562
Replicas : nil ,
521
563
},
522
564
},
523
- ))
565
+ )))
524
566
525
567
_ , err := dataCollector .Collect (ctx )
526
568
Expect (err ).To (MatchError (expectedErr ))
527
569
})
528
570
529
571
It ("should error if the kubernetes client errored when getting the ReplicaSet" , func () {
530
572
expectedErr := errors .New ("there was an error getting the ReplicaSet" )
531
- k8sClientReader .GetCalls (
532
- func (_ context.Context , _ client.ObjectKey , object client.Object , option ... client.GetOption ) error {
533
- Expect (option ).To (BeEmpty ())
534
-
535
- switch typedObj := object .(type ) {
536
- case * v1.Pod :
537
- typedObj .ObjectMeta = metav1.ObjectMeta {
538
- Name : "pod1" ,
539
- OwnerReferences : []metav1.OwnerReference {
540
- {
541
- Kind : "ReplicaSet" ,
542
- Name : "replicaset1" ,
543
- },
544
- },
545
- }
573
+ k8sClientReader .GetCalls (mergeGetCallsWithBase (
574
+ func (_ context.Context , _ client.ObjectKey , object client.Object , _ ... client.GetOption ) error {
575
+ switch object .(type ) {
546
576
case * appsv1.ReplicaSet :
547
577
return expectedErr
548
- default :
549
- Fail (fmt .Sprintf ("unknown type: %T" , typedObj ))
550
578
}
551
579
return nil
552
- })
580
+ }))
553
581
554
582
_ , err := dataCollector .Collect (ctx )
555
583
Expect (err ).To (MatchError (expectedErr ))
0 commit comments