Skip to content

Commit 65ecdc4

Browse files
committed
Add unit tests for mount options
1 parent be14b93 commit 65ecdc4

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

pkg/controller/controller_test.go

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)