From 55bbdf0b64873b25302590ed202b90e68c7d0d3a Mon Sep 17 00:00:00 2001 From: Humble Chirammal Date: Sun, 14 Jun 2020 11:52:56 +0530 Subject: [PATCH] Add testcase for defaultfstype provisioner conditions: There are 4 combinations added here: StorageClass set + default set StorageClass unset + default set StorageClass set + default unset StorageClass unset + default unset Signed-off-by: Humble Chirammal --- pkg/controller/controller_test.go | 136 +++++++++++++++++++++++++++++- 1 file changed, 135 insertions(+), 1 deletion(-) diff --git a/pkg/controller/controller_test.go b/pkg/controller/controller_test.go index ad341cefd4..58ed9ad846 100644 --- a/pkg/controller/controller_test.go +++ b/pkg/controller/controller_test.go @@ -812,6 +812,7 @@ type provisioningTestcase struct { expectCreateVolDo interface{} withExtraMetadata bool skipCreateVolume bool + skipDefaultFSType bool } type pvSpec struct { @@ -865,6 +866,136 @@ func getDefaultSecretObjects() []runtime.Object { } } +func TestFSTypeProvision(t *testing.T) { + var requestedBytes int64 = 100 + deletePolicy := v1.PersistentVolumeReclaimDelete + testcases := map[string]provisioningTestcase{ + "fstype not set/'nil' in SC to provision": { + volOpts: controller.ProvisionOptions{ + StorageClass: &storagev1.StorageClass{ + ReclaimPolicy: &deletePolicy, + Parameters: map[string]string{ + // We deliberately skip fsType in sc param + // "fstype": "", + }, + }, + PVName: "test-name", + PVC: createFakePVC(requestedBytes), + }, + expectedPVSpec: &pvSpec{ + Name: "test-testi", + ReclaimPolicy: v1.PersistentVolumeReclaimDelete, + Capacity: v1.ResourceList{ + v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes), + }, + CSIPVS: &v1.CSIPersistentVolumeSource{ + Driver: "test-driver", + VolumeHandle: "test-volume-id", + FSType: "ext4", + VolumeAttributes: map[string]string{ + "storage.kubernetes.io/csiProvisionerIdentity": "test-provisioner", + }, + }, + }, + expectState: controller.ProvisioningFinished, + }, + "Other fstype(ex:'xfs') set in SC": { + volOpts: controller.ProvisionOptions{ + StorageClass: &storagev1.StorageClass{ + ReclaimPolicy: &deletePolicy, + Parameters: map[string]string{ + "fstype": "xfs", + }, + }, + PVName: "test-name", + PVC: createFakePVC(requestedBytes), + }, + expectedPVSpec: &pvSpec{ + Name: "test-testi", + ReclaimPolicy: v1.PersistentVolumeReclaimDelete, + Capacity: v1.ResourceList{ + v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes), + }, + CSIPVS: &v1.CSIPersistentVolumeSource{ + Driver: "test-driver", + VolumeHandle: "test-volume-id", + FSType: "xfs", + VolumeAttributes: map[string]string{ + "storage.kubernetes.io/csiProvisionerIdentity": "test-provisioner", + }, + }, + }, + expectState: controller.ProvisioningFinished, + }, + + "fstype not set/Nil in SC and defaultFSType arg unset for provisioner": { + volOpts: controller.ProvisionOptions{ + StorageClass: &storagev1.StorageClass{ + ReclaimPolicy: &deletePolicy, + Parameters: map[string]string{ + // We deliberately skip fsType in sc param + // "fstype": "xfs", + }, + }, + PVName: "test-name", + PVC: createFakePVC(requestedBytes), + }, + skipDefaultFSType: true, + expectedPVSpec: &pvSpec{ + Name: "test-testi", + ReclaimPolicy: v1.PersistentVolumeReclaimDelete, + Capacity: v1.ResourceList{ + v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes), + }, + CSIPVS: &v1.CSIPersistentVolumeSource{ + Driver: "test-driver", + VolumeHandle: "test-volume-id", + // FSType: "xfs", + FSType: "", + VolumeAttributes: map[string]string{ + "storage.kubernetes.io/csiProvisionerIdentity": "test-provisioner", + }, + }, + }, + expectState: controller.ProvisioningFinished, + }, + + "fstype set in SC and defaultFSType arg unset for provisioner": { + volOpts: controller.ProvisionOptions{ + StorageClass: &storagev1.StorageClass{ + ReclaimPolicy: &deletePolicy, + Parameters: map[string]string{ + "fstype": "xfs", + }, + }, + PVName: "test-name", + PVC: createFakePVC(requestedBytes), + }, + skipDefaultFSType: true, + expectedPVSpec: &pvSpec{ + Name: "test-testi", + ReclaimPolicy: v1.PersistentVolumeReclaimDelete, + Capacity: v1.ResourceList{ + v1.ResourceName(v1.ResourceStorage): bytesToGiQuantity(requestedBytes), + }, + CSIPVS: &v1.CSIPersistentVolumeSource{ + Driver: "test-driver", + VolumeHandle: "test-volume-id", + FSType: "xfs", + VolumeAttributes: map[string]string{ + "storage.kubernetes.io/csiProvisionerIdentity": "test-provisioner", + }, + }, + }, + expectState: controller.ProvisioningFinished, + }, + } + + for k, tc := range testcases { + runProvisionTest(t, k, tc, requestedBytes, driverName, "" /* no migration */) + } +} + func TestProvision(t *testing.T) { var requestedBytes int64 = 100 deletePolicy := v1.PersistentVolumeReclaimDelete @@ -1696,7 +1827,6 @@ func newSnapshot(name, className, boundToContent, snapshotUID, claimName string, func runProvisionTest(t *testing.T, k string, tc provisioningTestcase, requestedBytes int64, provisionDriverName, supportsMigrationFromInTreePluginName string) { t.Logf("Running test: %v", k) - tmpdir := tempDir(t) defer os.RemoveAll(tmpdir) mockController, driver, _, controllerServer, csiConn, err := createMockServer(t, tmpdir) @@ -1709,6 +1839,10 @@ func runProvisionTest(t *testing.T, k string, tc provisioningTestcase, requested clientSet := fakeclientset.NewSimpleClientset(tc.clientSetObjects...) pluginCaps, controllerCaps := provisionCapabilities() + + if tc.skipDefaultFSType { + defaultfsType = "" + } csiProvisioner := NewCSIProvisioner(clientSet, 5*time.Second, "test-provisioner", "test", 5, csiConn.conn, nil, provisionDriverName, pluginCaps, controllerCaps, supportsMigrationFromInTreePluginName, false, csitrans.New(), nil, nil, nil, nil, nil, tc.withExtraMetadata, defaultfsType) out := &csi.CreateVolumeResponse{