@@ -1223,6 +1223,73 @@ func TestCoreResourceEnqueue(t *testing.T) {
1223
1223
wantRequeuedPods : sets.Set [string ]{},
1224
1224
enableSchedulingQueueHint : []bool {true },
1225
1225
},
1226
+ {
1227
+ name : "Pod rejected by the VolumeRestriction plugin is requeued when the PVC bound to the pod is added" ,
1228
+ initialNodes : []* v1.Node {st .MakeNode ().Name ("fake-node" ).Label ("node" , "fake-node" ).Obj ()},
1229
+ initialPVs : []* v1.PersistentVolume {
1230
+ st .MakePersistentVolume ().
1231
+ Name ("pv1" ).
1232
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteOnce }).
1233
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
1234
+ HostPathVolumeSource (& v1.HostPathVolumeSource {Path : "/tmp" , Type : ptr .To (v1 .HostPathDirectoryOrCreate )}).
1235
+ Obj (),
1236
+ },
1237
+ pods : []* v1.Pod {
1238
+ st .MakePod ().Name ("pod1" ).Container ("image" ).PVC ("pvc1" ).Obj (),
1239
+ st .MakePod ().Name ("pod2" ).Container ("image" ).PVC ("pvc2" ).Obj (),
1240
+ },
1241
+ triggerFn : func (testCtx * testutils.TestContext ) (map [framework.ClusterEvent ]uint64 , error ) {
1242
+ pvc2 := st .MakePersistentVolumeClaim ().
1243
+ Name ("pvc1" ).
1244
+ Annotation (volume .AnnBindCompleted , "true" ).
1245
+ VolumeName ("pv1" ).
1246
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteOncePod }).
1247
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
1248
+ Obj ()
1249
+ if _ , err := testCtx .ClientSet .CoreV1 ().PersistentVolumeClaims (testCtx .NS .Name ).Create (testCtx .Ctx , pvc2 , metav1.CreateOptions {}); err != nil {
1250
+ return nil , fmt .Errorf ("failed to add pvc1: %w" , err )
1251
+ }
1252
+ return map [framework.ClusterEvent ]uint64 {framework .PvcAdd : 1 }, nil
1253
+ },
1254
+ wantRequeuedPods : sets .New ("pod1" ),
1255
+ enableSchedulingQueueHint : []bool {true },
1256
+ },
1257
+ {
1258
+ name : "Pod rejected by the VolumeRestriction plugin is requeued when the pod is deleted" ,
1259
+ initialNodes : []* v1.Node {st .MakeNode ().Name ("fake-node" ).Label ("node" , "fake-node" ).Obj ()},
1260
+ initialPVs : []* v1.PersistentVolume {
1261
+ st .MakePersistentVolume ().
1262
+ Name ("pv1" ).
1263
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteOnce }).
1264
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
1265
+ HostPathVolumeSource (& v1.HostPathVolumeSource {Path : "/tmp" , Type : ptr .To (v1 .HostPathDirectoryOrCreate )}).
1266
+ Obj (),
1267
+ },
1268
+ initialPVCs : []* v1.PersistentVolumeClaim {
1269
+ st .MakePersistentVolumeClaim ().
1270
+ Name ("pvc1" ).
1271
+ Annotation (volume .AnnBindCompleted , "true" ).
1272
+ VolumeName ("pv1" ).
1273
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteOncePod }).
1274
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
1275
+ Obj (),
1276
+ },
1277
+ initialPods : []* v1.Pod {
1278
+ st .MakePod ().Name ("pod1" ).Container ("image" ).PVC ("pvc1" ).Node ("fake-node" ).Obj (),
1279
+ },
1280
+ pods : []* v1.Pod {
1281
+ st .MakePod ().Name ("pod2" ).Container ("image" ).PVC ("pvc1" ).Obj (),
1282
+ st .MakePod ().Name ("pod3" ).Container ("image" ).PVC ("pvc2" ).Obj (),
1283
+ },
1284
+ triggerFn : func (testCtx * testutils.TestContext ) (map [framework.ClusterEvent ]uint64 , error ) {
1285
+ if err := testCtx .ClientSet .CoreV1 ().Pods (testCtx .NS .Name ).Delete (testCtx .Ctx , "pod1" , metav1.DeleteOptions {GracePeriodSeconds : new (int64 )}); err != nil {
1286
+ return nil , fmt .Errorf ("failed to delete pod1: %w" , err )
1287
+ }
1288
+ return map [framework.ClusterEvent ]uint64 {framework .AssignedPodDelete : 1 }, nil
1289
+ },
1290
+ wantRequeuedPods : sets .New ("pod2" ),
1291
+ enableSchedulingQueueHint : []bool {true },
1292
+ },
1226
1293
}
1227
1294
1228
1295
for _ , tt := range tests {
0 commit comments