@@ -616,3 +616,53 @@ 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 int32
626
+ runtime uint64
627
+ deadline uint64
628
+ period uint64
629
+ }{
630
+ {isErr : true , niceValue : 0 },
631
+ {isErr : false , policy : "SCHED_OTHER" , niceValue : 19 },
632
+ {isErr : false , policy : "SCHED_OTHER" , niceValue : - 20 },
633
+ {isErr : true , policy : "SCHED_OTHER" , niceValue : 20 },
634
+ {isErr : true , policy : "SCHED_OTHER" , niceValue : - 21 },
635
+ {isErr : true , policy : "SCHED_OTHER" , priority : 100 },
636
+ {isErr : false , policy : "SCHED_FIFO" , priority : 100 },
637
+ {isErr : true , policy : "SCHED_FIFO" , runtime : 20 },
638
+ {isErr : true , policy : "SCHED_BATCH" , deadline : 30 },
639
+ {isErr : true , policy : "SCHED_IDLE" , period : 40 },
640
+ {isErr : true , policy : "SCHED_DEADLINE" , priority : 100 },
641
+ {isErr : false , policy : "SCHED_DEADLINE" , runtime : 200 },
642
+ {isErr : false , policy : "SCHED_DEADLINE" , deadline : 300 },
643
+ {isErr : false , policy : "SCHED_DEADLINE" , period : 400 },
644
+ }
645
+
646
+ for _ , tc := range testCases {
647
+ scheduler := configs.Scheduler {
648
+ Policy : specs .LinuxSchedulerPolicy (tc .policy ),
649
+ Nice : tc .niceValue ,
650
+ Priority : tc .priority ,
651
+ Runtime : tc .runtime ,
652
+ Deadline : tc .deadline ,
653
+ Period : tc .period ,
654
+ }
655
+ config := & configs.Config {
656
+ Rootfs : "/var" ,
657
+ Scheduler : & scheduler ,
658
+ }
659
+
660
+ err := Validate (config )
661
+ if tc .isErr && err == nil {
662
+ t .Errorf ("scheduler: %d, expected error, got nil" , tc .niceValue )
663
+ }
664
+ if ! tc .isErr && err != nil {
665
+ t .Errorf ("scheduler: %d, expected nil, got error %v" , tc .niceValue , err )
666
+ }
667
+ }
668
+ }
0 commit comments