1717package trigger
1818
1919import (
20+ "context"
2021 "testing"
2122
23+ triggerinformer "knative.dev/eventing/pkg/client/injection/informers/eventing/v1/trigger"
24+ "knative.dev/pkg/ptr"
25+
26+ "knative.dev/eventing/pkg/auth"
27+ filteredFactory "knative.dev/pkg/client/injection/kube/informers/factory/filtered"
28+
2229 "github.com/stretchr/testify/assert"
2330 corev1 "k8s.io/api/core/v1"
2431 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -27,7 +34,8 @@ import (
2734 _ "knative.dev/pkg/client/injection/kube/informers/core/v1/configmap/fake"
2835 _ "knative.dev/pkg/client/injection/kube/informers/core/v1/pod/fake"
2936 _ "knative.dev/pkg/client/injection/kube/informers/core/v1/secret/fake"
30- _ "knative.dev/pkg/client/injection/kube/informers/core/v1/serviceaccount/fake"
37+ _ "knative.dev/pkg/client/injection/kube/informers/core/v1/serviceaccount/filtered/fake"
38+ _ "knative.dev/pkg/client/injection/kube/informers/factory/filtered/fake"
3139 "knative.dev/pkg/configmap"
3240 reconcilertesting "knative.dev/pkg/reconciler/testing"
3341
@@ -42,8 +50,7 @@ import (
4250)
4351
4452func TestNewController (t * testing.T ) {
45- ctx , _ := reconcilertesting .SetupFakeContext (t )
46-
53+ ctx , _ := reconcilertesting .SetupFakeContext (t , SetUpInformerSelector )
4754 ctx = clientpool .WithKafkaClientPool (ctx )
4855
4956 controller := NewController (ctx , configmap .NewStaticWatcher (& corev1.ConfigMap {
@@ -60,8 +67,13 @@ func TestNewController(t *testing.T) {
6067 }
6168}
6269
70+ func SetUpInformerSelector (ctx context.Context ) context.Context {
71+ ctx = filteredFactory .WithSelectors (ctx , auth .OIDCLabelSelector )
72+ return ctx
73+ }
74+
6375func TestFilterTriggers (t * testing.T ) {
64- ctx , _ := reconcilertesting .SetupFakeContext (t )
76+ ctx , _ := reconcilertesting .SetupFakeContext (t , SetUpInformerSelector )
6577
6678 tt := []struct {
6779 name string
@@ -184,3 +196,166 @@ func TestFilterTriggers(t *testing.T) {
184196 })
185197 }
186198}
199+
200+ func TestFilterOIDCServiceAccounts (t * testing.T ) {
201+ ctx , _ := reconcilertesting .SetupFakeContext (t , SetUpInformerSelector )
202+
203+ tt := []struct {
204+ name string
205+ sa * corev1.ServiceAccount
206+ trigger * eventing.Trigger
207+ brokers []* eventing.Broker
208+ pass bool
209+ }{{
210+ name : "matching owner reference" ,
211+ sa : & corev1.ServiceAccount {
212+ ObjectMeta : metav1.ObjectMeta {
213+ Namespace : "ns" ,
214+ Name : "sa" ,
215+ OwnerReferences : []metav1.OwnerReference {
216+ {
217+ APIVersion : eventing .SchemeGroupVersion .String (),
218+ Kind : "Trigger" ,
219+ Name : "tr" ,
220+ Controller : ptr .Bool (true ),
221+ },
222+ },
223+ },
224+ },
225+ trigger : & eventing.Trigger {
226+ ObjectMeta : metav1.ObjectMeta {
227+ Namespace : "ns" ,
228+ Name : "tr" ,
229+ Finalizers : []string {FinalizerName },
230+ },
231+ Spec : eventing.TriggerSpec {
232+ Broker : "br" ,
233+ },
234+ },
235+ brokers : []* eventing.Broker {{
236+ ObjectMeta : metav1.ObjectMeta {
237+ Namespace : "ns" ,
238+ Name : "br" ,
239+ Annotations : map [string ]string {
240+ eventing .BrokerClassAnnotationKey : kafka .BrokerClass ,
241+ },
242+ },
243+ }},
244+ pass : true ,
245+ }, {
246+ name : "references trigger for wrong broker class" ,
247+ sa : & corev1.ServiceAccount {
248+ ObjectMeta : metav1.ObjectMeta {
249+ Namespace : "ns" ,
250+ Name : "sa" ,
251+ OwnerReferences : []metav1.OwnerReference {
252+ {
253+ APIVersion : eventing .SchemeGroupVersion .String (),
254+ Kind : "Trigger" ,
255+ Name : "tr" ,
256+ Controller : ptr .Bool (true ),
257+ },
258+ },
259+ },
260+ },
261+ trigger : & eventing.Trigger {
262+ ObjectMeta : metav1.ObjectMeta {
263+ Namespace : "ns" ,
264+ Name : "tr" ,
265+ },
266+ Spec : eventing.TriggerSpec {
267+ Broker : "br" ,
268+ },
269+ },
270+ brokers : []* eventing.Broker {{
271+ ObjectMeta : metav1.ObjectMeta {
272+ Namespace : "ns" ,
273+ Name : "br" ,
274+ Annotations : map [string ]string {
275+ eventing .BrokerClassAnnotationKey : "another-broker-class" ,
276+ },
277+ },
278+ }},
279+ pass : false ,
280+ }, {
281+ name : "references trigger with correct finalizer" ,
282+ sa : & corev1.ServiceAccount {
283+ ObjectMeta : metav1.ObjectMeta {
284+ Namespace : "ns" ,
285+ Name : "sa" ,
286+ OwnerReferences : []metav1.OwnerReference {
287+ {
288+ APIVersion : eventing .SchemeGroupVersion .String (),
289+ Kind : "Trigger" ,
290+ Name : "tr" ,
291+ Controller : ptr .Bool (true ),
292+ },
293+ },
294+ },
295+ },
296+ trigger : & eventing.Trigger {
297+ ObjectMeta : metav1.ObjectMeta {
298+ Namespace : "ns" ,
299+ Name : "tr" ,
300+ Finalizers : []string {FinalizerName },
301+ },
302+ Spec : eventing.TriggerSpec {
303+ Broker : "br" ,
304+ },
305+ },
306+ brokers : []* eventing.Broker {{
307+ ObjectMeta : metav1.ObjectMeta {
308+ Namespace : "ns" ,
309+ Name : "br" ,
310+ },
311+ }},
312+ pass : true ,
313+ }, {
314+ name : "no owner reference" ,
315+ sa : & corev1.ServiceAccount {
316+ ObjectMeta : metav1.ObjectMeta {
317+ Namespace : "ns" ,
318+ Name : "sa" ,
319+ },
320+ },
321+ trigger : & eventing.Trigger {
322+ ObjectMeta : metav1.ObjectMeta {
323+ Namespace : "ns" ,
324+ Name : "tr" ,
325+ Finalizers : []string {FinalizerName },
326+ },
327+ Spec : eventing.TriggerSpec {
328+ Broker : "br" ,
329+ },
330+ },
331+ brokers : []* eventing.Broker {{
332+ ObjectMeta : metav1.ObjectMeta {
333+ Namespace : "ns" ,
334+ Name : "br" ,
335+ Annotations : map [string ]string {
336+ eventing .BrokerClassAnnotationKey : kafka .BrokerClass ,
337+ },
338+ },
339+ }},
340+ pass : false ,
341+ }}
342+
343+ for _ , tc := range tt {
344+ tc := tc
345+ t .Run (tc .name , func (t * testing.T ) {
346+ brokerInformer := brokerinformer .Get (ctx )
347+ for _ , obj := range tc .brokers {
348+ err := brokerInformer .Informer ().GetStore ().Add (obj )
349+ assert .NoError (t , err )
350+ }
351+
352+ triggerInformer := triggerinformer .Get (ctx )
353+ err := triggerInformer .Informer ().GetStore ().Add (tc .trigger )
354+ assert .NoError (t , err )
355+
356+ filter := filterOIDCServiceAccounts (triggerInformer .Lister (), brokerInformer .Lister (), kafka .BrokerClass , FinalizerName )
357+ pass := filter (tc .sa )
358+ assert .Equal (t , tc .pass , pass )
359+ })
360+ }
361+ }
0 commit comments