@@ -616,3 +616,52 @@ func TestValidateIDMapMounts(t *testing.T) {
616
616
})
617
617
}
618
618
}
619
+
620
+ func TestValidateScheduler (t * testing.T ) {
621
+ testCases := []struct {
622
+ isErr bool
623
+ policy string
624
+ niceValue int32
625
+ priority uint32
626
+ runtime uint64
627
+ deadline uint64
628
+ period uint64
629
+ }{
630
+ {isErr : false , niceValue : 19 },
631
+ {isErr : false , niceValue : - 20 },
632
+ {isErr : true , niceValue : 20 },
633
+ {isErr : true , niceValue : - 21 },
634
+ {isErr : true , priority : 100 },
635
+ {isErr : false , policy : "SCHED_FIFO" , priority : 100 },
636
+ {isErr : true , policy : "SCHED_FIFO" , runtime : 20 },
637
+ {isErr : true , policy : "SCHED_BATCH" , deadline : 30 },
638
+ {isErr : true , policy : "SCHED_IDLE" , period : 40 },
639
+ {isErr : true , policy : "SCHED_DEADLINE" , priority : 100 },
640
+ {isErr : false , policy : "SCHED_DEADLINE" , runtime : 200 },
641
+ {isErr : false , policy : "SCHED_DEADLINE" , deadline : 300 },
642
+ {isErr : false , policy : "SCHED_DEADLINE" , period : 400 },
643
+ }
644
+
645
+ for _ , tc := range testCases {
646
+ scheduler := configs.Scheduler {
647
+ Policy : specs .LinuxSchedulerPolicy (tc .policy ),
648
+ Nice : tc .niceValue ,
649
+ Priority : tc .priority ,
650
+ Runtime : tc .runtime ,
651
+ Deadline : tc .deadline ,
652
+ Period : tc .period ,
653
+ }
654
+ config := & configs.Config {
655
+ Rootfs : "/var" ,
656
+ Scheduler : & scheduler ,
657
+ }
658
+
659
+ err := Validate (config )
660
+ if tc .isErr && err == nil {
661
+ t .Errorf ("scheduler: %d, expected error, got nil" , tc .niceValue )
662
+ }
663
+ if ! tc .isErr && err != nil {
664
+ t .Errorf ("scheduler: %d, expected nil, got error %v" , tc .niceValue , err )
665
+ }
666
+ }
667
+ }
0 commit comments