@@ -17,22 +17,36 @@ import (
17
17
"k8s.io/apimachinery/pkg/api/resource"
18
18
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
19
19
"k8s.io/apimachinery/pkg/labels"
20
+ "k8s.io/apimachinery/pkg/runtime"
20
21
"k8s.io/apimachinery/pkg/runtime/schema"
22
+ dynamicfake "k8s.io/client-go/dynamic/fake"
21
23
"k8s.io/client-go/kubernetes/fake"
22
24
utilptr "k8s.io/utils/ptr"
23
25
26
+ fakeconfigv1client "github.com/openshift/client-go/config/clientset/versioned/fake"
27
+ configv1informers "github.com/openshift/client-go/config/informers/externalversions"
28
+ fakeroutev1client "github.com/openshift/client-go/route/clientset/versioned/fake"
29
+ routev1informers "github.com/openshift/client-go/route/informers/externalversions"
24
30
deschedulerv1 "github.com/openshift/cluster-kube-descheduler-operator/pkg/apis/descheduler/v1"
25
31
operatorconfigclient "github.com/openshift/cluster-kube-descheduler-operator/pkg/generated/clientset/versioned/fake"
32
+ operatorclientinformers "github.com/openshift/cluster-kube-descheduler-operator/pkg/generated/informers/externalversions"
33
+ "github.com/openshift/cluster-kube-descheduler-operator/pkg/operator/operatorclient"
26
34
bindata "github.com/openshift/cluster-kube-descheduler-operator/pkg/operator/testdata"
27
35
)
28
36
29
37
var configLowNodeUtilization = & configv1.Scheduler {
38
+ ObjectMeta : metav1.ObjectMeta {
39
+ Name : "cluster" ,
40
+ },
30
41
Spec : configv1.SchedulerSpec {Policy : configv1.ConfigMapNameReference {Name : "" },
31
42
Profile : configv1 .LowNodeUtilization ,
32
43
},
33
44
}
34
45
35
46
var configHighNodeUtilization = & configv1.Scheduler {
47
+ ObjectMeta : metav1.ObjectMeta {
48
+ Name : "cluster" ,
49
+ },
36
50
Spec : configv1.SchedulerSpec {Policy : configv1.ConfigMapNameReference {Name : "" },
37
51
Profile : configv1 .HighNodeUtilization ,
38
52
},
@@ -45,12 +59,12 @@ func TestManageConfigMap(t *testing.T) {
45
59
46
60
fakeRecorder := NewFakeRecorder (1024 )
47
61
tests := []struct {
48
- name string
49
- targetConfigReconciler * TargetConfigReconciler
50
- want * corev1.ConfigMap
51
- descheduler * deschedulerv1.KubeDescheduler
52
- err error
53
- forceDeployment bool
62
+ name string
63
+ schedulerConfig * configv1. Scheduler
64
+ want * corev1.ConfigMap
65
+ descheduler * deschedulerv1.KubeDescheduler
66
+ err error
67
+ forceDeployment bool
54
68
}{
55
69
{
56
70
name : "Podlifetime" ,
@@ -179,9 +193,6 @@ func TestManageConfigMap(t *testing.T) {
179
193
},
180
194
{
181
195
name : "AffinityAndTaintsWithNamespaces" ,
182
- targetConfigReconciler : & TargetConfigReconciler {
183
- protectedNamespaces : []string {"openshift-kube-scheduler" , "kube-system" },
184
- },
185
196
descheduler : & deschedulerv1.KubeDescheduler {
186
197
Spec : deschedulerv1.KubeDeschedulerSpec {
187
198
Profiles : []deschedulerv1.DeschedulerProfile {"AffinityAndTaints" },
@@ -197,9 +208,6 @@ func TestManageConfigMap(t *testing.T) {
197
208
},
198
209
{
199
210
name : "LongLifecycleWithNamespaces" ,
200
- targetConfigReconciler : & TargetConfigReconciler {
201
- protectedNamespaces : []string {"openshift-kube-scheduler" , "kube-system" },
202
- },
203
211
descheduler : & deschedulerv1.KubeDescheduler {
204
212
Spec : deschedulerv1.KubeDeschedulerSpec {
205
213
Profiles : []deschedulerv1.DeschedulerProfile {"LongLifecycle" },
@@ -215,9 +223,6 @@ func TestManageConfigMap(t *testing.T) {
215
223
},
216
224
{
217
225
name : "LongLifecycleWithLocalStorage" ,
218
- targetConfigReconciler : & TargetConfigReconciler {
219
- protectedNamespaces : []string {"openshift-kube-scheduler" , "kube-system" },
220
- },
221
226
descheduler : & deschedulerv1.KubeDescheduler {
222
227
Spec : deschedulerv1.KubeDeschedulerSpec {
223
228
Profiles : []deschedulerv1.DeschedulerProfile {"LongLifecycle" , "EvictPodsWithLocalStorage" },
@@ -230,9 +235,6 @@ func TestManageConfigMap(t *testing.T) {
230
235
},
231
236
{
232
237
name : "SoftTopologyAndDuplicates" ,
233
- targetConfigReconciler : & TargetConfigReconciler {
234
- protectedNamespaces : []string {"openshift-kube-scheduler" , "kube-system" },
235
- },
236
238
descheduler : & deschedulerv1.KubeDescheduler {
237
239
Spec : deschedulerv1.KubeDeschedulerSpec {
238
240
Profiles : []deschedulerv1.DeschedulerProfile {"SoftTopologyAndDuplicates" },
@@ -245,9 +247,6 @@ func TestManageConfigMap(t *testing.T) {
245
247
},
246
248
{
247
249
name : "TopologyAndDuplicates" ,
248
- targetConfigReconciler : & TargetConfigReconciler {
249
- protectedNamespaces : []string {"openshift-kube-scheduler" , "kube-system" },
250
- },
251
250
descheduler : & deschedulerv1.KubeDescheduler {
252
251
Spec : deschedulerv1.KubeDeschedulerSpec {
253
252
Profiles : []deschedulerv1.DeschedulerProfile {"TopologyAndDuplicates" },
@@ -259,13 +258,8 @@ func TestManageConfigMap(t *testing.T) {
259
258
},
260
259
},
261
260
{
262
- name : "CompactAndScaleWithNamespaces" ,
263
- targetConfigReconciler : & TargetConfigReconciler {
264
- configSchedulerLister : & fakeSchedConfigLister {
265
- Items : map [string ]* configv1.Scheduler {"cluster" : configHighNodeUtilization },
266
- },
267
- protectedNamespaces : []string {"openshift-kube-scheduler" , "kube-system" },
268
- },
261
+ name : "CompactAndScaleWithNamespaces" ,
262
+ schedulerConfig : configHighNodeUtilization ,
269
263
descheduler : & deschedulerv1.KubeDescheduler {
270
264
Spec : deschedulerv1.KubeDeschedulerSpec {
271
265
Profiles : []deschedulerv1.DeschedulerProfile {"CompactAndScale" },
@@ -280,13 +274,8 @@ func TestManageConfigMap(t *testing.T) {
280
274
},
281
275
},
282
276
{
283
- name : "CompactAndScaleMinimal" ,
284
- targetConfigReconciler : & TargetConfigReconciler {
285
- configSchedulerLister : & fakeSchedConfigLister {
286
- Items : map [string ]* configv1.Scheduler {"cluster" : configHighNodeUtilization },
287
- },
288
- protectedNamespaces : []string {"openshift-kube-scheduler" , "kube-system" },
289
- },
277
+ name : "CompactAndScaleMinimal" ,
278
+ schedulerConfig : configHighNodeUtilization ,
290
279
descheduler : & deschedulerv1.KubeDescheduler {
291
280
Spec : deschedulerv1.KubeDeschedulerSpec {
292
281
Profiles : []deschedulerv1.DeschedulerProfile {"CompactAndScale" },
@@ -301,13 +290,8 @@ func TestManageConfigMap(t *testing.T) {
301
290
},
302
291
},
303
292
{
304
- name : "CompactAndScaleModest" ,
305
- targetConfigReconciler : & TargetConfigReconciler {
306
- configSchedulerLister : & fakeSchedConfigLister {
307
- Items : map [string ]* configv1.Scheduler {"cluster" : configHighNodeUtilization },
308
- },
309
- protectedNamespaces : []string {"openshift-kube-scheduler" , "kube-system" },
310
- },
293
+ name : "CompactAndScaleModest" ,
294
+ schedulerConfig : configHighNodeUtilization ,
311
295
descheduler : & deschedulerv1.KubeDescheduler {
312
296
Spec : deschedulerv1.KubeDeschedulerSpec {
313
297
Profiles : []deschedulerv1.DeschedulerProfile {"CompactAndScale" },
@@ -322,13 +306,8 @@ func TestManageConfigMap(t *testing.T) {
322
306
},
323
307
},
324
308
{
325
- name : "CompactAndScaleDefault" ,
326
- targetConfigReconciler : & TargetConfigReconciler {
327
- configSchedulerLister : & fakeSchedConfigLister {
328
- Items : map [string ]* configv1.Scheduler {"cluster" : configHighNodeUtilization },
329
- },
330
- protectedNamespaces : []string {"openshift-kube-scheduler" , "kube-system" },
331
- },
309
+ name : "CompactAndScaleDefault" ,
310
+ schedulerConfig : configHighNodeUtilization ,
332
311
descheduler : & deschedulerv1.KubeDescheduler {
333
312
Spec : deschedulerv1.KubeDeschedulerSpec {
334
313
Profiles : []deschedulerv1.DeschedulerProfile {"CompactAndScale" },
@@ -343,13 +322,8 @@ func TestManageConfigMap(t *testing.T) {
343
322
},
344
323
},
345
324
{
346
- name : "CompactAndScaleModerate" ,
347
- targetConfigReconciler : & TargetConfigReconciler {
348
- configSchedulerLister : & fakeSchedConfigLister {
349
- Items : map [string ]* configv1.Scheduler {"cluster" : configHighNodeUtilization },
350
- },
351
- protectedNamespaces : []string {"openshift-kube-scheduler" , "kube-system" },
352
- },
325
+ name : "CompactAndScaleModerate" ,
326
+ schedulerConfig : configHighNodeUtilization ,
353
327
descheduler : & deschedulerv1.KubeDescheduler {
354
328
Spec : deschedulerv1.KubeDeschedulerSpec {
355
329
Profiles : []deschedulerv1.DeschedulerProfile {"CompactAndScale" },
@@ -437,18 +411,62 @@ func TestManageConfigMap(t *testing.T) {
437
411
438
412
for _ , tt := range tests {
439
413
t .Run (tt .name , func (t * testing.T ) {
440
- if tt .targetConfigReconciler == nil {
441
- tt .targetConfigReconciler = & TargetConfigReconciler {}
414
+ if tt .schedulerConfig == nil {
415
+ tt .schedulerConfig = configLowNodeUtilization
442
416
}
443
- tt .targetConfigReconciler .ctx = context .TODO ()
444
- tt .targetConfigReconciler .kubeClient = fake .NewSimpleClientset ()
445
- tt .targetConfigReconciler .eventRecorder = fakeRecorder
446
- if tt .targetConfigReconciler .configSchedulerLister == nil {
447
- tt .targetConfigReconciler .configSchedulerLister = & fakeSchedConfigLister {
448
- Items : map [string ]* configv1.Scheduler {"cluster" : configLowNodeUtilization },
449
- }
417
+
418
+ objects := []runtime.Object {
419
+ & corev1.Namespace {
420
+ ObjectMeta : metav1.ObjectMeta {
421
+ Name : "openshift-kube-scheduler" ,
422
+ },
423
+ },
424
+ & corev1.Namespace {
425
+ ObjectMeta : metav1.ObjectMeta {
426
+ Name : "kube-system" ,
427
+ },
428
+ },
429
+ }
430
+
431
+ ctx , cancelFunc := context .WithCancel (context .TODO ())
432
+ defer cancelFunc ()
433
+ operatorConfigClient := operatorconfigclient .NewSimpleClientset ()
434
+ operatorConfigInformers := operatorclientinformers .NewSharedInformerFactory (operatorConfigClient , 10 * time .Minute )
435
+ deschedulerClient := & operatorclient.DeschedulerClient {
436
+ Ctx : ctx ,
437
+ SharedInformer : operatorConfigInformers .Kubedeschedulers ().V1 ().KubeDeschedulers ().Informer (),
438
+ OperatorClient : operatorConfigClient .KubedeschedulersV1 (),
450
439
}
451
- got , forceDeployment , err := tt .targetConfigReconciler .manageConfigMap (tt .descheduler )
440
+
441
+ openshiftConfigClient := fakeconfigv1client .NewSimpleClientset (tt .schedulerConfig )
442
+ configInformers := configv1informers .NewSharedInformerFactory (openshiftConfigClient , 10 * time .Minute )
443
+ openshiftRouteClient := fakeroutev1client .NewSimpleClientset ()
444
+ routeInformers := routev1informers .NewSharedInformerFactory (openshiftRouteClient , 10 * time .Minute )
445
+
446
+ scheme := runtime .NewScheme ()
447
+
448
+ targetConfigReconciler := NewTargetConfigReconciler (
449
+ ctx ,
450
+ "RELATED_IMAGE_OPERAND_IMAGE" ,
451
+ operatorConfigClient .KubedeschedulersV1 (),
452
+ operatorConfigInformers .Kubedeschedulers ().V1 ().KubeDeschedulers (),
453
+ deschedulerClient ,
454
+ fake .NewSimpleClientset (objects ... ),
455
+ dynamicfake .NewSimpleDynamicClient (scheme ),
456
+ configInformers ,
457
+ routeInformers ,
458
+ fakeRecorder ,
459
+ )
460
+
461
+ operatorConfigInformers .Start (ctx .Done ())
462
+ configInformers .Start (ctx .Done ())
463
+ routeInformers .Start (ctx .Done ())
464
+
465
+ operatorConfigInformers .WaitForCacheSync (ctx .Done ())
466
+ configInformers .WaitForCacheSync (ctx .Done ())
467
+ routeInformers .WaitForCacheSync (ctx .Done ())
468
+
469
+ got , forceDeployment , err := targetConfigReconciler .manageConfigMap (tt .descheduler )
452
470
if tt .err != nil {
453
471
if err == nil {
454
472
t .Fatalf ("Expected error, not nil\n " )
0 commit comments