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