3535)
3636
3737func TestModify (t * testing.T ) {
38- basePVC := createTestPVC (pvcName , testVac /*vacName*/ , testVac /*curVacName*/ , testVac /*targetVacName*/ )
38+ basePVC := createTestPVC (pvcName , testVac /*vacName*/ , testVac /*curVacName*/ , testVac /*targetVacName*/ , "" /*modifyVolumeStatus*/ )
3939 basePV := createTestPV (1 , pvcName , pvcNamespace , "foobaz" /*pvcUID*/ , & fsVolumeMode , testVac )
4040
4141 var tests = []struct {
@@ -61,7 +61,7 @@ func TestModify(t *testing.T) {
6161 },
6262 {
6363 name : "vac does not exist, no modification and set ModifyVolumeStatus to pending" ,
64- pvc : createTestPVC (pvcName , targetVac /*vacName*/ , testVac /*curVacName*/ , testVac /*targetVacName*/ ),
64+ pvc : createTestPVC (pvcName , targetVac /*vacName*/ , testVac /*curVacName*/ , testVac /*targetVacName*/ , "" /*modifyVolumeStatus*/ ),
6565 pv : basePV ,
6666 expectModifyCall : false ,
6767 expectedModifyVolumeStatus : & v1.ModifyVolumeStatus {
@@ -73,7 +73,7 @@ func TestModify(t *testing.T) {
7373 },
7474 {
7575 name : "modify volume success" ,
76- pvc : createTestPVC (pvcName , targetVac /*vacName*/ , testVac /*curVacName*/ , testVac /*targetVacName*/ ),
76+ pvc : createTestPVC (pvcName , targetVac /*vacName*/ , testVac /*curVacName*/ , testVac /*targetVacName*/ , "" /*modifyVolumeStatus*/ ),
7777 pv : basePV ,
7878 vacExists : true ,
7979 expectModifyCall : true ,
@@ -83,7 +83,7 @@ func TestModify(t *testing.T) {
8383 },
8484 {
8585 name : "modify volume success with extra metadata" ,
86- pvc : createTestPVC (pvcName , targetVac /*vacName*/ , testVac /*curVacName*/ , testVac /*targetVacName*/ ),
86+ pvc : createTestPVC (pvcName , targetVac /*vacName*/ , testVac /*curVacName*/ , testVac /*targetVacName*/ , "" /*modifyVolumeStatus*/ ),
8787 pv : basePV ,
8888 vacExists : true ,
8989 expectModifyCall : true ,
@@ -98,6 +98,26 @@ func TestModify(t *testing.T) {
9898 "csi.storage.k8s.io/pv/name" : "testPV" ,
9999 },
100100 },
101+ {
102+ name : "modify volume rollback succeeds for infeasible errors" ,
103+ pvc : createTestPVC (pvcName , testVac /*vacName*/ , testVac /*curVacName*/ , targetVac /*targetVacName*/ , v1 .PersistentVolumeClaimModifyVolumeInfeasible ),
104+ pv : basePV ,
105+ vacExists : true ,
106+ expectModifyCall : false ,
107+ expectedModifyVolumeStatus : nil ,
108+ expectedCurrentVolumeAttributesClassName : & testVac ,
109+ expectedPVVolumeAttributesClassName : & testVac ,
110+ },
111+ {
112+ name : "modify volume rollback to nil succeeds for infeasible errors" ,
113+ pvc : createTestPVC (pvcName , "" /*vacName*/ , "" /*curVacName*/ , targetVac /*targetVacName*/ , v1 .PersistentVolumeClaimModifyVolumeInfeasible ),
114+ pv : createTestPV (1 , pvcName , pvcNamespace , "foobaz" /*pvcUID*/ , & fsVolumeMode , "" ),
115+ vacExists : true ,
116+ expectModifyCall : false ,
117+ expectedModifyVolumeStatus : nil ,
118+ expectedCurrentVolumeAttributesClassName : nil ,
119+ expectedPVVolumeAttributesClassName : nil ,
120+ },
101121 }
102122
103123 for i := range tests {
@@ -130,16 +150,20 @@ func TestModify(t *testing.T) {
130150
131151 actualCurrentVolumeAttributesClassName := pvc .Status .CurrentVolumeAttributesClassName
132152
133- if diff := cmp .Diff (* test .expectedCurrentVolumeAttributesClassName , * actualCurrentVolumeAttributesClassName ); diff != "" {
134- t .Errorf ("expected CurrentVolumeAttributesClassName to be %v, got %v" , * test .expectedCurrentVolumeAttributesClassName , * actualCurrentVolumeAttributesClassName )
153+ if test .expectedCurrentVolumeAttributesClassName != nil && actualCurrentVolumeAttributesClassName != nil {
154+ if diff := cmp .Diff (* test .expectedCurrentVolumeAttributesClassName , * actualCurrentVolumeAttributesClassName ); diff != "" {
155+ t .Errorf ("expected CurrentVolumeAttributesClassName to be %v, got %v" , * test .expectedCurrentVolumeAttributesClassName , * actualCurrentVolumeAttributesClassName )
156+ }
135157 }
136158
137159 actualPVVolumeAttributesClassName := pv .Spec .VolumeAttributesClassName
138- if diff := cmp .Diff (* test .expectedPVVolumeAttributesClassName , * actualPVVolumeAttributesClassName ); diff != "" {
139- t .Errorf ("expected VolumeAttributesClassName of pv to be %v, got %v" , * test .expectedPVVolumeAttributesClassName , * actualPVVolumeAttributesClassName )
160+ if test .expectedPVVolumeAttributesClassName != nil && actualPVVolumeAttributesClassName != nil {
161+ if diff := cmp .Diff (* test .expectedPVVolumeAttributesClassName , * actualPVVolumeAttributesClassName ); diff != "" {
162+ t .Errorf ("expected VolumeAttributesClassName of pv to be %v, got %v" , * test .expectedPVVolumeAttributesClassName , * actualPVVolumeAttributesClassName )
163+ }
140164 }
141165
142- if test .withExtraMetadata {
166+ if test .withExtraMetadata && test . expectedPVVolumeAttributesClassName != nil {
143167 vacObj , err := ctrlInstance .vacLister .Get (* test .expectedPVVolumeAttributesClassName )
144168 if err != nil {
145169 t .Errorf ("failed to get VAC: %v" , err )
@@ -154,7 +178,7 @@ func TestModify(t *testing.T) {
154178 }
155179}
156180
157- func createTestPVC (pvcName string , vacName string , curVacName string , targetVacName string ) * v1.PersistentVolumeClaim {
181+ func createTestPVC (pvcName string , vacName string , curVacName string , targetVacName string , modifyVolumeStatus v1. PersistentVolumeClaimModifyVolumeStatus ) * v1.PersistentVolumeClaim {
158182 pvc := & v1.PersistentVolumeClaim {
159183 ObjectMeta : metav1.ObjectMeta {Name : pvcName , Namespace : pvcNamespace },
160184 Spec : v1.PersistentVolumeClaimSpec {
@@ -167,21 +191,25 @@ func createTestPVC(pvcName string, vacName string, curVacName string, targetVacN
167191 v1 .ResourceName (v1 .ResourceStorage ): resource .MustParse ("2Gi" ),
168192 },
169193 },
170- VolumeAttributesClassName : & vacName ,
171- VolumeName : pvName ,
194+ VolumeName : pvName ,
172195 },
173196 Status : v1.PersistentVolumeClaimStatus {
174197 Phase : v1 .ClaimBound ,
175198 Capacity : v1.ResourceList {
176199 v1 .ResourceStorage : resource .MustParse ("2Gi" ),
177200 },
178- CurrentVolumeAttributesClassName : & curVacName ,
179201 ModifyVolumeStatus : & v1.ModifyVolumeStatus {
180202 TargetVolumeAttributesClassName : targetVacName ,
181- Status : "" ,
203+ Status : modifyVolumeStatus ,
182204 },
183205 },
184206 }
207+ if vacName != "" {
208+ pvc .Spec .VolumeAttributesClassName = & vacName
209+ }
210+ if curVacName != "" {
211+ pvc .Status .CurrentVolumeAttributesClassName = & curVacName
212+ }
185213 return pvc
186214}
187215
0 commit comments