@@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
55you may not use this file except in compliance with the License.
66You may obtain a copy of the License at
77
8- http://www.apache.org/licenses/LICENSE-2.0
8+ http://www.apache.org/licenses/LICENSE-2.0
99
1010Unless required by applicable law or agreed to in writing, software
1111distributed under the License is distributed on an "AS IS" BASIS,
@@ -19,6 +19,7 @@ import (
1919 "context"
2020 "crypto/tls"
2121 "encoding/json"
22+ "fmt"
2223 "net"
2324 "net/http"
2425 "net/http/httptest"
@@ -30,10 +31,12 @@ import (
3031 athenz_domain "github.com/AthenZ/k8s-athenz-syncer/pkg/apis/athenz/v1"
3132 "github.com/AthenZ/k8s-athenz-syncer/pkg/client/clientset/versioned/fake"
3233 "github.com/AthenZ/k8s-athenz-syncer/pkg/cron"
34+ "github.com/AthenZ/k8s-athenz-syncer/pkg/log"
3335 "github.com/AthenZ/k8s-athenz-syncer/pkg/util"
3436 "github.com/ardielle/ardielle-go/rdl"
3537 "github.com/google/go-cmp/cmp"
3638 k8sfake "k8s.io/client-go/kubernetes/fake"
39+ "k8s.io/client-go/util/workqueue"
3740)
3841
3942const (
@@ -45,7 +48,7 @@ func newController() *Controller {
4548 athenzclientset := fake .NewSimpleClientset ()
4649 clientset := k8sfake .NewSimpleClientset ()
4750 zmsclient := zms .NewClient ("https://zms.athenz.com" , & http.Transport {})
48- util := util .NewUtil ("admin.domain" , []string {"kube-system" , "kube-public" , "kube-test" })
51+ util := util .NewUtil ("admin.domain" , []string {"kube-system" , "kube-public" , "kube-test" }, [] string { "acceptance-test" } )
4952 cm := & cron.AthenzContactTimeConfigMap {
5053 Namespace : "kube-yahoo" ,
5154 Name : "athenzcall-config" ,
@@ -161,7 +164,7 @@ func TestDeepCopy(t *testing.T) {
161164 }
162165}
163166
164- //TestZmsGetSignedDomains - test zms API call to get signed domains
167+ // TestZmsGetSignedDomains - test zms API call to get signed domains
165168func TestZmsGetSignedDomains (t * testing.T ) {
166169 d := getFakeDomain ()
167170 signedDomain := zms.SignedDomains {
@@ -204,3 +207,76 @@ func testingHTTPClient(handler http.Handler) (*http.Client, func()) {
204207
205208 return cli , s .Close
206209}
210+ func TestNsinformerhandler (t * testing.T ) {
211+ log .InitLogger ("/tmp/log/test.log" , "info" )
212+
213+ tests := []struct {
214+ name string
215+ keyFunc func (obj interface {}) (string , error )
216+ excludedNS []string
217+ expectedResult string
218+ expectedQueueLen int
219+ shouldAddToQueue bool
220+ }{
221+ {
222+ name : "Error from key function" ,
223+ keyFunc : func (obj interface {}) (string , error ) {
224+ return "" , fmt .Errorf ("mock key function error" )
225+ },
226+ excludedNS : []string {},
227+ expectedResult : "" ,
228+ expectedQueueLen : 0 ,
229+ shouldAddToQueue : false ,
230+ },
231+ {
232+ name : "Excluded namespace" ,
233+ keyFunc : func (obj interface {}) (string , error ) {
234+ return "test-excluded" , nil
235+ },
236+ excludedNS : []string {"test-excluded" },
237+ expectedResult : "test-excluded" ,
238+ expectedQueueLen : 0 ,
239+ shouldAddToQueue : false ,
240+ },
241+ {
242+ name : "Non-excluded namespace gets added to queue" ,
243+ keyFunc : func (obj interface {}) (string , error ) {
244+ return "test-namespace" , nil
245+ },
246+ excludedNS : []string {},
247+ expectedResult : "test-namespace" ,
248+ expectedQueueLen : 1 ,
249+ shouldAddToQueue : true ,
250+ },
251+ }
252+
253+ for _ , tt := range tests {
254+ t .Run (tt .name , func (t * testing.T ) {
255+ c := newController ()
256+ c .util = util .NewUtil ("admin.domain" , []string {"kube-system" }, tt .excludedNS )
257+ mockQueue := workqueue .NewRateLimitingQueue (workqueue .DefaultControllerRateLimiter ())
258+ c .queue = mockQueue
259+
260+ result := c .nsinformerhandler (tt .keyFunc , & athenz_domain.AthenzDomain {})
261+
262+ if result != tt .expectedResult {
263+ t .Errorf ("Expected result '%s', got: '%s'" , tt .expectedResult , result )
264+ }
265+
266+ // Sleep to allow item to be queued
267+ time .Sleep (2 * time .Second )
268+
269+ if mockQueue .Len () != tt .expectedQueueLen {
270+ t .Errorf ("Expected queue length to be %d, got %d" , tt .expectedQueueLen , mockQueue .Len ())
271+ }
272+
273+ if tt .shouldAddToQueue && mockQueue .Len () > 0 {
274+ expectedDomain := c .util .NamespaceToDomain (tt .expectedResult )
275+ item , _ := mockQueue .Get ()
276+ if item != expectedDomain {
277+ t .Errorf ("Expected %s in queue, got %s" , expectedDomain , item )
278+ }
279+ }
280+ })
281+ }
282+ }
0 commit comments