k8s.io/apiserver@v0.31.1/pkg/quota/v1/generic/evaluator_test.go (about) 1 /* 2 Copyright 2019 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package generic 18 19 import ( 20 "errors" 21 "testing" 22 23 "k8s.io/apimachinery/pkg/labels" 24 "k8s.io/apimachinery/pkg/runtime" 25 "k8s.io/client-go/tools/cache" 26 ) 27 28 func TestCachedHasSynced(t *testing.T) { 29 30 called := 0 31 result := false 32 cachedFunc := cachedHasSynced(func() bool { 33 called++ 34 return result 35 }) 36 37 if cachedFunc() { 38 t.Fatal("expected false") 39 } 40 if called != 1 { 41 t.Fatalf("expected called=1, got %d", called) 42 } 43 44 if cachedFunc() { 45 t.Fatal("expected false") 46 } 47 if called != 2 { 48 t.Fatalf("expected called=2, got %d", called) 49 } 50 51 result = true 52 if !cachedFunc() { 53 t.Fatal("expected true") 54 } 55 if called != 3 { 56 t.Fatalf("expected called=3, got %d", called) 57 } 58 59 if !cachedFunc() { 60 t.Fatal("expected true") 61 } 62 if called != 3 { 63 // no more calls once we return true 64 t.Fatalf("expected called=3, got %d", called) 65 } 66 } 67 68 func TestProtectedLister(t *testing.T) { 69 70 hasSynced := false 71 notReadyErr := errors.New("not ready") 72 fake := &fakeLister{} 73 l := &protectedLister{ 74 hasSynced: func() bool { return hasSynced }, 75 notReadyErr: notReadyErr, 76 delegate: fake, 77 } 78 if _, err := l.List(nil); err != notReadyErr { 79 t.Fatalf("expected %v, got %v", notReadyErr, err) 80 } 81 if _, err := l.Get(""); err != notReadyErr { 82 t.Fatalf("expected %v, got %v", notReadyErr, err) 83 } 84 if fake.called != 0 { 85 t.Fatalf("expected called=0, got %d", fake.called) 86 } 87 fake.called = 0 88 89 hasSynced = true 90 91 if _, err := l.List(nil); err != errFakeLister { 92 t.Fatalf("expected %v, got %v", errFakeLister, err) 93 } 94 if _, err := l.Get(""); err != errFakeLister { 95 t.Fatalf("expected %v, got %v", errFakeLister, err) 96 } 97 if fake.called != 2 { 98 t.Fatalf("expected called=2, got %d", fake.called) 99 } 100 fake.called = 0 101 102 hasSynced = false 103 104 if _, err := l.List(nil); err != notReadyErr { 105 t.Fatalf("expected %v, got %v", notReadyErr, err) 106 } 107 if _, err := l.Get(""); err != notReadyErr { 108 t.Fatalf("expected %v, got %v", notReadyErr, err) 109 } 110 if fake.called != 0 { 111 t.Fatalf("expected called=2, got %d", fake.called) 112 } 113 } 114 115 var errFakeLister = errors.New("errFakeLister") 116 117 type fakeLister struct { 118 called int 119 } 120 121 func (f *fakeLister) List(selector labels.Selector) (ret []runtime.Object, err error) { 122 f.called++ 123 return nil, errFakeLister 124 } 125 func (f *fakeLister) Get(name string) (runtime.Object, error) { 126 f.called++ 127 return nil, errFakeLister 128 } 129 func (f *fakeLister) ByNamespace(namespace string) cache.GenericNamespaceLister { 130 panic("not implemented") 131 }