From 9e957520aef8bdffa9d2bd05ce7fbdc0314188da Mon Sep 17 00:00:00 2001 From: Rakshith R Date: Mon, 22 Mar 2021 11:47:42 +0530 Subject: [PATCH] e2e: add test case for app deletion with unmounted cephFS volume Checks app deletion when cephFS volume is already unmounted. Creates app, pvc and binds them. Unmounts the volume through umount cmd in cephFS plugin and checks app deletion. Signed-off-by: Rakshith R --- e2e/cephfs.go | 18 ++++++++++++++++++ e2e/cephfs_helper.go | 20 ++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/e2e/cephfs.go b/e2e/cephfs.go index 2b3103a43..6abc9bfa4 100644 --- a/e2e/cephfs.go +++ b/e2e/cephfs.go @@ -24,6 +24,7 @@ var ( cephfsNodePluginPSP = "csi-nodeplugin-psp.yaml" cephfsDeploymentName = "csi-cephfsplugin-provisioner" cephfsDeamonSetName = "csi-cephfsplugin" + cephfsContainerName = "csi-cephfsplugin" cephfsDirPath = "../deploy/cephfs/kubernetes/" cephfsExamplePath = "../examples/cephfs/" subvolumegroup = "e2e" @@ -427,6 +428,23 @@ var _ = Describe("cephfs", func() { } }) + By("Create PVC, bind it to an app, unmount volume and check app deletion", func() { + pvc, app, err := createPVCAndAppBinding(pvcPath, appPath, f, deployTimeout) + if err != nil { + e2elog.Failf("failed to create PVC or application with error %v", err) + } + + err = unmountCephFSVolume(f, app.Name, pvc.Name) + if err != nil { + e2elog.Failf("failed to unmount volume with error %v", err) + } + + err = deletePVCAndApp("", f, pvc, app) + if err != nil { + e2elog.Failf("failed to delete PVC or application with error %v", err) + } + }) + By("create PVC, delete backing subvolume and check pv deletion", func() { pvc, err := loadPVC(pvcPath) if err != nil { diff --git a/e2e/cephfs_helper.go b/e2e/cephfs_helper.go index a9c1d7324..08ad01c32 100644 --- a/e2e/cephfs_helper.go +++ b/e2e/cephfs_helper.go @@ -101,6 +101,26 @@ func createCephfsSecret(f *framework.Framework, secretName, userName, userKey st return err } +// unmountCephFSVolume unmounts a cephFS volume mounted on a pod. +func unmountCephFSVolume(f *framework.Framework, appName, pvcName string) error { + pod, err := f.ClientSet.CoreV1().Pods(f.UniqueName).Get(context.TODO(), appName, metav1.GetOptions{}) + if err != nil { + e2elog.Logf("Error occurred getting pod %s in namespace %s", appName, f.UniqueName) + return err + } + pvc, err := f.ClientSet.CoreV1().PersistentVolumeClaims(f.UniqueName).Get(context.TODO(), pvcName, metav1.GetOptions{}) + if err != nil { + e2elog.Logf("Error occurred getting PVC %s in namespace %s", pvcName, f.UniqueName) + return err + } + cmd := fmt.Sprintf("umount /var/lib/kubelet/pods/%s/volumes/kubernetes.io~csi/%s/mount", pod.UID, pvc.Spec.VolumeName) + _, stdErr, err := execCommandInDaemonsetPod(f, cmd, cephfsDeamonSetName, pod.Spec.NodeName, cephfsContainerName, cephCSINamespace) + if stdErr != "" { + e2elog.Logf("StdErr occurred: %s", stdErr) + } + return err +} + func deleteBackingCephFSVolume(f *framework.Framework, pvc *v1.PersistentVolumeClaim) error { imageData, err := getImageInfoFromPVC(pvc.Namespace, pvc.Name, f) if err != nil {