@@ -109,71 +109,142 @@ func TestClusterAutoscalerProvider(t *testing.T) {
109
109
110
110
func TestApplyFeatureGates (t * testing.T ) {
111
111
hardPodAffinityWeight := int64 (1 )
112
- wantConfig := & Config {
113
- FrameworkPlugins : & schedulerapi.Plugins {
114
- PreFilter : & schedulerapi.PluginSet {
115
- Enabled : []schedulerapi.Plugin {
116
- {Name : noderesources .FitName },
117
- {Name : nodeports .Name },
118
- {Name : interpodaffinity .Name },
119
- {Name : podtopologyspread .Name },
112
+ tests := []struct {
113
+ name string
114
+ featuresEnabled bool
115
+ wantConfig * Config
116
+ }{
117
+ {
118
+ name : "Feature gates disabled" ,
119
+ featuresEnabled : false ,
120
+ wantConfig : & Config {
121
+ FrameworkPlugins : & schedulerapi.Plugins {
122
+ PreFilter : & schedulerapi.PluginSet {
123
+ Enabled : []schedulerapi.Plugin {
124
+ {Name : noderesources .FitName },
125
+ {Name : nodeports .Name },
126
+ {Name : interpodaffinity .Name },
127
+ },
128
+ },
129
+ Filter : & schedulerapi.PluginSet {
130
+ Enabled : []schedulerapi.Plugin {
131
+ {Name : nodeunschedulable .Name },
132
+ {Name : noderesources .FitName },
133
+ {Name : nodename .Name },
134
+ {Name : nodeports .Name },
135
+ {Name : nodeaffinity .Name },
136
+ {Name : volumerestrictions .Name },
137
+ {Name : tainttoleration .Name },
138
+ {Name : nodevolumelimits .EBSName },
139
+ {Name : nodevolumelimits .GCEPDName },
140
+ {Name : nodevolumelimits .CSIName },
141
+ {Name : nodevolumelimits .AzureDiskName },
142
+ {Name : volumebinding .Name },
143
+ {Name : volumezone .Name },
144
+ {Name : interpodaffinity .Name },
145
+ },
146
+ },
147
+ PostFilter : & schedulerapi.PluginSet {
148
+ Enabled : []schedulerapi.Plugin {
149
+ {Name : interpodaffinity .Name },
150
+ {Name : tainttoleration .Name },
151
+ },
152
+ },
153
+ Score : & schedulerapi.PluginSet {
154
+ Enabled : []schedulerapi.Plugin {
155
+ {Name : noderesources .BalancedAllocationName , Weight : 1 },
156
+ {Name : imagelocality .Name , Weight : 1 },
157
+ {Name : interpodaffinity .Name , Weight : 1 },
158
+ {Name : noderesources .LeastAllocatedName , Weight : 1 },
159
+ {Name : nodeaffinity .Name , Weight : 1 },
160
+ {Name : nodepreferavoidpods .Name , Weight : 10000 },
161
+ {Name : defaultpodtopologyspread .Name , Weight : 1 },
162
+ {Name : tainttoleration .Name , Weight : 1 },
163
+ },
164
+ },
120
165
},
121
- },
122
- Filter : & schedulerapi.PluginSet {
123
- Enabled : []schedulerapi.Plugin {
124
- {Name : nodeunschedulable .Name },
125
- {Name : noderesources .FitName },
126
- {Name : nodename .Name },
127
- {Name : nodeports .Name },
128
- {Name : nodeaffinity .Name },
129
- {Name : volumerestrictions .Name },
130
- {Name : tainttoleration .Name },
131
- {Name : nodevolumelimits .EBSName },
132
- {Name : nodevolumelimits .GCEPDName },
133
- {Name : nodevolumelimits .CSIName },
134
- {Name : nodevolumelimits .AzureDiskName },
135
- {Name : volumebinding .Name },
136
- {Name : volumezone .Name },
137
- {Name : interpodaffinity .Name },
138
- {Name : podtopologyspread .Name },
166
+ FrameworkPluginConfig : []schedulerapi.PluginConfig {
167
+ {
168
+ Name : interpodaffinity .Name ,
169
+ Args : runtime.Unknown {Raw : []byte (fmt .Sprintf (`{"hardPodAffinityWeight":%d}` , hardPodAffinityWeight ))},
170
+ },
139
171
},
140
172
},
141
- PostFilter : & schedulerapi.PluginSet {
142
- Enabled : []schedulerapi.Plugin {
143
- {Name : interpodaffinity .Name },
144
- {Name : tainttoleration .Name },
145
- {Name : podtopologyspread .Name },
173
+ },
174
+ {
175
+ name : "Feature gates enabled" ,
176
+ featuresEnabled : true ,
177
+ wantConfig : & Config {
178
+ FrameworkPlugins : & schedulerapi.Plugins {
179
+ PreFilter : & schedulerapi.PluginSet {
180
+ Enabled : []schedulerapi.Plugin {
181
+ {Name : noderesources .FitName },
182
+ {Name : nodeports .Name },
183
+ {Name : interpodaffinity .Name },
184
+ {Name : podtopologyspread .Name },
185
+ },
186
+ },
187
+ Filter : & schedulerapi.PluginSet {
188
+ Enabled : []schedulerapi.Plugin {
189
+ {Name : nodeunschedulable .Name },
190
+ {Name : noderesources .FitName },
191
+ {Name : nodename .Name },
192
+ {Name : nodeports .Name },
193
+ {Name : nodeaffinity .Name },
194
+ {Name : volumerestrictions .Name },
195
+ {Name : tainttoleration .Name },
196
+ {Name : nodevolumelimits .EBSName },
197
+ {Name : nodevolumelimits .GCEPDName },
198
+ {Name : nodevolumelimits .CSIName },
199
+ {Name : nodevolumelimits .AzureDiskName },
200
+ {Name : volumebinding .Name },
201
+ {Name : volumezone .Name },
202
+ {Name : interpodaffinity .Name },
203
+ {Name : podtopologyspread .Name },
204
+ },
205
+ },
206
+ PostFilter : & schedulerapi.PluginSet {
207
+ Enabled : []schedulerapi.Plugin {
208
+ {Name : interpodaffinity .Name },
209
+ {Name : tainttoleration .Name },
210
+ {Name : podtopologyspread .Name },
211
+ },
212
+ },
213
+ Score : & schedulerapi.PluginSet {
214
+ Enabled : []schedulerapi.Plugin {
215
+ {Name : noderesources .BalancedAllocationName , Weight : 1 },
216
+ {Name : imagelocality .Name , Weight : 1 },
217
+ {Name : interpodaffinity .Name , Weight : 1 },
218
+ {Name : noderesources .LeastAllocatedName , Weight : 1 },
219
+ {Name : nodeaffinity .Name , Weight : 1 },
220
+ {Name : nodepreferavoidpods .Name , Weight : 10000 },
221
+ {Name : defaultpodtopologyspread .Name , Weight : 1 },
222
+ {Name : tainttoleration .Name , Weight : 1 },
223
+ {Name : podtopologyspread .Name , Weight : 1 },
224
+ {Name : noderesources .ResourceLimitsName , Weight : 1 },
225
+ },
226
+ },
146
227
},
147
- },
148
- Score : & schedulerapi.PluginSet {
149
- Enabled : []schedulerapi.Plugin {
150
- {Name : noderesources .BalancedAllocationName , Weight : 1 },
151
- {Name : imagelocality .Name , Weight : 1 },
152
- {Name : interpodaffinity .Name , Weight : 1 },
153
- {Name : noderesources .LeastAllocatedName , Weight : 1 },
154
- {Name : nodeaffinity .Name , Weight : 1 },
155
- {Name : nodepreferavoidpods .Name , Weight : 10000 },
156
- {Name : defaultpodtopologyspread .Name , Weight : 1 },
157
- {Name : tainttoleration .Name , Weight : 1 },
158
- {Name : podtopologyspread .Name , Weight : 1 },
159
- {Name : noderesources .ResourceLimitsName , Weight : 1 },
228
+ FrameworkPluginConfig : []schedulerapi.PluginConfig {
229
+ {
230
+ Name : interpodaffinity .Name ,
231
+ Args : runtime.Unknown {Raw : []byte (fmt .Sprintf (`{"hardPodAffinityWeight":%d}` , hardPodAffinityWeight ))},
232
+ },
160
233
},
161
234
},
162
235
},
163
- FrameworkPluginConfig : []schedulerapi.PluginConfig {
164
- {
165
- Name : interpodaffinity .Name ,
166
- Args : runtime.Unknown {Raw : []byte (fmt .Sprintf (`{"hardPodAffinityWeight":%d}` , hardPodAffinityWeight ))},
167
- },
168
- },
169
236
}
170
237
171
- defer featuregatetesting .SetFeatureGateDuringTest (t , utilfeature .DefaultFeatureGate , features .ResourceLimitsPriorityFunction , true )()
172
- defer featuregatetesting .SetFeatureGateDuringTest (t , utilfeature .DefaultFeatureGate , features .EvenPodsSpread , true )()
238
+ for _ , test := range tests {
239
+ t .Run (test .name , func (t * testing.T ) {
240
+ defer featuregatetesting .SetFeatureGateDuringTest (t , utilfeature .DefaultFeatureGate , features .ResourceLimitsPriorityFunction , test .featuresEnabled )()
241
+ defer featuregatetesting .SetFeatureGateDuringTest (t , utilfeature .DefaultFeatureGate , features .EvenPodsSpread , test .featuresEnabled )()
173
242
174
- r := NewRegistry (hardPodAffinityWeight )
175
- gotConfig := r [schedulerapi .SchedulerDefaultProviderName ]
176
- if diff := cmp .Diff (wantConfig , gotConfig ); diff != "" {
177
- t .Errorf ("unexpected config diff (-want, +got): %s" , diff )
243
+ r := NewRegistry (hardPodAffinityWeight )
244
+ gotConfig := r [schedulerapi .SchedulerDefaultProviderName ]
245
+ if diff := cmp .Diff (test .wantConfig , gotConfig ); diff != "" {
246
+ t .Errorf ("unexpected config diff (-want, +got): %s" , diff )
247
+ }
248
+ })
178
249
}
179
250
}
0 commit comments