@@ -17,14 +17,17 @@ limitations under the License.
17
17
package configmanager
18
18
19
19
import (
20
+ "context"
20
21
"fmt"
21
22
"testing"
23
+ "time"
22
24
23
25
"github.com/stretchr/testify/assert"
24
26
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25
27
"k8s.io/apimachinery/pkg/labels"
26
28
"k8s.io/apimachinery/pkg/runtime"
27
29
"k8s.io/apimachinery/pkg/runtime/schema"
30
+ "k8s.io/client-go/dynamic"
28
31
"k8s.io/client-go/tools/cache"
29
32
30
33
configv1alpha1 "github.com/karmada-io/karmada/pkg/apis/config/v1alpha1"
@@ -62,6 +65,10 @@ func TestNewExploreConfigManager(t *testing.T) {
62
65
63
66
assert .NotNil (t , manager , "Manager should not be nil" )
64
67
assert .NotNil (t , manager .HookAccessors (), "Accessors should be initialized" )
68
+
69
+ internalManager , ok := manager .(* interpreterConfigManager )
70
+ assert .True (t , ok )
71
+ assert .Equal (t , informerManager , internalManager .informer )
65
72
})
66
73
}
67
74
}
@@ -70,6 +77,7 @@ func TestHasSynced(t *testing.T) {
70
77
tests := []struct {
71
78
name string
72
79
initialSynced bool
80
+ informer genericmanager.SingleClusterInformerManager
73
81
listErr error
74
82
listResult []runtime.Object
75
83
expectedSynced bool
@@ -80,24 +88,47 @@ func TestHasSynced(t *testing.T) {
80
88
expectedSynced : true ,
81
89
},
82
90
{
83
- name : "not synced but empty list " ,
91
+ name : "informer not configured " ,
84
92
initialSynced : false ,
93
+ informer : nil ,
94
+ expectedSynced : false ,
95
+ },
96
+ {
97
+ name : "informer not synced" ,
98
+ initialSynced : false ,
99
+ informer : & mockSingleClusterInformerManager {
100
+ isSynced : false ,
101
+ },
102
+ expectedSynced : false ,
103
+ },
104
+ {
105
+ name : "sync with empty list" ,
106
+ initialSynced : false ,
107
+ informer : & mockSingleClusterInformerManager {
108
+ isSynced : true ,
109
+ },
85
110
listResult : []runtime.Object {},
86
111
expectedSynced : true ,
87
112
},
88
113
{
89
- name : "not synced with items" ,
114
+ name : "sync with items" ,
90
115
initialSynced : false ,
116
+ informer : & mockSingleClusterInformerManager {
117
+ isSynced : true ,
118
+ },
91
119
listResult : []runtime.Object {
92
120
& configv1alpha1.ResourceInterpreterWebhookConfiguration {
93
121
ObjectMeta : metav1.ObjectMeta {Name : "test" },
94
122
},
95
123
},
96
- expectedSynced : false ,
124
+ expectedSynced : true ,
97
125
},
98
126
{
99
- name : "list error" ,
100
- initialSynced : false ,
127
+ name : "list error" ,
128
+ initialSynced : false ,
129
+ informer : & mockSingleClusterInformerManager {
130
+ isSynced : true ,
131
+ },
101
132
listErr : fmt .Errorf ("test error" ),
102
133
expectedSynced : false ,
103
134
},
@@ -106,6 +137,7 @@ func TestHasSynced(t *testing.T) {
106
137
for _ , tt := range tests {
107
138
t .Run (tt .name , func (t * testing.T ) {
108
139
manager := & interpreterConfigManager {
140
+ informer : tt .informer ,
109
141
lister : & mockLister {
110
142
err : tt .listErr ,
111
143
items : tt .listResult ,
@@ -181,12 +213,30 @@ func TestUpdateConfiguration(t *testing.T) {
181
213
name string
182
214
configs []runtime.Object
183
215
listErr error
216
+ informer genericmanager.SingleClusterInformerManager
184
217
expectedCount int
185
218
wantSynced bool
186
219
}{
187
220
{
188
- name : "empty configuration" ,
189
- configs : []runtime.Object {},
221
+ name : "informer not configured" ,
222
+ informer : nil ,
223
+ expectedCount : 0 ,
224
+ wantSynced : false ,
225
+ },
226
+ {
227
+ name : "informer not synced" ,
228
+ informer : & mockSingleClusterInformerManager {
229
+ isSynced : false ,
230
+ },
231
+ expectedCount : 0 ,
232
+ wantSynced : false ,
233
+ },
234
+ {
235
+ name : "empty configuration" ,
236
+ configs : []runtime.Object {},
237
+ informer : & mockSingleClusterInformerManager {
238
+ isSynced : true ,
239
+ },
190
240
expectedCount : 0 ,
191
241
wantSynced : true ,
192
242
},
@@ -204,13 +254,19 @@ func TestUpdateConfiguration(t *testing.T) {
204
254
},
205
255
},
206
256
},
257
+ informer : & mockSingleClusterInformerManager {
258
+ isSynced : true ,
259
+ },
207
260
expectedCount : 1 ,
208
261
wantSynced : true ,
209
262
},
210
263
{
211
- name : "list error" ,
212
- configs : []runtime.Object {},
213
- listErr : fmt .Errorf ("test error" ),
264
+ name : "list error" ,
265
+ configs : []runtime.Object {},
266
+ listErr : fmt .Errorf ("test error" ),
267
+ informer : & mockSingleClusterInformerManager {
268
+ isSynced : true ,
269
+ },
214
270
expectedCount : 0 ,
215
271
wantSynced : false ,
216
272
},
@@ -223,21 +279,63 @@ func TestUpdateConfiguration(t *testing.T) {
223
279
items : tt .configs ,
224
280
err : tt .listErr ,
225
281
},
282
+ informer : tt .informer ,
226
283
}
227
284
manager .configuration .Store ([]WebhookAccessor {})
228
285
manager .initialSynced .Store (false )
229
286
230
- manager .updateConfiguration ()
287
+ synced := manager .HasSynced ()
288
+ assert .Equal (t , tt .wantSynced , synced )
231
289
232
290
accessors := manager .HookAccessors ()
233
291
assert .Equal (t , tt .expectedCount , len (accessors ))
234
- assert .Equal (t , tt .wantSynced , manager .HasSynced ())
235
292
})
236
293
}
237
294
}
238
295
239
296
// Mock Implementations
240
297
298
+ type mockSingleClusterInformerManager struct {
299
+ isSynced bool
300
+ }
301
+
302
+ func (m * mockSingleClusterInformerManager ) IsInformerSynced (_ schema.GroupVersionResource ) bool {
303
+ return m .isSynced
304
+ }
305
+
306
+ func (m * mockSingleClusterInformerManager ) Lister (_ schema.GroupVersionResource ) cache.GenericLister {
307
+ return nil
308
+ }
309
+
310
+ func (m * mockSingleClusterInformerManager ) ForResource (_ schema.GroupVersionResource , _ cache.ResourceEventHandler ) {
311
+ }
312
+
313
+ func (m * mockSingleClusterInformerManager ) Start () {
314
+ }
315
+
316
+ func (m * mockSingleClusterInformerManager ) Stop () {
317
+ }
318
+
319
+ func (m * mockSingleClusterInformerManager ) WaitForCacheSync () map [schema.GroupVersionResource ]bool {
320
+ return nil
321
+ }
322
+
323
+ func (m * mockSingleClusterInformerManager ) WaitForCacheSyncWithTimeout (_ time.Duration ) map [schema.GroupVersionResource ]bool {
324
+ return nil
325
+ }
326
+
327
+ func (m * mockSingleClusterInformerManager ) Context () context.Context {
328
+ return context .Background ()
329
+ }
330
+
331
+ func (m * mockSingleClusterInformerManager ) GetClient () dynamic.Interface {
332
+ return nil
333
+ }
334
+
335
+ func (m * mockSingleClusterInformerManager ) IsHandlerExist (_ schema.GroupVersionResource , _ cache.ResourceEventHandler ) bool {
336
+ return false
337
+ }
338
+
241
339
type mockLister struct {
242
340
items []runtime.Object
243
341
err error
0 commit comments