diff --git a/pkg/scheduler/api/compatibility/BUILD b/pkg/scheduler/api/compatibility/BUILD index ad80f18ad43..199c76388fb 100644 --- a/pkg/scheduler/api/compatibility/BUILD +++ b/pkg/scheduler/api/compatibility/BUILD @@ -8,14 +8,12 @@ go_test( "//pkg/scheduler:go_default_library", "//pkg/scheduler/algorithmprovider/defaults:go_default_library", "//pkg/scheduler/api:go_default_library", - "//pkg/scheduler/api/latest:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/core:go_default_library", "//pkg/scheduler/factory:go_default_library", "//pkg/scheduler/framework/plugins:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", diff --git a/pkg/scheduler/api/compatibility/compatibility_test.go b/pkg/scheduler/api/compatibility/compatibility_test.go index 676792000b6..575d9635d71 100644 --- a/pkg/scheduler/api/compatibility/compatibility_test.go +++ b/pkg/scheduler/api/compatibility/compatibility_test.go @@ -17,12 +17,10 @@ limitations under the License. package compatibility import ( - "fmt" "testing" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes/fake" @@ -30,7 +28,6 @@ import ( "k8s.io/kubernetes/pkg/scheduler" _ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" - latestschedulerapi "k8s.io/kubernetes/pkg/scheduler/api/latest" kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/core" @@ -41,8 +38,10 @@ import ( func TestCompatibility_v1_Scheduler(t *testing.T) { // Add serialized versions of scheduler config that exercise available options to ensure compatibility between releases schedulerFiles := map[string]struct { - JSON string - ExpectedPolicy schedulerapi.Policy + JSON string + wantPredicates sets.String + wantPrioritizers sets.String + wantExtenders []schedulerapi.ExtenderConfig }{ // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. @@ -64,22 +63,20 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { {"name": "TestLabelPreference", "weight": 4, "argument": {"labelPreference": {"label": "bar", "presence":true}}} ] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsPorts"}, - {Name: "NoDiskConflict"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "LeastRequestedPriority", Weight: 1}, - {Name: "ServiceSpreadingPriority", Weight: 2}, - {Name: "TestServiceAntiAffinity", Weight: 3, Argument: &schedulerapi.PriorityArgument{ServiceAntiAffinity: &schedulerapi.ServiceAntiAffinity{Label: "zone"}}}, - {Name: "TestLabelPreference", Weight: 4, Argument: &schedulerapi.PriorityArgument{LabelPreference: &schedulerapi.LabelPreference{Label: "bar", Presence: true}}}, - }, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsPorts", + "NoDiskConflict", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "LeastRequestedPriority", + "ServiceSpreadingPriority", + "TestServiceAntiAffinity", + "TestLabelPreference", + ), }, // Do not change this JSON after the corresponding release has been tagged. @@ -105,25 +102,23 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { {"name": "TestLabelPreference", "weight": 4, "argument": {"labelPreference": {"label": "bar", "presence":true}}} ] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsHostPorts"}, - {Name: "PodFitsResources"}, - {Name: "NoDiskConflict"}, - {Name: "HostName"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "TestServiceAntiAffinity", Weight: 3, Argument: &schedulerapi.PriorityArgument{ServiceAntiAffinity: &schedulerapi.ServiceAntiAffinity{Label: "zone"}}}, - {Name: "TestLabelPreference", Weight: 4, Argument: &schedulerapi.PriorityArgument{LabelPreference: &schedulerapi.LabelPreference{Label: "bar", Presence: true}}}, - }, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsHostPorts", + "PodFitsResources", + "NoDiskConflict", + "HostName", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "TestServiceAntiAffinity", + "TestLabelPreference", + ), }, // Do not change this JSON after the corresponding release has been tagged. @@ -155,31 +150,29 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { {"name": "TestLabelPreference", "weight": 4, "argument": {"labelPreference": {"label": "bar", "presence":true}}} ] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "TestServiceAntiAffinity", Weight: 3, Argument: &schedulerapi.PriorityArgument{ServiceAntiAffinity: &schedulerapi.ServiceAntiAffinity{Label: "zone"}}}, - {Name: "TestLabelPreference", Weight: 4, Argument: &schedulerapi.PriorityArgument{LabelPreference: &schedulerapi.LabelPreference{Label: "bar", Presence: true}}}, - }, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "NodeAffinityPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "TestServiceAntiAffinity", + "TestLabelPreference", + ), }, // Do not change this JSON after the corresponding release has been tagged. @@ -215,35 +208,33 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { {"name": "InterPodAffinityPriority", "weight": 2} ] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "PodToleratesNodeTaints"}, - {Name: "CheckNodeMemoryPressure"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "MatchInterPodAffinity"}, - {Name: "GeneralPredicates"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "TaintTolerationPriority", Weight: 2}, - {Name: "InterPodAffinityPriority", Weight: 2}, - }, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "PodToleratesNodeTaints", + "CheckNodeMemoryPressure", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "MatchInterPodAffinity", + "GeneralPredicates", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "NodeAffinityPriority", + "TaintTolerationPriority", + "InterPodAffinityPriority", + ), }, // Do not change this JSON after the corresponding release has been tagged. @@ -282,38 +273,36 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { {"name": "MostRequestedPriority", "weight": 2} ] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "PodToleratesNodeTaints"}, - {Name: "CheckNodeMemoryPressure"}, - {Name: "CheckNodeDiskPressure"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "MatchInterPodAffinity"}, - {Name: "GeneralPredicates"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "NodePreferAvoidPodsPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "TaintTolerationPriority", Weight: 2}, - {Name: "InterPodAffinityPriority", Weight: 2}, - {Name: "MostRequestedPriority", Weight: 2}, - }, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "PodToleratesNodeTaints", + "CheckNodeMemoryPressure", + "CheckNodeDiskPressure", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "MatchInterPodAffinity", + "GeneralPredicates", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "NodePreferAvoidPodsPriority", + "NodeAffinityPriority", + "TaintTolerationPriority", + "InterPodAffinityPriority", + "MostRequestedPriority", + ), }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. @@ -361,49 +350,47 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { "nodeCacheCapable": true }] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "PodToleratesNodeTaints"}, - {Name: "CheckNodeMemoryPressure"}, - {Name: "CheckNodeDiskPressure"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "MatchInterPodAffinity"}, - {Name: "GeneralPredicates"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "NodePreferAvoidPodsPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "TaintTolerationPriority", Weight: 2}, - {Name: "InterPodAffinityPriority", Weight: 2}, - {Name: "MostRequestedPriority", Weight: 2}, - }, - ExtenderConfigs: []schedulerapi.ExtenderConfig{{ - URLPrefix: "/prefix", - FilterVerb: "filter", - PrioritizeVerb: "prioritize", - Weight: 1, - BindVerb: "bind", // 1.7 was missing json tags on the BindVerb field and required "BindVerb" - EnableHTTPS: true, - TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, - HTTPTimeout: 1, - NodeCacheCapable: true, - }}, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "PodToleratesNodeTaints", + "CheckNodeMemoryPressure", + "CheckNodeDiskPressure", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "MatchInterPodAffinity", + "GeneralPredicates", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "NodePreferAvoidPodsPriority", + "NodeAffinityPriority", + "TaintTolerationPriority", + "InterPodAffinityPriority", + "MostRequestedPriority", + ), + wantExtenders: []schedulerapi.ExtenderConfig{{ + URLPrefix: "/prefix", + FilterVerb: "filter", + PrioritizeVerb: "prioritize", + Weight: 1, + BindVerb: "bind", // 1.7 was missing json tags on the BindVerb field and required "BindVerb" + EnableHTTPS: true, + TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, + HTTPTimeout: 1, + NodeCacheCapable: true, + }}, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. @@ -452,50 +439,48 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { "nodeCacheCapable": true }] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "PodToleratesNodeTaints"}, - {Name: "CheckNodeMemoryPressure"}, - {Name: "CheckNodeDiskPressure"}, - {Name: "CheckNodeCondition"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "MatchInterPodAffinity"}, - {Name: "GeneralPredicates"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "NodePreferAvoidPodsPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "TaintTolerationPriority", Weight: 2}, - {Name: "InterPodAffinityPriority", Weight: 2}, - {Name: "MostRequestedPriority", Weight: 2}, - }, - ExtenderConfigs: []schedulerapi.ExtenderConfig{{ - URLPrefix: "/prefix", - FilterVerb: "filter", - PrioritizeVerb: "prioritize", - Weight: 1, - BindVerb: "bind", // 1.8 became case-insensitive and tolerated "bindVerb" - EnableHTTPS: true, - TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, - HTTPTimeout: 1, - NodeCacheCapable: true, - }}, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "PodToleratesNodeTaints", + "CheckNodeMemoryPressure", + "CheckNodeDiskPressure", + "CheckNodeCondition", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "MatchInterPodAffinity", + "GeneralPredicates", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "NodePreferAvoidPodsPriority", + "NodeAffinityPriority", + "TaintTolerationPriority", + "InterPodAffinityPriority", + "MostRequestedPriority", + ), + wantExtenders: []schedulerapi.ExtenderConfig{{ + URLPrefix: "/prefix", + FilterVerb: "filter", + PrioritizeVerb: "prioritize", + Weight: 1, + BindVerb: "bind", // 1.8 became case-insensitive and tolerated "bindVerb" + EnableHTTPS: true, + TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, + HTTPTimeout: 1, + NodeCacheCapable: true, + }}, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. @@ -545,51 +530,49 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { "nodeCacheCapable": true }] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "PodToleratesNodeTaints"}, - {Name: "CheckNodeMemoryPressure"}, - {Name: "CheckNodeDiskPressure"}, - {Name: "CheckNodeCondition"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "MatchInterPodAffinity"}, - {Name: "GeneralPredicates"}, - {Name: "CheckVolumeBinding"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "NodePreferAvoidPodsPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "TaintTolerationPriority", Weight: 2}, - {Name: "InterPodAffinityPriority", Weight: 2}, - {Name: "MostRequestedPriority", Weight: 2}, - }, - ExtenderConfigs: []schedulerapi.ExtenderConfig{{ - URLPrefix: "/prefix", - FilterVerb: "filter", - PrioritizeVerb: "prioritize", - Weight: 1, - BindVerb: "bind", // 1.9 was case-insensitive and tolerated "bindVerb" - EnableHTTPS: true, - TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, - HTTPTimeout: 1, - NodeCacheCapable: true, - }}, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "PodToleratesNodeTaints", + "CheckNodeMemoryPressure", + "CheckNodeDiskPressure", + "CheckNodeCondition", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "MatchInterPodAffinity", + "GeneralPredicates", + "CheckVolumeBinding", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "NodePreferAvoidPodsPriority", + "NodeAffinityPriority", + "TaintTolerationPriority", + "InterPodAffinityPriority", + "MostRequestedPriority", + ), + wantExtenders: []schedulerapi.ExtenderConfig{{ + URLPrefix: "/prefix", + FilterVerb: "filter", + PrioritizeVerb: "prioritize", + Weight: 1, + BindVerb: "bind", // 1.9 was case-insensitive and tolerated "bindVerb" + EnableHTTPS: true, + TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, + HTTPTimeout: 1, + NodeCacheCapable: true, + }}, }, // Do not change this JSON after the corresponding release has been tagged. @@ -643,54 +626,52 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { "ignorable":true }] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "PodToleratesNodeTaints"}, - {Name: "CheckNodeMemoryPressure"}, - {Name: "CheckNodeDiskPressure"}, - {Name: "CheckNodePIDPressure"}, - {Name: "CheckNodeCondition"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "MatchInterPodAffinity"}, - {Name: "GeneralPredicates"}, - {Name: "CheckVolumeBinding"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "NodePreferAvoidPodsPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "TaintTolerationPriority", Weight: 2}, - {Name: "InterPodAffinityPriority", Weight: 2}, - {Name: "MostRequestedPriority", Weight: 2}, - }, - ExtenderConfigs: []schedulerapi.ExtenderConfig{{ - URLPrefix: "/prefix", - FilterVerb: "filter", - PrioritizeVerb: "prioritize", - Weight: 1, - BindVerb: "bind", // 1.10 was case-insensitive and tolerated "bindVerb" - EnableHTTPS: true, - TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, - HTTPTimeout: 1, - NodeCacheCapable: true, - ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, - Ignorable: true, - }}, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "PodToleratesNodeTaints", + "CheckNodeMemoryPressure", + "CheckNodeDiskPressure", + "CheckNodePIDPressure", + "CheckNodeCondition", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "MatchInterPodAffinity", + "GeneralPredicates", + "CheckVolumeBinding", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "NodePreferAvoidPodsPriority", + "NodeAffinityPriority", + "TaintTolerationPriority", + "InterPodAffinityPriority", + "MostRequestedPriority", + ), + wantExtenders: []schedulerapi.ExtenderConfig{{ + URLPrefix: "/prefix", + FilterVerb: "filter", + PrioritizeVerb: "prioritize", + Weight: 1, + BindVerb: "bind", // 1.10 was case-insensitive and tolerated "bindVerb" + EnableHTTPS: true, + TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, + HTTPTimeout: 1, + NodeCacheCapable: true, + ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, + Ignorable: true, + }}, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. @@ -754,65 +735,53 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { "ignorable":true }] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "PodToleratesNodeTaints"}, - {Name: "CheckNodeMemoryPressure"}, - {Name: "CheckNodeDiskPressure"}, - {Name: "CheckNodePIDPressure"}, - {Name: "CheckNodeCondition"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "MatchInterPodAffinity"}, - {Name: "GeneralPredicates"}, - {Name: "CheckVolumeBinding"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "NodePreferAvoidPodsPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "TaintTolerationPriority", Weight: 2}, - {Name: "InterPodAffinityPriority", Weight: 2}, - {Name: "MostRequestedPriority", Weight: 2}, - { - Name: "RequestedToCapacityRatioPriority", - Weight: 2, - Argument: &schedulerapi.PriorityArgument{ - RequestedToCapacityRatioArguments: &schedulerapi.RequestedToCapacityRatioArguments{ - UtilizationShape: []schedulerapi.UtilizationShapePoint{ - {Utilization: 0, Score: 0}, - {Utilization: 50, Score: 7}, - }}, - }, - }, - }, - ExtenderConfigs: []schedulerapi.ExtenderConfig{{ - URLPrefix: "/prefix", - FilterVerb: "filter", - PrioritizeVerb: "prioritize", - Weight: 1, - BindVerb: "bind", // 1.11 restored case-sensitivity, but allowed either "BindVerb" or "bindVerb" - EnableHTTPS: true, - TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, - HTTPTimeout: 1, - NodeCacheCapable: true, - ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, - Ignorable: true, - }}, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "PodToleratesNodeTaints", + "CheckNodeMemoryPressure", + "CheckNodeDiskPressure", + "CheckNodePIDPressure", + "CheckNodeCondition", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "MatchInterPodAffinity", + "GeneralPredicates", + "CheckVolumeBinding", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "NodePreferAvoidPodsPriority", + "NodeAffinityPriority", + "TaintTolerationPriority", + "InterPodAffinityPriority", + "MostRequestedPriority", + "RequestedToCapacityRatioPriority", + ), + wantExtenders: []schedulerapi.ExtenderConfig{{ + URLPrefix: "/prefix", + FilterVerb: "filter", + PrioritizeVerb: "prioritize", + Weight: 1, + BindVerb: "bind", // 1.11 restored case-sensitivity, but allowed either "BindVerb" or "bindVerb" + EnableHTTPS: true, + TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, + HTTPTimeout: 1, + NodeCacheCapable: true, + ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, + Ignorable: true, + }}, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. @@ -877,66 +846,54 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { "ignorable":true }] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "PodToleratesNodeTaints"}, - {Name: "CheckNodeMemoryPressure"}, - {Name: "CheckNodeDiskPressure"}, - {Name: "CheckNodePIDPressure"}, - {Name: "CheckNodeCondition"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "MaxCSIVolumeCountPred"}, - {Name: "MatchInterPodAffinity"}, - {Name: "GeneralPredicates"}, - {Name: "CheckVolumeBinding"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "NodePreferAvoidPodsPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "TaintTolerationPriority", Weight: 2}, - {Name: "InterPodAffinityPriority", Weight: 2}, - {Name: "MostRequestedPriority", Weight: 2}, - { - Name: "RequestedToCapacityRatioPriority", - Weight: 2, - Argument: &schedulerapi.PriorityArgument{ - RequestedToCapacityRatioArguments: &schedulerapi.RequestedToCapacityRatioArguments{ - UtilizationShape: []schedulerapi.UtilizationShapePoint{ - {Utilization: 0, Score: 0}, - {Utilization: 50, Score: 7}, - }}, - }, - }, - }, - ExtenderConfigs: []schedulerapi.ExtenderConfig{{ - URLPrefix: "/prefix", - FilterVerb: "filter", - PrioritizeVerb: "prioritize", - Weight: 1, - BindVerb: "bind", // 1.11 restored case-sensitivity, but allowed either "BindVerb" or "bindVerb" - EnableHTTPS: true, - TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, - HTTPTimeout: 1, - NodeCacheCapable: true, - ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, - Ignorable: true, - }}, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "PodToleratesNodeTaints", + "CheckNodeMemoryPressure", + "CheckNodeDiskPressure", + "CheckNodePIDPressure", + "CheckNodeCondition", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "MaxCSIVolumeCountPred", + "MatchInterPodAffinity", + "GeneralPredicates", + "CheckVolumeBinding", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "NodePreferAvoidPodsPriority", + "NodeAffinityPriority", + "TaintTolerationPriority", + "InterPodAffinityPriority", + "MostRequestedPriority", + "RequestedToCapacityRatioPriority", + ), + wantExtenders: []schedulerapi.ExtenderConfig{{ + URLPrefix: "/prefix", + FilterVerb: "filter", + PrioritizeVerb: "prioritize", + Weight: 1, + BindVerb: "bind", // 1.11 restored case-sensitivity, but allowed either "BindVerb" or "bindVerb" + EnableHTTPS: true, + TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, + HTTPTimeout: 1, + NodeCacheCapable: true, + ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, + Ignorable: true, + }}, }, "1.14": { JSON: `{ @@ -1000,67 +957,55 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { "ignorable":true }] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "PodToleratesNodeTaints"}, - {Name: "CheckNodeMemoryPressure"}, - {Name: "CheckNodeDiskPressure"}, - {Name: "CheckNodePIDPressure"}, - {Name: "CheckNodeCondition"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "MaxCSIVolumeCountPred"}, - {Name: "MaxCinderVolumeCount"}, - {Name: "MatchInterPodAffinity"}, - {Name: "GeneralPredicates"}, - {Name: "CheckVolumeBinding"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "NodePreferAvoidPodsPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "TaintTolerationPriority", Weight: 2}, - {Name: "InterPodAffinityPriority", Weight: 2}, - {Name: "MostRequestedPriority", Weight: 2}, - { - Name: "RequestedToCapacityRatioPriority", - Weight: 2, - Argument: &schedulerapi.PriorityArgument{ - RequestedToCapacityRatioArguments: &schedulerapi.RequestedToCapacityRatioArguments{ - UtilizationShape: []schedulerapi.UtilizationShapePoint{ - {Utilization: 0, Score: 0}, - {Utilization: 50, Score: 7}, - }}, - }, - }, - }, - ExtenderConfigs: []schedulerapi.ExtenderConfig{{ - URLPrefix: "/prefix", - FilterVerb: "filter", - PrioritizeVerb: "prioritize", - Weight: 1, - BindVerb: "bind", // 1.11 restored case-sensitivity, but allowed either "BindVerb" or "bindVerb" - EnableHTTPS: true, - TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, - HTTPTimeout: 1, - NodeCacheCapable: true, - ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, - Ignorable: true, - }}, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "PodToleratesNodeTaints", + "CheckNodeMemoryPressure", + "CheckNodeDiskPressure", + "CheckNodePIDPressure", + "CheckNodeCondition", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "MaxCSIVolumeCountPred", + "MaxCinderVolumeCount", + "MatchInterPodAffinity", + "GeneralPredicates", + "CheckVolumeBinding", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "NodePreferAvoidPodsPriority", + "NodeAffinityPriority", + "TaintTolerationPriority", + "InterPodAffinityPriority", + "MostRequestedPriority", + "RequestedToCapacityRatioPriority", + ), + wantExtenders: []schedulerapi.ExtenderConfig{{ + URLPrefix: "/prefix", + FilterVerb: "filter", + PrioritizeVerb: "prioritize", + Weight: 1, + BindVerb: "bind", // 1.11 restored case-sensitivity, but allowed either "BindVerb" or "bindVerb" + EnableHTTPS: true, + TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, + HTTPTimeout: 1, + NodeCacheCapable: true, + ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, + Ignorable: true, + }}, }, "1.16": { JSON: `{ @@ -1128,165 +1073,136 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { "ignorable":true }] }`, - ExpectedPolicy: schedulerapi.Policy{ - Predicates: []schedulerapi.PredicatePolicy{ - {Name: "MatchNodeSelector"}, - {Name: "PodFitsResources"}, - {Name: "PodFitsHostPorts"}, - {Name: "HostName"}, - {Name: "NoDiskConflict"}, - {Name: "NoVolumeZoneConflict"}, - {Name: "PodToleratesNodeTaints"}, - {Name: "CheckNodeMemoryPressure"}, - {Name: "CheckNodeDiskPressure"}, - {Name: "CheckNodePIDPressure"}, - {Name: "CheckNodeCondition"}, - {Name: "MaxEBSVolumeCount"}, - {Name: "MaxGCEPDVolumeCount"}, - {Name: "MaxAzureDiskVolumeCount"}, - {Name: "MaxCSIVolumeCountPred"}, - {Name: "MaxCinderVolumeCount"}, - {Name: "MatchInterPodAffinity"}, - {Name: "GeneralPredicates"}, - {Name: "CheckVolumeBinding"}, - {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, - {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, - }, - Priorities: []schedulerapi.PriorityPolicy{ - {Name: "EqualPriority", Weight: 2}, - {Name: "ImageLocalityPriority", Weight: 2}, - {Name: "LeastRequestedPriority", Weight: 2}, - {Name: "BalancedResourceAllocation", Weight: 2}, - {Name: "SelectorSpreadPriority", Weight: 2}, - {Name: "NodePreferAvoidPodsPriority", Weight: 2}, - {Name: "NodeAffinityPriority", Weight: 2}, - {Name: "TaintTolerationPriority", Weight: 2}, - {Name: "InterPodAffinityPriority", Weight: 2}, - {Name: "MostRequestedPriority", Weight: 2}, - { - Name: "RequestedToCapacityRatioPriority", - Weight: 2, - Argument: &schedulerapi.PriorityArgument{ - RequestedToCapacityRatioArguments: &schedulerapi.RequestedToCapacityRatioArguments{ - UtilizationShape: []schedulerapi.UtilizationShapePoint{ - {Utilization: 0, Score: 0}, - {Utilization: 50, Score: 7}, - }, - Resources: []schedulerapi.ResourceSpec{ - {Name: v1.ResourceName("intel.com/foo"), Weight: 3}, - {Name: v1.ResourceName("intel.com/bar"), Weight: 5}, - }, - }, - }, - }, - }, - ExtenderConfigs: []schedulerapi.ExtenderConfig{{ - URLPrefix: "/prefix", - FilterVerb: "filter", - PrioritizeVerb: "prioritize", - Weight: 1, - BindVerb: "bind", // 1.11 restored case-sensitivity, but allowed either "BindVerb" or "bindVerb" - EnableHTTPS: true, - TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, - HTTPTimeout: 1, - NodeCacheCapable: true, - ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, - Ignorable: true, - }}, - }, + wantPredicates: sets.NewString( + "MatchNodeSelector", + "PodFitsResources", + "PodFitsHostPorts", + "HostName", + "NoDiskConflict", + "NoVolumeZoneConflict", + "PodToleratesNodeTaints", + "CheckNodeMemoryPressure", + "CheckNodeDiskPressure", + "CheckNodePIDPressure", + "CheckNodeCondition", + "MaxEBSVolumeCount", + "MaxGCEPDVolumeCount", + "MaxAzureDiskVolumeCount", + "MaxCSIVolumeCountPred", + "MaxCinderVolumeCount", + "MatchInterPodAffinity", + "GeneralPredicates", + "CheckVolumeBinding", + "TestServiceAffinity", + "TestLabelsPresence", + ), + wantPrioritizers: sets.NewString( + "EqualPriority", + "ImageLocalityPriority", + "LeastRequestedPriority", + "BalancedResourceAllocation", + "SelectorSpreadPriority", + "NodePreferAvoidPodsPriority", + "NodeAffinityPriority", + "TaintTolerationPriority", + "InterPodAffinityPriority", + "MostRequestedPriority", + "RequestedToCapacityRatioPriority", + ), + wantExtenders: []schedulerapi.ExtenderConfig{{ + URLPrefix: "/prefix", + FilterVerb: "filter", + PrioritizeVerb: "prioritize", + Weight: 1, + BindVerb: "bind", // 1.11 restored case-sensitivity, but allowed either "BindVerb" or "bindVerb" + EnableHTTPS: true, + TLSConfig: &schedulerapi.ExtenderTLSConfig{Insecure: true}, + HTTPTimeout: 1, + NodeCacheCapable: true, + ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, + Ignorable: true, + }}, }, } registeredPredicates := sets.NewString(factory.ListRegisteredFitPredicates()...) registeredPriorities := sets.NewString(factory.ListRegisteredPriorityFunctions()...) seenPredicates := sets.NewString() seenPriorities := sets.NewString() + mandatoryPredicates := sets.NewString("CheckNodeCondition") for v, tc := range schedulerFiles { - fmt.Printf("%s: Testing scheduler config\n", v) - - policy := schedulerapi.Policy{} - if err := runtime.DecodeInto(latestschedulerapi.Codec, []byte(tc.JSON), &policy); err != nil { - t.Errorf("%s: Error decoding: %v", v, err) - continue - } - policyConfigMap := v1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceSystem, Name: "scheduler-custom-policy-config"}, - Data: map[string]string{schedulerconfig.SchedulerPolicyConfigMapKey: tc.JSON}, - } - client := fake.NewSimpleClientset(&policyConfigMap) - algorithmSrc := schedulerconfig.SchedulerAlgorithmSource{ - Policy: &schedulerconfig.SchedulerPolicySource{ - ConfigMap: &kubeschedulerconfig.SchedulerPolicyConfigMapSource{ - Namespace: policyConfigMap.Namespace, - Name: policyConfigMap.Name, + t.Run(v, func(t *testing.T) { + policyConfigMap := v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Namespace: metav1.NamespaceSystem, Name: "scheduler-custom-policy-config"}, + Data: map[string]string{schedulerconfig.SchedulerPolicyConfigMapKey: tc.JSON}, + } + client := fake.NewSimpleClientset(&policyConfigMap) + algorithmSrc := schedulerconfig.SchedulerAlgorithmSource{ + Policy: &schedulerconfig.SchedulerPolicySource{ + ConfigMap: &kubeschedulerconfig.SchedulerPolicyConfigMapSource{ + Namespace: policyConfigMap.Namespace, + Name: policyConfigMap.Name, + }, }, - }, - } - informerFactory := informers.NewSharedInformerFactory(client, 0) + } + informerFactory := informers.NewSharedInformerFactory(client, 0) - sched, err := scheduler.New( - client, - informerFactory.Core().V1().Nodes(), - informerFactory.Core().V1().Pods(), - informerFactory.Core().V1().PersistentVolumes(), - informerFactory.Core().V1().PersistentVolumeClaims(), - informerFactory.Core().V1().ReplicationControllers(), - informerFactory.Apps().V1().ReplicaSets(), - informerFactory.Apps().V1().StatefulSets(), - informerFactory.Core().V1().Services(), - informerFactory.Policy().V1beta1().PodDisruptionBudgets(), - informerFactory.Storage().V1().StorageClasses(), - informerFactory.Storage().V1beta1().CSINodes(), - nil, - algorithmSrc, - make(chan struct{}), - schedulerframework.NewDefaultRegistry(), - nil, - []kubeschedulerconfig.PluginConfig{}, - ) - if err != nil { - t.Errorf("%s: Error constructing: %v", v, err) - continue - } - schedPredicates := sets.NewString() - for p := range sched.Algorithm.Predicates() { - schedPredicates.Insert(p) - } - wantPredicates := sets.NewString() - wantPredicates.Insert("CheckNodeCondition") // mandatory predicate - for _, p := range tc.ExpectedPolicy.Predicates { - wantPredicates.Insert(p.Name) - seenPredicates.Insert(p.Name) - } - if !schedPredicates.Equal(wantPredicates) { - t.Errorf("Expected predicates %v, got %v", wantPredicates, schedPredicates) - } - schedPrioritizers := sets.NewString() - for _, p := range sched.Algorithm.Prioritizers() { - schedPrioritizers.Insert(p.Name) - seenPriorities.Insert(p.Name) - } - wantPrioritizers := sets.NewString() - for _, p := range tc.ExpectedPolicy.Priorities { - wantPrioritizers.Insert(p.Name) - } - if !schedPrioritizers.Equal(wantPrioritizers) { - t.Errorf("Expected prioritizers %v, got %v", wantPrioritizers, schedPrioritizers) - } - schedExtenders := sched.Algorithm.Extenders() - var wantExtenders []*core.HTTPExtender - for _, e := range tc.ExpectedPolicy.ExtenderConfigs { - extender, err := core.NewHTTPExtender(&e) + sched, err := scheduler.New( + client, + informerFactory.Core().V1().Nodes(), + informerFactory.Core().V1().Pods(), + informerFactory.Core().V1().PersistentVolumes(), + informerFactory.Core().V1().PersistentVolumeClaims(), + informerFactory.Core().V1().ReplicationControllers(), + informerFactory.Apps().V1().ReplicaSets(), + informerFactory.Apps().V1().StatefulSets(), + informerFactory.Core().V1().Services(), + informerFactory.Policy().V1beta1().PodDisruptionBudgets(), + informerFactory.Storage().V1().StorageClasses(), + informerFactory.Storage().V1beta1().CSINodes(), + nil, + algorithmSrc, + make(chan struct{}), + schedulerframework.NewDefaultRegistry(), + nil, + []kubeschedulerconfig.PluginConfig{}, + ) if err != nil { - t.Errorf("Error transforming extender: %+v", e) + t.Fatalf("%s: Error constructing: %v", v, err) } - wantExtenders = append(wantExtenders, extender.(*core.HTTPExtender)) - } - for i := range schedExtenders { - if !core.Equal(wantExtenders[i], schedExtenders[i].(*core.HTTPExtender)) { - t.Errorf("Got extender #%d %+v, want %+v", i, schedExtenders[i], wantExtenders[i]) + schedPredicates := sets.NewString() + for p := range sched.Algorithm.Predicates() { + schedPredicates.Insert(p) } - } + wantPredicates := tc.wantPredicates.Union(mandatoryPredicates) + if !schedPredicates.Equal(wantPredicates) { + t.Errorf("Got predicates %v, want %v", schedPredicates, wantPredicates) + } + schedPrioritizers := sets.NewString() + for _, p := range sched.Algorithm.Prioritizers() { + schedPrioritizers.Insert(p.Name) + } + + if !schedPrioritizers.Equal(tc.wantPrioritizers) { + t.Errorf("Got prioritizers %v, want %v", schedPrioritizers, tc.wantPrioritizers) + } + schedExtenders := sched.Algorithm.Extenders() + var wantExtenders []*core.HTTPExtender + for _, e := range tc.wantExtenders { + extender, err := core.NewHTTPExtender(&e) + if err != nil { + t.Errorf("Error transforming extender: %+v", e) + } + wantExtenders = append(wantExtenders, extender.(*core.HTTPExtender)) + } + for i := range schedExtenders { + if !core.Equal(wantExtenders[i], schedExtenders[i].(*core.HTTPExtender)) { + t.Errorf("Got extender #%d %+v, want %+v", i, schedExtenders[i], wantExtenders[i]) + } + } + seenPredicates = seenPredicates.Union(schedPredicates) + seenPriorities = seenPriorities.Union(schedPrioritizers) + }) } if !seenPredicates.HasAll(registeredPredicates.List()...) {