istio.io/istio@v0.0.0-20240520182934-d79c90f27776/pkg/kube/controllers/queue_test.go (about) 1 // Copyright Istio Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package controllers 16 17 import ( 18 "testing" 19 "time" 20 21 "go.uber.org/atomic" 22 "k8s.io/apimachinery/pkg/types" 23 24 "istio.io/istio/pkg/test/util/assert" 25 "istio.io/istio/pkg/test/util/retry" 26 ) 27 28 func TestQueue(t *testing.T) { 29 handles := atomic.NewInt32(0) 30 q := NewQueue("custom", WithReconciler(func(key types.NamespacedName) error { 31 handles.Inc() 32 return nil 33 })) 34 q.Add(types.NamespacedName{Name: "something"}) 35 stop := make(chan struct{}) 36 go q.Run(stop) 37 retry.UntilOrFail(t, q.HasSynced, retry.Delay(time.Microsecond)) 38 assert.Equal(t, handles.Load(), 1) 39 q.Add(types.NamespacedName{Name: "something else"}) 40 close(stop) 41 assert.NoError(t, q.WaitForClose(time.Second)) 42 // event 2 is guaranteed to happen from WaitForClose 43 assert.Equal(t, handles.Load(), 2) 44 }