@@ -353,3 +353,68 @@ func TestTaintTolerationFilter(t *testing.T) {
353
353
})
354
354
}
355
355
}
356
+
357
+ func TestIsSchedulableAfterNodeChange (t * testing.T ) {
358
+ tests := []struct {
359
+ name string
360
+ pod * v1.Pod
361
+ oldObj interface {}
362
+ newObj interface {}
363
+ expectedHint framework.QueueingHint
364
+ wantErr bool
365
+ }{
366
+ {
367
+ name : "backoff-wrong-new-object" ,
368
+ newObj : "not-a-node" ,
369
+ expectedHint : framework .Queue ,
370
+ wantErr : true ,
371
+ },
372
+ {
373
+ name : "backoff-wrong-old-object" ,
374
+ newObj : nodeWithTaints ("nodeA" , []v1.Taint {{Key : "dedicated" , Value : "user1" , Effect : "NoSchedule" }}),
375
+ oldObj : "not-a-node" ,
376
+ expectedHint : framework .Queue ,
377
+ wantErr : true ,
378
+ },
379
+ {
380
+ name : "skip-queue-on-untoleratedtaint-node-added" ,
381
+ pod : podWithTolerations ("pod1" , []v1.Toleration {{Key : "dedicated" , Operator : "Equal" , Value : "user2" , Effect : "NoSchedule" }}),
382
+ newObj : nodeWithTaints ("nodeA" , []v1.Taint {{Key : "dedicated" , Value : "user1" , Effect : "NoSchedule" }}),
383
+ expectedHint : framework .QueueSkip ,
384
+ },
385
+ {
386
+ name : "queue-on-toleratedtaint-node-added" ,
387
+ pod : podWithTolerations ("pod1" , []v1.Toleration {{Key : "dedicated" , Operator : "Equal" , Value : "user2" , Effect : "NoSchedule" }}),
388
+ newObj : nodeWithTaints ("nodeA" , []v1.Taint {{Key : "dedicated" , Value : "user2" , Effect : "NoSchedule" }}),
389
+ expectedHint : framework .Queue ,
390
+ },
391
+ {
392
+ name : "skip-unrelated-change" ,
393
+ pod : podWithTolerations ("pod1" , []v1.Toleration {{Key : "dedicated" , Operator : "Equal" , Value : "user2" , Effect : "NoSchedule" }}),
394
+ newObj : nodeWithTaints ("nodeA" , []v1.Taint {{Key : "dedicated" , Value : "user1" , Effect : "NoSchedule" }, {Key : "dedicated" , Value : "user3" , Effect : "NoSchedule" }}),
395
+ oldObj : nodeWithTaints ("nodeA" , []v1.Taint {{Key : "dedicated" , Value : "user1" , Effect : "NoSchedule" }}),
396
+ expectedHint : framework .QueueSkip ,
397
+ },
398
+ {
399
+ name : "queue-on-taint-change" ,
400
+ pod : podWithTolerations ("pod1" , []v1.Toleration {{Key : "dedicated" , Operator : "Equal" , Value : "user2" , Effect : "NoSchedule" }}),
401
+ newObj : nodeWithTaints ("nodeA" , []v1.Taint {{Key : "dedicated" , Value : "user2" , Effect : "NoSchedule" }}),
402
+ oldObj : nodeWithTaints ("nodeA" , []v1.Taint {{Key : "dedicated" , Value : "user1" , Effect : "NoSchedule" }}),
403
+ expectedHint : framework .Queue ,
404
+ },
405
+ }
406
+
407
+ for _ , test := range tests {
408
+ t .Run (test .name , func (t * testing.T ) {
409
+ logger , _ := ktesting .NewTestContext (t )
410
+ pl := & TaintToleration {}
411
+ got , err := pl .isSchedulableAfterNodeChange (logger , test .pod , test .oldObj , test .newObj )
412
+ if (err != nil ) != test .wantErr {
413
+ t .Errorf ("isSchedulableAfterNodeChange() error = %v, wantErr %v" , err , test .wantErr )
414
+ }
415
+ if got != test .expectedHint {
416
+ t .Errorf ("isSchedulableAfterNodeChange() = %v, want %v" , got , test .expectedHint )
417
+ }
418
+ })
419
+ }
420
+ }
0 commit comments