@@ -18,6 +18,7 @@ package controller
1818
1919import (
2020 "context"
21+ "fmt"
2122 "time"
2223
2324 "github.com/onsi/ginkgo/v2"
@@ -33,6 +34,7 @@ import (
3334 "k8s.io/apimachinery/pkg/runtime"
3435 "k8s.io/client-go/kubernetes/scheme"
3536 "k8s.io/klog/v2"
37+ "k8s.io/utils/ptr"
3638 "sigs.k8s.io/controller-runtime/pkg/client"
3739 "sigs.k8s.io/controller-runtime/pkg/client/fake"
3840 "sigs.k8s.io/controller-runtime/pkg/reconcile"
@@ -93,11 +95,14 @@ var _ = ginkgo.Describe("Test NUMAResourcesScheduler Reconcile", func() {
9395 ginkgo .Context ("with correct NRS CR" , func () {
9496 var nrs * nropv1.NUMAResourcesScheduler
9597 var reconciler * NUMAResourcesSchedulerReconciler
98+ numOfMasters := 3
9699
97100 ginkgo .BeforeEach (func () {
98101 var err error
99102 nrs = testobjs .NewNUMAResourcesScheduler ("numaresourcesscheduler" , "some/url:latest" , testSchedulerName , 11 * time .Second )
100- reconciler , err = NewFakeNUMAResourcesSchedulerReconciler (nrs )
103+ initObjects := []runtime.Object {nrs }
104+ initObjects = append (initObjects , fakeNodes (numOfMasters , 3 )... )
105+ reconciler , err = NewFakeNUMAResourcesSchedulerReconciler (initObjects ... )
101106 gomega .Expect (err ).ToNot (gomega .HaveOccurred ())
102107 })
103108
@@ -585,10 +590,20 @@ var _ = ginkgo.Describe("Test NUMAResourcesScheduler Reconcile", func() {
585590 })
586591
587592 ginkgo .It ("should set the leader election resource parameters by default" , func () {
593+ nrs := nrs .DeepCopy ()
594+ nrs .Spec .Replicas = ptr .To (int32 (1 ))
595+ gomega .Eventually (reconciler .Client .Update ).WithArguments (context .TODO (), nrs ).WithPolling (30 * time .Second ).WithTimeout (5 * time .Minute ).Should (gomega .Succeed ())
596+
597+ _ , err := reconciler .Reconcile (context .TODO (), reconcile.Request {NamespacedName : client .ObjectKeyFromObject (nrs )})
598+ gomega .Expect (err ).ToNot (gomega .HaveOccurred ())
599+ expectLeaderElectParams (reconciler .Client , false , testNamespace , nrosched .LeaderElectionResourceName )
600+ })
601+
602+ ginkgo .It ("should set the leader election resource parameters to true default" , func () {
588603 key := client .ObjectKeyFromObject (nrs )
589604 _ , err := reconciler .Reconcile (context .TODO (), reconcile.Request {NamespacedName : key })
590605 gomega .Expect (err ).ToNot (gomega .HaveOccurred ())
591- expectLeaderElectParams (reconciler .Client , false , testNamespace , nrosched .LeaderElectionResourceName )
606+ expectLeaderElectParams (reconciler .Client , true , testNamespace , nrosched .LeaderElectionResourceName )
592607 })
593608
594609 ginkgo .DescribeTable ("should set the leader election resource parameters depending on replica count" , func (replicas int32 , expectedEnabled bool ) {
@@ -605,6 +620,16 @@ var _ = ginkgo.Describe("Test NUMAResourcesScheduler Reconcile", func() {
605620 ginkgo .Entry ("replicas=1" , int32 (1 ), false ),
606621 ginkgo .Entry ("replicas=3" , int32 (3 ), true ),
607622 )
623+
624+ ginkgo .It ("should detect replicas number by default when spec.Replicas is unset" , func () {
625+ key := client .ObjectKeyFromObject (nrs )
626+ _ , err := reconciler .Reconcile (context .TODO (), reconcile.Request {NamespacedName : key })
627+ gomega .Expect (err ).ToNot (gomega .HaveOccurred ())
628+
629+ dp := & appsv1.Deployment {}
630+ gomega .Expect (reconciler .Client .Get (context .TODO (), client.ObjectKey {Namespace : testNamespace , Name : "secondary-scheduler" }, dp )).To (gomega .Succeed ())
631+ gomega .Expect (* dp .Spec .Replicas ).To (gomega .Equal (int32 (numOfMasters )), "number of replicas is different than number of control-planes nodes; want=%d got=%d" , numOfMasters , * dp .Spec .Replicas )
632+ })
608633 })
609634})
610635
@@ -695,3 +720,28 @@ func expectLeaderElectParams(cli client.Client, enabled bool, resourceNamespace,
695720 gomega .Expect (cfg .LeaderElection .ResourceNamespace ).To (gomega .Equal (resourceNamespace ))
696721 gomega .Expect (cfg .LeaderElection .ResourceName ).To (gomega .Equal (resourceName ))
697722}
723+
724+ func fakeNodes (numOfMasters , numOfWorkers int ) []runtime.Object {
725+ var nodes []runtime.Object
726+ for i := range numOfMasters {
727+ nodes = append (nodes , & corev1.Node {
728+ ObjectMeta : metav1.ObjectMeta {
729+ Name : fmt .Sprintf ("master-node-%d" , i + 1 ),
730+ Labels : map [string ]string {
731+ "node-role.kubernetes.io/control-plane" : "" ,
732+ },
733+ },
734+ })
735+ }
736+ for i := range numOfWorkers {
737+ nodes = append (nodes , & corev1.Node {
738+ ObjectMeta : metav1.ObjectMeta {
739+ Name : fmt .Sprintf ("worker-node-%d" , i + 1 ),
740+ Labels : map [string ]string {
741+ "node-role.kubernetes.io/worker" : "" ,
742+ },
743+ },
744+ })
745+ }
746+ return nodes
747+ }
0 commit comments