@@ -17,8 +17,6 @@ limitations under the License.
17
17
package internal_test
18
18
19
19
import (
20
- "time"
21
-
22
20
"github.com/kubernetes-sigs/controller-runtime/pkg/controller/event"
23
21
"github.com/kubernetes-sigs/controller-runtime/pkg/controller/eventhandler"
24
22
"github.com/kubernetes-sigs/controller-runtime/pkg/controller/source/internal"
@@ -28,13 +26,19 @@ import (
28
26
"k8s.io/client-go/tools/cache"
29
27
"k8s.io/client-go/util/workqueue"
30
28
29
+ "github.com/kubernetes-sigs/controller-runtime/pkg/controller/controllertest"
30
+ "github.com/kubernetes-sigs/controller-runtime/pkg/controller/predicate"
31
31
corev1 "k8s.io/api/core/v1"
32
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
33
+ "k8s.io/apimachinery/pkg/runtime"
34
+ "k8s.io/apimachinery/pkg/runtime/schema"
32
35
)
33
36
34
37
var _ = Describe ("Internal" , func () {
35
38
36
39
var instance internal.EventHandler
37
- var funcs * eventhandler.Funcs
40
+ var funcs , setfuncs * eventhandler.Funcs
41
+ var set bool
38
42
BeforeEach (func () {
39
43
funcs = & eventhandler.Funcs {
40
44
CreateFunc : func (workqueue.RateLimitingInterface , event.CreateEvent ) {
@@ -54,8 +58,23 @@ var _ = Describe("Internal", func() {
54
58
Fail ("Did not expect GenericEvent to be called." )
55
59
},
56
60
}
61
+
62
+ setfuncs = & eventhandler.Funcs {
63
+ CreateFunc : func (workqueue.RateLimitingInterface , event.CreateEvent ) {
64
+ set = true
65
+ },
66
+ DeleteFunc : func (q workqueue.RateLimitingInterface , e event.DeleteEvent ) {
67
+ set = true
68
+ },
69
+ UpdateFunc : func (workqueue.RateLimitingInterface , event.UpdateEvent ) {
70
+ set = true
71
+ },
72
+ GenericFunc : func (workqueue.RateLimitingInterface , event.GenericEvent ) {
73
+ set = true
74
+ },
75
+ }
57
76
instance = internal.EventHandler {
58
- Queue : Queue {},
77
+ Queue : controllertest. Queue {},
59
78
EventHandler : funcs ,
60
79
}
61
80
})
@@ -86,6 +105,63 @@ var _ = Describe("Internal", func() {
86
105
close (done )
87
106
})
88
107
108
+ It ("should used Predicates to filter CreateEvents" , func (done Done ) {
109
+ instance = internal.EventHandler {
110
+ Queue : controllertest.Queue {},
111
+ EventHandler : setfuncs ,
112
+ }
113
+
114
+ set = false
115
+ instance .Predicates = []predicate.Predicate {
116
+ predicate.Funcs {CreateFunc : func (event.CreateEvent ) bool { return false }},
117
+ }
118
+ instance .OnAdd (pod )
119
+ Expect (set ).To (BeFalse ())
120
+
121
+ set = false
122
+ instance .Predicates = []predicate.Predicate {
123
+ predicate.Funcs {CreateFunc : func (event.CreateEvent ) bool { return true }},
124
+ }
125
+ instance .OnAdd (pod )
126
+ Expect (set ).To (BeTrue ())
127
+
128
+ set = false
129
+ instance .Predicates = []predicate.Predicate {
130
+ predicate.Funcs {CreateFunc : func (event.CreateEvent ) bool { return true }},
131
+ predicate.Funcs {CreateFunc : func (event.CreateEvent ) bool { return false }},
132
+ }
133
+ instance .OnAdd (pod )
134
+ Expect (set ).To (BeFalse ())
135
+
136
+ set = false
137
+ instance .Predicates = []predicate.Predicate {
138
+ predicate.Funcs {CreateFunc : func (event.CreateEvent ) bool { return false }},
139
+ predicate.Funcs {CreateFunc : func (event.CreateEvent ) bool { return true }},
140
+ }
141
+ instance .OnAdd (pod )
142
+ Expect (set ).To (BeFalse ())
143
+
144
+ set = false
145
+ instance .Predicates = []predicate.Predicate {
146
+ predicate.Funcs {CreateFunc : func (event.CreateEvent ) bool { return true }},
147
+ predicate.Funcs {CreateFunc : func (event.CreateEvent ) bool { return true }},
148
+ }
149
+ instance .OnAdd (pod )
150
+ Expect (set ).To (BeTrue ())
151
+
152
+ close (done )
153
+ })
154
+
155
+ It ("should not call Create EventHandler if the object is not a runtime.Object" , func (done Done ) {
156
+ instance .OnAdd (& metav1.ObjectMeta {})
157
+ close (done )
158
+ })
159
+
160
+ It ("should not call Create EventHandler if the object does not have metadata" , func (done Done ) {
161
+ instance .OnAdd (FooRuntimeObject {})
162
+ close (done )
163
+ })
164
+
89
165
It ("should create an UpdateEvent" , func (done Done ) {
90
166
funcs .UpdateFunc = func (q workqueue.RateLimitingInterface , evt event.UpdateEvent ) {
91
167
defer GinkgoRecover ()
@@ -105,6 +181,65 @@ var _ = Describe("Internal", func() {
105
181
close (done )
106
182
})
107
183
184
+ It ("should used Predicates to filter UpdateEvents" , func (done Done ) {
185
+ instance = internal.EventHandler {
186
+ Queue : controllertest.Queue {},
187
+ EventHandler : setfuncs ,
188
+ }
189
+
190
+ set = false
191
+ instance .Predicates = []predicate.Predicate {
192
+ predicate.Funcs {UpdateFunc : func (updateEvent event.UpdateEvent ) bool { return false }},
193
+ }
194
+ instance .OnUpdate (pod , newPod )
195
+ Expect (set ).To (BeFalse ())
196
+
197
+ set = false
198
+ instance .Predicates = []predicate.Predicate {
199
+ predicate.Funcs {UpdateFunc : func (event.UpdateEvent ) bool { return true }},
200
+ }
201
+ instance .OnUpdate (pod , newPod )
202
+ Expect (set ).To (BeTrue ())
203
+
204
+ set = false
205
+ instance .Predicates = []predicate.Predicate {
206
+ predicate.Funcs {UpdateFunc : func (event.UpdateEvent ) bool { return true }},
207
+ predicate.Funcs {UpdateFunc : func (event.UpdateEvent ) bool { return false }},
208
+ }
209
+ instance .OnUpdate (pod , newPod )
210
+ Expect (set ).To (BeFalse ())
211
+
212
+ set = false
213
+ instance .Predicates = []predicate.Predicate {
214
+ predicate.Funcs {UpdateFunc : func (event.UpdateEvent ) bool { return false }},
215
+ predicate.Funcs {UpdateFunc : func (event.UpdateEvent ) bool { return true }},
216
+ }
217
+ instance .OnUpdate (pod , newPod )
218
+ Expect (set ).To (BeFalse ())
219
+
220
+ set = false
221
+ instance .Predicates = []predicate.Predicate {
222
+ predicate.Funcs {CreateFunc : func (event.CreateEvent ) bool { return true }},
223
+ predicate.Funcs {CreateFunc : func (event.CreateEvent ) bool { return true }},
224
+ }
225
+ instance .OnUpdate (pod , newPod )
226
+ Expect (set ).To (BeTrue ())
227
+
228
+ close (done )
229
+ })
230
+
231
+ It ("should not call Update EventHandler if the object is not a runtime.Object" , func (done Done ) {
232
+ instance .OnUpdate (& metav1.ObjectMeta {}, & corev1.Pod {})
233
+ instance .OnUpdate (& corev1.Pod {}, & metav1.ObjectMeta {})
234
+ close (done )
235
+ })
236
+
237
+ It ("should not call Update EventHandler if the object does not have metadata" , func (done Done ) {
238
+ instance .OnUpdate (FooRuntimeObject {}, & corev1.Pod {})
239
+ instance .OnUpdate (& corev1.Pod {}, FooRuntimeObject {})
240
+ close (done )
241
+ })
242
+
108
243
It ("should create a DeleteEvent" , func (done Done ) {
109
244
funcs .DeleteFunc = func (q workqueue.RateLimitingInterface , evt event.DeleteEvent ) {
110
245
defer GinkgoRecover ()
@@ -119,6 +254,63 @@ var _ = Describe("Internal", func() {
119
254
close (done )
120
255
})
121
256
257
+ It ("should used Predicates to filter DeleteEvents" , func (done Done ) {
258
+ instance = internal.EventHandler {
259
+ Queue : controllertest.Queue {},
260
+ EventHandler : setfuncs ,
261
+ }
262
+
263
+ set = false
264
+ instance .Predicates = []predicate.Predicate {
265
+ predicate.Funcs {DeleteFunc : func (event.DeleteEvent ) bool { return false }},
266
+ }
267
+ instance .OnDelete (pod )
268
+ Expect (set ).To (BeFalse ())
269
+
270
+ set = false
271
+ instance .Predicates = []predicate.Predicate {
272
+ predicate.Funcs {DeleteFunc : func (event.DeleteEvent ) bool { return true }},
273
+ }
274
+ instance .OnDelete (pod )
275
+ Expect (set ).To (BeTrue ())
276
+
277
+ set = false
278
+ instance .Predicates = []predicate.Predicate {
279
+ predicate.Funcs {DeleteFunc : func (event.DeleteEvent ) bool { return true }},
280
+ predicate.Funcs {DeleteFunc : func (event.DeleteEvent ) bool { return false }},
281
+ }
282
+ instance .OnDelete (pod )
283
+ Expect (set ).To (BeFalse ())
284
+
285
+ set = false
286
+ instance .Predicates = []predicate.Predicate {
287
+ predicate.Funcs {DeleteFunc : func (event.DeleteEvent ) bool { return false }},
288
+ predicate.Funcs {DeleteFunc : func (event.DeleteEvent ) bool { return true }},
289
+ }
290
+ instance .OnDelete (pod )
291
+ Expect (set ).To (BeFalse ())
292
+
293
+ set = false
294
+ instance .Predicates = []predicate.Predicate {
295
+ predicate.Funcs {DeleteFunc : func (event.DeleteEvent ) bool { return true }},
296
+ predicate.Funcs {DeleteFunc : func (event.DeleteEvent ) bool { return true }},
297
+ }
298
+ instance .OnDelete (pod )
299
+ Expect (set ).To (BeTrue ())
300
+
301
+ close (done )
302
+ })
303
+
304
+ It ("should not call Delete EventHandler if the object is not a runtime.Object" , func (done Done ) {
305
+ instance .OnDelete (& metav1.ObjectMeta {})
306
+ close (done )
307
+ })
308
+
309
+ It ("should not call Delete EventHandler if the object does not have metadata" , func (done Done ) {
310
+ instance .OnDelete (FooRuntimeObject {})
311
+ close (done )
312
+ })
313
+
122
314
It ("should create a DeleteEvent from a tombstone" , func (done Done ) {
123
315
124
316
tombstone := cache.DeletedFinalStateUnknown {
@@ -153,25 +345,9 @@ var _ = Describe("Internal", func() {
153
345
154
346
type Foo struct {}
155
347
156
- var _ workqueue.RateLimitingInterface = Queue {}
157
-
158
- type Queue struct {
159
- workqueue.Interface
160
- }
161
-
162
- // AddAfter adds an item to the workqueue after the indicated duration has passed
163
- func (q Queue ) AddAfter (item interface {}, duration time.Duration ) {
164
- q .Add (item )
165
- }
166
-
167
- func (q Queue ) AddRateLimited (item interface {}) {
168
- q .Add (item )
169
- }
348
+ var _ runtime.Object = FooRuntimeObject {}
170
349
171
- func (q Queue ) Forget (item interface {}) {
172
- // Do nothing
173
- }
350
+ type FooRuntimeObject struct {}
174
351
175
- func (q Queue ) NumRequeues (item interface {}) int {
176
- return 0
177
- }
352
+ func (FooRuntimeObject ) GetObjectKind () schema.ObjectKind { return nil }
353
+ func (FooRuntimeObject ) DeepCopyObject () runtime.Object { return nil }
0 commit comments