@@ -143,7 +143,7 @@ var _ = Describe("manger.Manager", func() {
143
143
Context ("with leader election enabled" , func () {
144
144
It ("should default ID to controller-runtime if ID is not set" , func () {
145
145
var rl resourcelock.Interface
146
- m , err := New (cfg , Options {
146
+ m1 , err := New (cfg , Options {
147
147
LeaderElection : true ,
148
148
LeaderElectionNamespace : "default" ,
149
149
LeaderElectionID : "test-leader-election-id" ,
@@ -152,10 +152,61 @@ var _ = Describe("manger.Manager", func() {
152
152
rl , err = leaderelection .NewResourceLock (config , recorderProvider , options )
153
153
return rl , err
154
154
},
155
+ HealthProbeBindAddress : "0" ,
156
+ MetricsBindAddress : "0" ,
155
157
})
156
158
Expect (err ).ToNot (HaveOccurred ())
157
- Expect (m ).ToNot (BeNil ())
159
+ Expect (m1 ).ToNot (BeNil ())
158
160
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 ())
159
210
})
160
211
161
212
It ("should return an error if namespace not set and not running in cluster" , func () {
@@ -260,7 +311,9 @@ var _ = Describe("manger.Manager", func() {
260
311
261
312
go func () {
262
313
defer GinkgoRecover ()
314
+ Expect (m .Elected ()).ShouldNot (BeClosed ())
263
315
Expect (m .Start (stop )).NotTo (HaveOccurred ())
316
+ Expect (m .Elected ()).Should (BeClosed ())
264
317
}()
265
318
<- c1
266
319
<- c2
0 commit comments