@@ -19,6 +19,9 @@ package scheduler
19
19
import (
20
20
"errors"
21
21
"fmt"
22
+ "io/ioutil"
23
+ "os"
24
+ "path"
22
25
"reflect"
23
26
"testing"
24
27
"time"
@@ -43,6 +46,7 @@ import (
43
46
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
44
47
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
45
48
"k8s.io/kubernetes/pkg/scheduler/api"
49
+ schedulerapi "k8s.io/kubernetes/pkg/scheduler/api"
46
50
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
47
51
"k8s.io/kubernetes/pkg/scheduler/core"
48
52
"k8s.io/kubernetes/pkg/scheduler/factory"
@@ -935,3 +939,92 @@ func TestSchedulerWithVolumeBinding(t *testing.T) {
935
939
})
936
940
}
937
941
}
942
+
943
+ func TestInitPolicyFromFile (t * testing.T ) {
944
+ dir , err := ioutil .TempDir (os .TempDir (), "policy" )
945
+ if err != nil {
946
+ t .Errorf ("unexpected error: %v" , err )
947
+ }
948
+ defer os .RemoveAll (dir )
949
+
950
+ for i , test := range []struct {
951
+ policy string
952
+ expectedPredicates sets.String
953
+ expectedPrioritizers sets.String
954
+ }{
955
+ // Test json format policy file
956
+ {
957
+ policy : `{
958
+ "kind" : "Policy",
959
+ "apiVersion" : "v1",
960
+ "predicates" : [
961
+ {"name" : "PredicateOne"},
962
+ {"name" : "PredicateTwo"}
963
+ ],
964
+ "priorities" : [
965
+ {"name" : "PriorityOne", "weight" : 1},
966
+ {"name" : "PriorityTwo", "weight" : 5}
967
+ ]
968
+ }` ,
969
+ expectedPredicates : sets .NewString (
970
+ "PredicateOne" ,
971
+ "PredicateTwo" ,
972
+ ),
973
+ expectedPrioritizers : sets .NewString (
974
+ "PriorityOne" ,
975
+ "PriorityTwo" ,
976
+ ),
977
+ },
978
+ // Test yaml format policy file
979
+ {
980
+ policy : `apiVersion: v1
981
+ kind: Policy
982
+ predicates:
983
+ - name: PredicateOne
984
+ - name: PredicateTwo
985
+ priorities:
986
+ - name: PriorityOne
987
+ weight: 1
988
+ - name: PriorityTwo
989
+ weight: 5
990
+ ` ,
991
+ expectedPredicates : sets .NewString (
992
+ "PredicateOne" ,
993
+ "PredicateTwo" ,
994
+ ),
995
+ expectedPrioritizers : sets .NewString (
996
+ "PriorityOne" ,
997
+ "PriorityTwo" ,
998
+ ),
999
+ },
1000
+ } {
1001
+ file := fmt .Sprintf ("scheduler-policy-config-file-%d" , i )
1002
+ fullPath := path .Join (dir , file )
1003
+
1004
+ if err := ioutil .WriteFile (fullPath , []byte (test .policy ), 0644 ); err != nil {
1005
+ t .Fatalf ("Failed writing a policy config file: %v" , err )
1006
+ }
1007
+
1008
+ policy := & schedulerapi.Policy {}
1009
+
1010
+ if err := initPolicyFromFile (fullPath , policy ); err != nil {
1011
+ t .Fatalf ("Failed writing a policy config file: %v" , err )
1012
+ }
1013
+
1014
+ // Verify that the policy is initialized correctly.
1015
+ schedPredicates := sets .NewString ()
1016
+ for _ , p := range policy .Predicates {
1017
+ schedPredicates .Insert (p .Name )
1018
+ }
1019
+ schedPrioritizers := sets .NewString ()
1020
+ for _ , p := range policy .Priorities {
1021
+ schedPrioritizers .Insert (p .Name )
1022
+ }
1023
+ if ! schedPredicates .Equal (test .expectedPredicates ) {
1024
+ t .Errorf ("Expected predicates %v, got %v" , test .expectedPredicates , schedPredicates )
1025
+ }
1026
+ if ! schedPrioritizers .Equal (test .expectedPrioritizers ) {
1027
+ t .Errorf ("Expected priority functions %v, got %v" , test .expectedPrioritizers , schedPrioritizers )
1028
+ }
1029
+ }
1030
+ }
0 commit comments