@@ -143,7 +143,7 @@ var _ = Describe("manger.Manager", func() {
143143 Context ("with leader election enabled" , func () {
144144 It ("should default ID to controller-runtime if ID is not set" , func () {
145145 var rl resourcelock.Interface
146- m , err := New (cfg , Options {
146+ m1 , err := New (cfg , Options {
147147 LeaderElection : true ,
148148 LeaderElectionNamespace : "default" ,
149149 LeaderElectionID : "test-leader-election-id" ,
@@ -152,10 +152,61 @@ var _ = Describe("manger.Manager", func() {
152152 rl , err = leaderelection .NewResourceLock (config , recorderProvider , options )
153153 return rl , err
154154 },
155+ HealthProbeBindAddress : "0" ,
156+ MetricsBindAddress : "0" ,
155157 })
156158 Expect (err ).ToNot (HaveOccurred ())
157- Expect (m ).ToNot (BeNil ())
159+ Expect (m1 ).ToNot (BeNil ())
158160 Expect (rl .Describe ()).To (Equal ("default/test-leader-election-id" ))
161+
162+ m2 , err := New (cfg , Options {
163+ LeaderElection : true ,
164+ LeaderElectionNamespace : "default" ,
165+ LeaderElectionID : "test-leader-election-id" ,
166+ newResourceLock : func (config * rest.Config , recorderProvider recorder.Provider , options leaderelection.Options ) (resourcelock.Interface , error ) {
167+ var err error
168+ rl , err = leaderelection .NewResourceLock (config , recorderProvider , options )
169+ return rl , err
170+ },
171+ HealthProbeBindAddress : "0" ,
172+ MetricsBindAddress : "0" ,
173+ })
174+
175+ Expect (err ).ToNot (HaveOccurred ())
176+ Expect (m2 ).ToNot (BeNil ())
177+ Expect (rl .Describe ()).To (Equal ("default/test-leader-election-id" ))
178+
179+ c1 := make (chan struct {})
180+ Expect (m1 .Add (RunnableFunc (func (s <- chan struct {}) error {
181+ defer GinkgoRecover ()
182+ close (c1 )
183+ return nil
184+ }))).To (Succeed ())
185+
186+ go func () {
187+ defer GinkgoRecover ()
188+ Expect (m1 .Elected ()).ShouldNot (BeClosed ())
189+ Expect (m1 .Start (stop )).NotTo (HaveOccurred ())
190+ Expect (m1 .Elected ()).Should (BeClosed ())
191+ }()
192+ <- c1
193+
194+ c2 := make (chan struct {})
195+ Expect (m2 .Add (RunnableFunc (func (s <- chan struct {}) error {
196+ defer GinkgoRecover ()
197+ close (c2 )
198+ return nil
199+ }))).To (Succeed ())
200+
201+ By ("Expect second manager to lose leader election" )
202+ go func () {
203+ defer GinkgoRecover ()
204+ Expect (m2 .Start (stop )).NotTo (HaveOccurred ())
205+ Consistently (m2 .Elected ()).ShouldNot (Receive ())
206+ }()
207+
208+ By ("Expect controller on manager without leader lease never to run" )
209+ Consistently (c2 ).ShouldNot (Receive ())
159210 })
160211
161212 It ("should return an error if namespace not set and not running in cluster" , func () {
@@ -260,8 +311,9 @@ var _ = Describe("manger.Manager", func() {
260311
261312 go func () {
262313 defer GinkgoRecover ()
314+ Expect (m .Elected ()).ShouldNot (BeClosed ())
263315 Expect (m .Start (stop )).NotTo (HaveOccurred ())
264- Expect (m .Elected ()).To (BeClosed ())
316+ Expect (m .Elected ()).Should (BeClosed ())
265317 }()
266318 <- c1
267319 <- c2
0 commit comments