@@ -2041,6 +2041,177 @@ func TestCoreResourceEnqueue(t *testing.T) {
2041
2041
wantRequeuedPods : sets.Set [string ]{},
2042
2042
enableSchedulingQueueHint : []bool {true },
2043
2043
},
2044
+ {
2045
+ name : "Pod rejected the CSI plugin is requeued when the CSINode is added" ,
2046
+ initialNodes : []* v1.Node {st .MakeNode ().Name ("fake-node" ).Label ("node" , "fake-node" ).Obj ()},
2047
+ initialPVs : []* v1.PersistentVolume {
2048
+ st .MakePersistentVolume ().Name ("pv1" ).
2049
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2050
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
2051
+ PersistentVolumeSource (v1.PersistentVolumeSource {CSI : & v1.CSIPersistentVolumeSource {Driver : "csidriver" , VolumeHandle : "volumehandle" }}).
2052
+ Obj ()},
2053
+ initialPVCs : []* v1.PersistentVolumeClaim {
2054
+ st .MakePersistentVolumeClaim ().
2055
+ Name ("pvc1" ).
2056
+ Annotation (volume .AnnBindCompleted , "true" ).
2057
+ VolumeName ("pv1" ).
2058
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2059
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
2060
+ Obj (),
2061
+ },
2062
+ initialCSIDrivers : []* storagev1.CSIDriver {
2063
+ st .MakeCSIDriver ().Name ("csidriver" ).StorageCapacity (ptr .To (true )).Obj (),
2064
+ },
2065
+ initialCSINodes : []* storagev1.CSINode {
2066
+ st .MakeCSINode ().Name ("fake-node" ).Driver (storagev1.CSINodeDriver {Name : "csidriver" , NodeID : "fake-node" , Allocatable : & storagev1.VolumeNodeResources {
2067
+ Count : ptr .To (int32 (0 )),
2068
+ }}).Obj (),
2069
+ },
2070
+ pods : []* v1.Pod {
2071
+ st .MakePod ().Name ("pod1" ).Container ("image" ).PVC ("pvc1" ).Obj (),
2072
+ },
2073
+ triggerFn : func (testCtx * testutils.TestContext ) (map [framework.ClusterEvent ]uint64 , error ) {
2074
+ csinode1 := st .MakeCSINode ().Name ("csinode" ).Obj ()
2075
+ if _ , err := testCtx .ClientSet .StorageV1 ().CSINodes ().Create (testCtx .Ctx , csinode1 , metav1.CreateOptions {}); err != nil {
2076
+ return nil , fmt .Errorf ("failed to create CSINode: %w" , err )
2077
+ }
2078
+ return map [framework.ClusterEvent ]uint64 {{Resource : framework .CSINode , ActionType : framework .Add }: 1 }, nil
2079
+ },
2080
+ wantRequeuedPods : sets .New ("pod1" ),
2081
+ enableSchedulingQueueHint : []bool {true },
2082
+ },
2083
+ {
2084
+ name : "Pod rejected with PVC by the CSI plugin is requeued when the pod having related PVC is deleted" ,
2085
+ initialNodes : []* v1.Node {st .MakeNode ().Name ("fake-node" ).Label ("node" , "fake-node" ).Obj ()},
2086
+ initialPVs : []* v1.PersistentVolume {
2087
+ st .MakePersistentVolume ().Name ("pv1" ).
2088
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2089
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
2090
+ PersistentVolumeSource (v1.PersistentVolumeSource {CSI : & v1.CSIPersistentVolumeSource {Driver : "csidriver" , VolumeHandle : "volumehandle1" }}).
2091
+ Obj (),
2092
+ st .MakePersistentVolume ().Name ("pv2" ).
2093
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2094
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
2095
+ PersistentVolumeSource (v1.PersistentVolumeSource {CSI : & v1.CSIPersistentVolumeSource {Driver : "csidriver" , VolumeHandle : "volumehandle2" }}).
2096
+ Obj (),
2097
+ },
2098
+ initialPVCs : []* v1.PersistentVolumeClaim {
2099
+ st .MakePersistentVolumeClaim ().
2100
+ Name ("pvc1" ).
2101
+ Annotation (volume .AnnBindCompleted , "true" ).
2102
+ VolumeName ("pv1" ).
2103
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteOncePod }).
2104
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
2105
+ Obj (),
2106
+ st .MakePersistentVolumeClaim ().
2107
+ Name ("pvc2" ).
2108
+ Annotation (volume .AnnBindCompleted , "true" ).
2109
+ VolumeName ("pv2" ).
2110
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteOncePod }).
2111
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
2112
+ Obj (),
2113
+ },
2114
+ initialCSIDrivers : []* storagev1.CSIDriver {
2115
+ st .MakeCSIDriver ().Name ("csidriver" ).StorageCapacity (ptr .To (true )).Obj (),
2116
+ },
2117
+ initialCSINodes : []* storagev1.CSINode {
2118
+ st .MakeCSINode ().Name ("fake-node" ).Driver (storagev1.CSINodeDriver {Name : "csidriver" , NodeID : "fake-node" , Allocatable : & storagev1.VolumeNodeResources {
2119
+ Count : ptr .To (int32 (1 )),
2120
+ }}).Obj (),
2121
+ },
2122
+ initialPods : []* v1.Pod {
2123
+ st .MakePod ().Name ("pod1" ).Container ("image" ).PVC ("pvc1" ).Node ("fake-node" ).Obj (),
2124
+ },
2125
+ pods : []* v1.Pod {
2126
+ st .MakePod ().Name ("pod2" ).Container ("image" ).PVC ("pvc2" ).Obj (),
2127
+ },
2128
+ triggerFn : func (testCtx * testutils.TestContext ) (map [framework.ClusterEvent ]uint64 , error ) {
2129
+ if err := testCtx .ClientSet .CoreV1 ().Pods (testCtx .NS .Name ).Delete (testCtx .Ctx , "pod1" , metav1.DeleteOptions {GracePeriodSeconds : new (int64 )}); err != nil {
2130
+ return nil , fmt .Errorf ("failed to delete Pod: %w" , err )
2131
+ }
2132
+ return map [framework.ClusterEvent ]uint64 {framework .EventAssignedPodDelete : 1 }, nil
2133
+ },
2134
+ wantRequeuedPods : sets .New ("pod2" ),
2135
+ },
2136
+ {
2137
+ name : "Pod rejected with PVC by the CSI plugin is requeued when the related PVC is added" ,
2138
+ initialNodes : []* v1.Node {st .MakeNode ().Name ("fake-node" ).Label ("node" , "fake-node" ).Obj ()},
2139
+ initialPVs : []* v1.PersistentVolume {
2140
+ st .MakePersistentVolume ().Name ("pv1" ).
2141
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2142
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
2143
+ PersistentVolumeSource (v1.PersistentVolumeSource {CSI : & v1.CSIPersistentVolumeSource {Driver : "csidriver" , VolumeHandle : "volumehandle1" }}).
2144
+ Obj (),
2145
+ st .MakePersistentVolume ().Name ("pv2" ).
2146
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2147
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
2148
+ PersistentVolumeSource (v1.PersistentVolumeSource {CSI : & v1.CSIPersistentVolumeSource {Driver : "csidriver" , VolumeHandle : "volumehandle2" }}).
2149
+ Obj (),
2150
+ st .MakePersistentVolume ().Name ("pv3" ).
2151
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2152
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
2153
+ PersistentVolumeSource (v1.PersistentVolumeSource {CSI : & v1.CSIPersistentVolumeSource {Driver : "csidriver" , VolumeHandle : "volumehandle3" }}).
2154
+ Obj (),
2155
+ },
2156
+ initialPVCs : []* v1.PersistentVolumeClaim {
2157
+ st .MakePersistentVolumeClaim ().
2158
+ Name ("pvc1" ).
2159
+ Annotation (volume .AnnBindCompleted , "true" ).
2160
+ VolumeName ("pv1" ).
2161
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteOncePod }).
2162
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
2163
+ Obj (),
2164
+ // If we don't have pvc2, it's filtered by the VolumeBinding pluging, so we should create it first and recreate it in a triggerFn.
2165
+ st .MakePersistentVolumeClaim ().
2166
+ Name ("pvc2" ).
2167
+ Annotation (volume .AnnBindCompleted , "true" ).
2168
+ VolumeName ("pv2" ).
2169
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteOncePod }).
2170
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
2171
+ Obj (),
2172
+ st .MakePersistentVolumeClaim ().
2173
+ Name ("pvc3" ).
2174
+ Annotation (volume .AnnBindCompleted , "true" ).
2175
+ VolumeName ("pv3" ).
2176
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteOncePod }).
2177
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
2178
+ Obj (),
2179
+ },
2180
+ initialCSIDrivers : []* storagev1.CSIDriver {
2181
+ st .MakeCSIDriver ().Name ("csidriver" ).StorageCapacity (ptr .To (true )).Obj (),
2182
+ },
2183
+ initialCSINodes : []* storagev1.CSINode {
2184
+ st .MakeCSINode ().Name ("fake-node" ).Driver (storagev1.CSINodeDriver {Name : "csidriver" , NodeID : "fake-node" , Allocatable : & storagev1.VolumeNodeResources {
2185
+ Count : ptr .To (int32 (1 )),
2186
+ }}).Obj (),
2187
+ },
2188
+ initialPods : []* v1.Pod {
2189
+ st .MakePod ().Name ("pod1" ).Container ("image" ).PVC ("pvc1" ).Node ("fake-node" ).Obj (),
2190
+ },
2191
+ pods : []* v1.Pod {
2192
+ st .MakePod ().Name ("pod2" ).Container ("image" ).PVC ("pvc2" ).Obj (),
2193
+ st .MakePod ().Name ("pod3" ).Container ("image" ).PVC ("pvc3" ).Obj (),
2194
+ },
2195
+ triggerFn : func (testCtx * testutils.TestContext ) (map [framework.ClusterEvent ]uint64 , error ) {
2196
+ if err := testCtx .ClientSet .CoreV1 ().PersistentVolumeClaims (testCtx .NS .Name ).Delete (testCtx .Ctx , "pvc2" , metav1.DeleteOptions {}); err != nil {
2197
+ return nil , fmt .Errorf ("failed to delete pvc2: %w" , err )
2198
+ }
2199
+
2200
+ pvc := st .MakePersistentVolumeClaim ().
2201
+ Name ("pvc2" ).
2202
+ Annotation (volume .AnnBindCompleted , "true" ).
2203
+ VolumeName ("pv2" ).
2204
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteOncePod }).
2205
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
2206
+ Obj ()
2207
+ if _ , err := testCtx .ClientSet .CoreV1 ().PersistentVolumeClaims (testCtx .NS .Name ).Create (testCtx .Ctx , pvc , metav1.CreateOptions {}); err != nil {
2208
+ return nil , fmt .Errorf ("failed to add pvc2: %w" , err )
2209
+ }
2210
+ return map [framework.ClusterEvent ]uint64 {{Resource : framework .PersistentVolumeClaim , ActionType : framework .Add }: 1 }, nil
2211
+ },
2212
+ wantRequeuedPods : sets .New ("pod2" ),
2213
+ enableSchedulingQueueHint : []bool {true },
2214
+ },
2044
2215
}
2045
2216
2046
2217
for _ , tt := range tests {
0 commit comments