Skip to content

Commit dc54614

Browse files
committed
Add deployment replica count tests
1 parent 3742c6d commit dc54614

File tree

1 file changed

+137
-1
lines changed

1 file changed

+137
-1
lines changed

internal/mode/static/telemetry/collector_test.go

Lines changed: 137 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
. "github.com/onsi/ginkgo/v2"
99
. "github.com/onsi/gomega"
10+
appsv1 "k8s.io/api/apps/v1"
1011
v1 "k8s.io/api/core/v1"
1112
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1213
"k8s.io/apimachinery/pkg/types"
@@ -39,6 +40,38 @@ func createListCallsFunc(nodes []v1.Node) func(
3940
}
4041
}
4142

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+
4275
var _ = Describe("Collector", Ordered, func() {
4376
var (
4477
k8sClientReader *eventsfakes.FakeReader
@@ -61,7 +94,7 @@ var _ = Describe("Collector", Ordered, func() {
6194
ProjectMetadata: telemetry.ProjectMetadata{Name: "NGF", Version: version},
6295
NodeCount: 0,
6396
NGFResourceCounts: telemetry.NGFResourceCounts{},
64-
NGFReplicaCount: 0,
97+
NGFReplicaCount: 1,
6598
}
6699

67100
k8sClientReader = &eventsfakes.FakeReader{}
@@ -82,6 +115,7 @@ var _ = Describe("Collector", Ordered, func() {
82115
Version: version,
83116
PodNSName: podNSName,
84117
})
118+
k8sClientReader.GetCalls(createGetCallsFunc())
85119
})
86120

87121
Describe("Normal case", func() {
@@ -370,4 +404,106 @@ var _ = Describe("Collector", Ordered, func() {
370404
})
371405
})
372406
})
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+
})
373509
})

0 commit comments

Comments
 (0)