@@ -1036,6 +1036,62 @@ func TestProvision(t *testing.T) {
10361036 volWithLessCap : true ,
10371037 expectErr : true ,
10381038 },
1039+ "provision with mount options" : {
1040+ volOpts : controller.VolumeOptions {
1041+ PersistentVolumeReclaimPolicy : v1 .PersistentVolumeReclaimDelete ,
1042+ PVName : "test-name" ,
1043+ PVC : & v1.PersistentVolumeClaim {
1044+ ObjectMeta : metav1.ObjectMeta {
1045+ UID : "testid" ,
1046+ },
1047+ Spec : v1.PersistentVolumeClaimSpec {
1048+ Selector : nil ,
1049+ Resources : v1.ResourceRequirements {
1050+ Requests : v1.ResourceList {
1051+ v1 .ResourceName (v1 .ResourceStorage ): resource .MustParse (strconv .FormatInt (requestedBytes , 10 )),
1052+ },
1053+ },
1054+ AccessModes : []v1.PersistentVolumeAccessMode {v1 .ReadWriteOnce },
1055+ },
1056+ },
1057+ MountOptions : []string {"foo=bar" , "baz=qux" },
1058+ Parameters : map [string ]string {},
1059+ },
1060+ expectedPVSpec : & pvSpec {
1061+ Name : "test-testi" ,
1062+ ReclaimPolicy : v1 .PersistentVolumeReclaimDelete ,
1063+ AccessModes : []v1.PersistentVolumeAccessMode {v1 .ReadWriteOnce },
1064+ Capacity : v1.ResourceList {
1065+ v1 .ResourceName (v1 .ResourceStorage ): bytesToGiQuantity (requestedBytes ),
1066+ },
1067+ CSIPVS : & v1.CSIPersistentVolumeSource {
1068+ Driver : "test-driver" ,
1069+ VolumeHandle : "test-volume-id" ,
1070+ FSType : "ext4" ,
1071+ VolumeAttributes : map [string ]string {
1072+ "storage.kubernetes.io/csiProvisionerIdentity" : "test-provisioner" ,
1073+ },
1074+ },
1075+ },
1076+ expectCreateVolDo : func (ctx context.Context , req * csi.CreateVolumeRequest ) {
1077+ if len (req .GetVolumeCapabilities ()) != 1 {
1078+ t .Errorf ("Incorrect length in volume capabilities" )
1079+ }
1080+ cap := req .GetVolumeCapabilities ()[0 ]
1081+ if cap .GetAccessMode () == nil {
1082+ t .Errorf ("Expected access mode to be set" )
1083+ }
1084+ if cap .GetAccessMode ().GetMode () != csi .VolumeCapability_AccessMode_SINGLE_NODE_WRITER {
1085+ t .Errorf ("Expected multi reade only" )
1086+ }
1087+ if cap .GetMount () == nil {
1088+ t .Errorf ("Expected access type to be mount" )
1089+ }
1090+ if ! reflect .DeepEqual (cap .GetMount ().MountFlags , []string {"foo=bar" , "baz=qux" }) {
1091+ t .Errorf ("Expected 2 mount options" )
1092+ }
1093+ },
1094+ },
10391095 }
10401096
10411097 mockController , driver , identityServer , controllerServer , csiConn , err := createMockServer (t )
@@ -1563,3 +1619,41 @@ func TestProvisionWithTopology(t *testing.T) {
15631619 t .Errorf ("expected node affinity %v; got: %v" , expectedNodeAffinity , pv .Spec .NodeAffinity )
15641620 }
15651621}
1622+
1623+ // TestProvisionWithMountOptions is a test of provisioner integration with mount options.
1624+ func TestProvisionWithMountOptions (t * testing.T ) {
1625+ expectedOptions := []string {"foo=bar" , "baz=qux" }
1626+ const requestBytes = 100
1627+ mockController , driver , identityServer , controllerServer , csiConn , err := createMockServer (t )
1628+ if err != nil {
1629+ t .Fatal (err )
1630+ }
1631+ defer mockController .Finish ()
1632+ defer driver .Stop ()
1633+
1634+ clientSet := fakeclientset .NewSimpleClientset ()
1635+ csiClientSet := fakecsiclientset .NewSimpleClientset ()
1636+ csiProvisioner := NewCSIProvisioner (clientSet , csiClientSet , driver .Address (), 5 * time .Second , "test-provisioner" , "test" , 5 , csiConn .conn , nil )
1637+
1638+ out := & csi.CreateVolumeResponse {
1639+ Volume : & csi.Volume {
1640+ CapacityBytes : requestBytes ,
1641+ Id : "test-volume-id" ,
1642+ },
1643+ }
1644+
1645+ provisionWithTopologyMockServerSetupExpectations (identityServer , controllerServer )
1646+ controllerServer .EXPECT ().CreateVolume (gomock .Any (), gomock .Any ()).Return (out , nil ).Times (1 )
1647+
1648+ pv , err := csiProvisioner .Provision (controller.VolumeOptions {
1649+ PVC : createFakePVC (requestBytes ), // dummy PVC
1650+ MountOptions : expectedOptions ,
1651+ })
1652+ if err != nil {
1653+ t .Errorf ("got error from Provision call: %v" , err )
1654+ }
1655+
1656+ if ! reflect .DeepEqual (pv .Spec .MountOptions , expectedOptions ) {
1657+ t .Errorf ("expected mount options %v; got: %v" , expectedOptions , pv .Spec .MountOptions )
1658+ }
1659+ }
0 commit comments