@@ -43,6 +43,7 @@ import (
43
43
"sigs.k8s.io/controller-runtime/pkg/cache"
44
44
"sigs.k8s.io/controller-runtime/pkg/cache/informertest"
45
45
"sigs.k8s.io/controller-runtime/pkg/client"
46
+ "sigs.k8s.io/controller-runtime/pkg/cluster"
46
47
"sigs.k8s.io/controller-runtime/pkg/config/v1alpha1"
47
48
logf "sigs.k8s.io/controller-runtime/pkg/internal/log"
48
49
intrec "sigs.k8s.io/controller-runtime/pkg/internal/recorder"
@@ -612,9 +613,7 @@ var _ = Describe("manger.Manager", func() {
612
613
}
613
614
mgr , ok := m .(* controllerManager )
614
615
Expect (ok ).To (BeTrue ())
615
- mgr .startCache = func (context.Context ) error {
616
- return fmt .Errorf ("expected error" )
617
- }
616
+ mgr .caches = []hasCache {& cacheProvider {cache : & informertest.FakeInformers {Error : fmt .Errorf ("expected error" )}}}
618
617
619
618
ctx , cancel := context .WithCancel (context .Background ())
620
619
defer cancel ()
@@ -623,6 +622,84 @@ var _ = Describe("manger.Manager", func() {
623
622
close (done )
624
623
})
625
624
625
+ It ("should start the cache before starting anything else" , func (done Done ) {
626
+ fakeCache := & informertest.FakeInformers {}
627
+ options .NewCache = func (_ * rest.Config , _ cache.Options ) (cache.Cache , error ) {
628
+ return fakeCache , nil
629
+ }
630
+ m , err := New (cfg , options )
631
+ Expect (err ).NotTo (HaveOccurred ())
632
+ for _ , cb := range callbacks {
633
+ cb (m )
634
+ }
635
+
636
+ runnableWasStarted := make (chan struct {})
637
+ Expect (m .Add (RunnableFunc (func (ctx context.Context ) error {
638
+ defer GinkgoRecover ()
639
+ if ! fakeCache .WaitForCacheSyncCalled {
640
+ return errors .New ("WaitForCacheSyncCalled wasn't called before Runnable got started" )
641
+ }
642
+
643
+ close (runnableWasStarted )
644
+ return nil
645
+ }))).To (Succeed ())
646
+
647
+ ctx , cancel := context .WithCancel (context .Background ())
648
+ defer cancel ()
649
+ go func () {
650
+ defer GinkgoRecover ()
651
+ Expect (m .Start (ctx )).ToNot (HaveOccurred ())
652
+ }()
653
+
654
+ <- runnableWasStarted
655
+ close (done )
656
+ })
657
+
658
+ It ("should start additional clusters before anything else" , func (done Done ) {
659
+ fakeCache := & informertest.FakeInformers {}
660
+ options .NewCache = func (_ * rest.Config , _ cache.Options ) (cache.Cache , error ) {
661
+ return fakeCache , nil
662
+ }
663
+ m , err := New (cfg , options )
664
+ Expect (err ).NotTo (HaveOccurred ())
665
+ for _ , cb := range callbacks {
666
+ cb (m )
667
+ }
668
+
669
+ additionalClusterCache := & informertest.FakeInformers {}
670
+ additionalCluster , err := cluster .New (cfg , func (o * cluster.Options ) {
671
+ o .NewCache = func (_ * rest.Config , _ cache.Options ) (cache.Cache , error ) {
672
+ return additionalClusterCache , nil
673
+ }
674
+ })
675
+ Expect (err ).NotTo (HaveOccurred ())
676
+ Expect (m .Add (additionalCluster )).NotTo (HaveOccurred ())
677
+
678
+ runnableWasStarted := make (chan struct {})
679
+ Expect (m .Add (RunnableFunc (func (ctx context.Context ) error {
680
+ defer GinkgoRecover ()
681
+ if ! fakeCache .WaitForCacheSyncCalled {
682
+ return errors .New ("WaitForCacheSyncCalled wasn't called before Runnable got started" )
683
+ }
684
+ if ! additionalClusterCache .WaitForCacheSyncCalled {
685
+ return errors .New ("the additional clusters WaitForCacheSync wasn't called before Runnable got started" )
686
+ }
687
+
688
+ close (runnableWasStarted )
689
+ return nil
690
+ }))).To (Succeed ())
691
+
692
+ ctx , cancel := context .WithCancel (context .Background ())
693
+ defer cancel ()
694
+ go func () {
695
+ defer GinkgoRecover ()
696
+ Expect (m .Start (ctx )).ToNot (HaveOccurred ())
697
+ }()
698
+
699
+ <- runnableWasStarted
700
+ close (done )
701
+ })
702
+
626
703
It ("should return an error if any Components fail to Start" , func (done Done ) {
627
704
m , err := New (cfg , options )
628
705
Expect (err ).NotTo (HaveOccurred ())
@@ -1625,3 +1702,17 @@ func (f *fakeDeferredLoader) Complete() (v1alpha1.ControllerManagerConfiguration
1625
1702
func (f * fakeDeferredLoader ) InjectScheme (scheme * runtime.Scheme ) error {
1626
1703
return nil
1627
1704
}
1705
+
1706
+ var _ Runnable = & cacheProvider {}
1707
+
1708
+ type cacheProvider struct {
1709
+ cache cache.Cache
1710
+ }
1711
+
1712
+ func (c * cacheProvider ) GetCache () cache.Cache {
1713
+ return c .cache
1714
+ }
1715
+
1716
+ func (c * cacheProvider ) Start (ctx context.Context ) error {
1717
+ return c .cache .Start (ctx )
1718
+ }
0 commit comments