@@ -17,6 +17,7 @@ limitations under the License.
17
17
package controller
18
18
19
19
import (
20
+ "context"
20
21
"errors"
21
22
"fmt"
22
23
"reflect"
@@ -820,6 +821,7 @@ func TestProvision(t *testing.T) {
820
821
expectedPVSpec * pvSpec
821
822
withSecretRefs bool
822
823
expectErr bool
824
+ expectCreateVolDo interface {}
823
825
}{
824
826
"normal provision" : {
825
827
volOpts : controller.VolumeOptions {
@@ -846,7 +848,103 @@ func TestProvision(t *testing.T) {
846
848
},
847
849
},
848
850
},
849
- "provision with access modes" : {
851
+ "provision with access mode multi node multi writer" : {
852
+ volOpts : controller.VolumeOptions {
853
+ PersistentVolumeReclaimPolicy : v1 .PersistentVolumeReclaimDelete ,
854
+ PVName : "test-name" ,
855
+ PVC : & v1.PersistentVolumeClaim {
856
+ ObjectMeta : metav1.ObjectMeta {
857
+ UID : "testid" ,
858
+ },
859
+ Spec : v1.PersistentVolumeClaimSpec {
860
+ Selector : nil ,
861
+ Resources : v1.ResourceRequirements {
862
+ Requests : v1.ResourceList {
863
+ v1 .ResourceName (v1 .ResourceStorage ): resource .MustParse (strconv .FormatInt (requestedBytes , 10 )),
864
+ },
865
+ },
866
+ AccessModes : []v1.PersistentVolumeAccessMode {v1 .ReadWriteMany },
867
+ },
868
+ },
869
+ Parameters : map [string ]string {},
870
+ },
871
+ expectedPVSpec : & pvSpec {
872
+ Name : "test-testi" ,
873
+ ReclaimPolicy : v1 .PersistentVolumeReclaimDelete ,
874
+ AccessModes : []v1.PersistentVolumeAccessMode {v1 .ReadWriteMany },
875
+ Capacity : v1.ResourceList {
876
+ v1 .ResourceName (v1 .ResourceStorage ): bytesToGiQuantity (requestedBytes ),
877
+ },
878
+ CSIPVS : & v1.CSIPersistentVolumeSource {
879
+ Driver : "test-driver" ,
880
+ VolumeHandle : "test-volume-id" ,
881
+ FSType : "ext4" ,
882
+ VolumeAttributes : map [string ]string {
883
+ "storage.kubernetes.io/csiProvisionerIdentity" : "test-provisioner" ,
884
+ },
885
+ },
886
+ },
887
+ expectCreateVolDo : func (ctx context.Context , req * csi.CreateVolumeRequest ) {
888
+ if len (req .GetVolumeCapabilities ()) != 1 {
889
+ t .Errorf ("Incorrect length in volume capabilities" )
890
+ }
891
+ if req .GetVolumeCapabilities ()[0 ].GetAccessMode () == nil {
892
+ t .Errorf ("Expected access mode to be set" )
893
+ }
894
+ if req .GetVolumeCapabilities ()[0 ].GetAccessMode ().GetMode () != csi .VolumeCapability_AccessMode_MULTI_NODE_MULTI_WRITER {
895
+ t .Errorf ("Expected multi_node_multi_writer" )
896
+ }
897
+ },
898
+ },
899
+ "provision with access mode multi node multi readonly" : {
900
+ volOpts : controller.VolumeOptions {
901
+ PersistentVolumeReclaimPolicy : v1 .PersistentVolumeReclaimDelete ,
902
+ PVName : "test-name" ,
903
+ PVC : & v1.PersistentVolumeClaim {
904
+ ObjectMeta : metav1.ObjectMeta {
905
+ UID : "testid" ,
906
+ },
907
+ Spec : v1.PersistentVolumeClaimSpec {
908
+ Selector : nil ,
909
+ Resources : v1.ResourceRequirements {
910
+ Requests : v1.ResourceList {
911
+ v1 .ResourceName (v1 .ResourceStorage ): resource .MustParse (strconv .FormatInt (requestedBytes , 10 )),
912
+ },
913
+ },
914
+ AccessModes : []v1.PersistentVolumeAccessMode {v1 .ReadOnlyMany },
915
+ },
916
+ },
917
+ Parameters : map [string ]string {},
918
+ },
919
+ expectedPVSpec : & pvSpec {
920
+ Name : "test-testi" ,
921
+ ReclaimPolicy : v1 .PersistentVolumeReclaimDelete ,
922
+ AccessModes : []v1.PersistentVolumeAccessMode {v1 .ReadOnlyMany },
923
+ Capacity : v1.ResourceList {
924
+ v1 .ResourceName (v1 .ResourceStorage ): bytesToGiQuantity (requestedBytes ),
925
+ },
926
+ CSIPVS : & v1.CSIPersistentVolumeSource {
927
+ Driver : "test-driver" ,
928
+ VolumeHandle : "test-volume-id" ,
929
+ FSType : "ext4" ,
930
+ VolumeAttributes : map [string ]string {
931
+ "storage.kubernetes.io/csiProvisionerIdentity" : "test-provisioner" ,
932
+ },
933
+ },
934
+ },
935
+ expectCreateVolDo : func (ctx context.Context , req * csi.CreateVolumeRequest ) {
936
+ if len (req .GetVolumeCapabilities ()) != 1 {
937
+ t .Errorf ("Incorrect length in volume capabilities" )
938
+ }
939
+ if req .GetVolumeCapabilities ()[0 ].GetAccessMode () == nil {
940
+ t .Errorf ("Expected access mode to be set" )
941
+ }
942
+ if req .GetVolumeCapabilities ()[0 ].GetAccessMode ().GetMode () != csi .VolumeCapability_AccessMode_MULTI_NODE_READER_ONLY {
943
+ t .Errorf ("Expected multi_node_reader_only" )
944
+ }
945
+ },
946
+ },
947
+ "provision with access mode single writer" : {
850
948
volOpts : controller.VolumeOptions {
851
949
PersistentVolumeReclaimPolicy : v1 .PersistentVolumeReclaimDelete ,
852
950
PVName : "test-name" ,
@@ -882,6 +980,17 @@ func TestProvision(t *testing.T) {
882
980
},
883
981
},
884
982
},
983
+ expectCreateVolDo : func (ctx context.Context , req * csi.CreateVolumeRequest ) {
984
+ if len (req .GetVolumeCapabilities ()) != 1 {
985
+ t .Errorf ("Incorrect length in volume capabilities" )
986
+ }
987
+ if req .GetVolumeCapabilities ()[0 ].GetAccessMode () == nil {
988
+ t .Errorf ("Expected access mode to be set" )
989
+ }
990
+ if req .GetVolumeCapabilities ()[0 ].GetAccessMode ().GetMode () != csi .VolumeCapability_AccessMode_SINGLE_NODE_WRITER {
991
+ t .Errorf ("Expected single_node_writer" )
992
+ }
993
+ },
885
994
},
886
995
"provision with secrets" : {
887
996
volOpts : controller.VolumeOptions {
@@ -1038,6 +1147,9 @@ func TestProvision(t *testing.T) {
1038
1147
provisionMockServerSetupExpectations (identityServer , controllerServer )
1039
1148
controllerServer .EXPECT ().CreateVolume (gomock .Any (), gomock .Any ()).Return (out , nil ).Times (1 )
1040
1149
controllerServer .EXPECT ().DeleteVolume (gomock .Any (), gomock .Any ()).Return (& csi.DeleteVolumeResponse {}, nil ).Times (1 )
1150
+ } else if tc .expectCreateVolDo != nil {
1151
+ provisionMockServerSetupExpectations (identityServer , controllerServer )
1152
+ controllerServer .EXPECT ().CreateVolume (gomock .Any (), gomock .Any ()).Do (tc .expectCreateVolDo ).Return (out , nil ).Times (1 )
1041
1153
} else {
1042
1154
// Setup regular mock call expectations.
1043
1155
provisionMockServerSetupExpectations (identityServer , controllerServer )
0 commit comments