From 89a7ada12f4a4219ce18c79ea760fa7c3269dc12 Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Wed, 4 May 2022 21:24:15 +0530 Subject: [PATCH] e2e: add various testcases to validate unset of metadata Validate that we: * Unset the PVC metadata on the rbd image created for the snapshot * snapshot metadata on CreateVolume from snapshot Signed-off-by: Prasanna Kumar Kalever --- e2e/rbd.go | 51 +++++++++++++++++++++++++++++++++++++++++++------ e2e/snapshot.go | 38 ++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 6 deletions(-) diff --git a/e2e/rbd.go b/e2e/rbd.go index f441e5e54..0b17d41f9 100644 --- a/e2e/rbd.go +++ b/e2e/rbd.go @@ -196,6 +196,21 @@ func validateRBDImageCount(f *framework.Framework, count int, pool string) { } } +func formatImageMetaGetCmd(pool, image, key string) string { + return fmt.Sprintf("rbd image-meta get %s --image=%s %s", rbdOptions(pool), image, key) +} + +// checkGetKeyError check for error conditions returned by get image-meta key, +// returns true if key exists. +func checkGetKeyError(err error, stdErr string) bool { + if err == nil || !strings.Contains(err.Error(), "command terminated with exit code 2") || + !strings.Contains(stdErr, "failed to get metadata") { + return true + } + + return false +} + var _ = Describe("RBD", func() { f := framework.NewDefaultFramework("rbd") var c clientset.Interface @@ -395,8 +410,7 @@ var _ = Describe("RBD", func() { } pvcName, stdErr, err := execCommandInToolBoxPod(f, - fmt.Sprintf("rbd image-meta get %s --image=%s %s", - rbdOptions(defaultRBDPool), imageList[0], pvcNameKey), + formatImageMetaGetCmd(defaultRBDPool, imageList[0], pvcNameKey), rookNamespace) if err != nil || stdErr != "" { e2elog.Failf("failed to get PVC name %s/%s %s: err=%v stdErr=%q", @@ -408,8 +422,7 @@ var _ = Describe("RBD", func() { } pvcNamespace, stdErr, err := execCommandInToolBoxPod(f, - fmt.Sprintf("rbd image-meta get %s --image=%s %s", - rbdOptions(defaultRBDPool), imageList[0], pvcNamespaceKey), + formatImageMetaGetCmd(defaultRBDPool, imageList[0], pvcNamespaceKey), rookNamespace) if err != nil || stdErr != "" { e2elog.Failf("failed to get PVC namespace %s/%s %s: err=%v stdErr=%q", @@ -427,8 +440,7 @@ var _ = Describe("RBD", func() { e2elog.Logf("pv name is empty %q in namespace %q: %v", pvc.Name, pvc.Namespace, err) } pvName, stdErr, err := execCommandInToolBoxPod(f, - fmt.Sprintf("rbd image-meta get %s --image=%s %s", - rbdOptions(defaultRBDPool), imageList[0], pvNameKey), + formatImageMetaGetCmd(defaultRBDPool, imageList[0], pvNameKey), rookNamespace) if err != nil || stdErr != "" { e2elog.Failf("failed to get PV name %s/%s %s: err=%v stdErr=%q", @@ -653,6 +665,33 @@ var _ = Describe("RBD", func() { e2elog.Failf("expected volSnapContentName %q got %q", content.Name, volSnapContentName) } + // make sure we had unset the PVC metadata on the rbd image created + // for the snapshot + pvcName, stdErr, err := execCommandInToolBoxPod(f, + fmt.Sprintf("rbd image-meta get %s --image=%s %s", + rbdOptions(defaultRBDPool), imageList[0], pvcNameKey), + rookNamespace) + if checkGetKeyError(err, stdErr) { + e2elog.Failf("PVC name found on %s/%s %s=%s: err=%v stdErr=%q", + rbdOptions(defaultRBDPool), imageList[0], pvcNameKey, pvcName, err, stdErr) + } + pvcNamespace, stdErr, err := execCommandInToolBoxPod(f, + fmt.Sprintf("rbd image-meta get %s --image=%s %s", + rbdOptions(defaultRBDPool), imageList[0], pvcNamespaceKey), + rookNamespace) + if checkGetKeyError(err, stdErr) { + e2elog.Failf("PVC namespace found on %s/%s %s=%s: err=%v stdErr=%q", + rbdOptions(defaultRBDPool), imageList[0], pvcNamespaceKey, pvcNamespace, err, stdErr) + } + pvName, stdErr, err := execCommandInToolBoxPod(f, + fmt.Sprintf("rbd image-meta get %s --image=%s %s", + rbdOptions(defaultRBDPool), imageList[0], pvNameKey), + rookNamespace) + if checkGetKeyError(err, stdErr) { + e2elog.Failf("PV name found on %s/%s %s=%s: err=%v stdErr=%q", + rbdOptions(defaultRBDPool), imageList[0], pvNameKey, pvName, err, stdErr) + } + err = deleteSnapshot(&snap, deployTimeout) if err != nil { e2elog.Failf("failed to delete snapshot: %v", err) diff --git a/e2e/snapshot.go b/e2e/snapshot.go index f0e2cdb3e..e9637ab77 100644 --- a/e2e/snapshot.go +++ b/e2e/snapshot.go @@ -229,6 +229,7 @@ func getVolumeSnapshotContent(namespace, snapshotName string) (*snapapi.VolumeSn return volumeSnapshotContent, nil } +// nolint:gocyclo,cyclop // reduce complexity func validateBiggerPVCFromSnapshot(f *framework.Framework, pvcPath, appPath, @@ -305,6 +306,43 @@ func validateBiggerPVCFromSnapshot(f *framework.Framework, if err != nil { return fmt.Errorf("failed to validate device size: %w", err) } + + // make sure we had unset snapshot metadata on CreateVolume + // from snapshot + var ( + volSnapName string + volSnapNamespace string + volSnapContentName string + stdErr string + imageList []string + ) + imageList, err = listRBDImages(f, defaultRBDPool) + if err != nil { + e2elog.Failf("failed to list rbd images: %v", err) + } + e2elog.Logf("list of rbd images: %v", imageList) + volSnapName, stdErr, err = execCommandInToolBoxPod(f, + formatImageMetaGetCmd(defaultRBDPool, imageList[0], volSnapNameKey), + rookNamespace) + if checkGetKeyError(err, stdErr) { + e2elog.Failf("found volume snapshot name %s/%s %s=%s: err=%v stdErr=%q", + rbdOptions(defaultRBDPool), imageList[0], volSnapNameKey, volSnapName, err, stdErr) + } + volSnapNamespace, stdErr, err = execCommandInToolBoxPod(f, + formatImageMetaGetCmd(defaultRBDPool, imageList[0], volSnapNamespaceKey), + rookNamespace) + if checkGetKeyError(err, stdErr) { + e2elog.Failf("found volume snapshot namespace %s/%s %s=%s: err=%v stdErr=%q", + rbdOptions(defaultRBDPool), imageList[0], volSnapNamespaceKey, volSnapNamespace, err, stdErr) + } + volSnapContentName, stdErr, err = execCommandInToolBoxPod(f, + formatImageMetaGetCmd(defaultRBDPool, imageList[0], volSnapContentNameKey), + rookNamespace) + if checkGetKeyError(err, stdErr) { + e2elog.Failf("found snapshotcontent name %s/%s %s=%s: err=%v stdErr=%q", + rbdOptions(defaultRBDPool), imageList[0], volSnapContentNameKey, + volSnapContentName, err, stdErr) + } } err = deletePVCAndApp("", f, pvcClone, appClone) if err != nil {