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 {