mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-12-18 11:00:25 +00:00
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 <prasanna.kalever@redhat.com>
This commit is contained in:
parent
27f503c144
commit
89a7ada12f
51
e2e/rbd.go
51
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() {
|
var _ = Describe("RBD", func() {
|
||||||
f := framework.NewDefaultFramework("rbd")
|
f := framework.NewDefaultFramework("rbd")
|
||||||
var c clientset.Interface
|
var c clientset.Interface
|
||||||
@ -395,8 +410,7 @@ var _ = Describe("RBD", func() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pvcName, stdErr, err := execCommandInToolBoxPod(f,
|
pvcName, stdErr, err := execCommandInToolBoxPod(f,
|
||||||
fmt.Sprintf("rbd image-meta get %s --image=%s %s",
|
formatImageMetaGetCmd(defaultRBDPool, imageList[0], pvcNameKey),
|
||||||
rbdOptions(defaultRBDPool), imageList[0], pvcNameKey),
|
|
||||||
rookNamespace)
|
rookNamespace)
|
||||||
if err != nil || stdErr != "" {
|
if err != nil || stdErr != "" {
|
||||||
e2elog.Failf("failed to get PVC name %s/%s %s: err=%v stdErr=%q",
|
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,
|
pvcNamespace, stdErr, err := execCommandInToolBoxPod(f,
|
||||||
fmt.Sprintf("rbd image-meta get %s --image=%s %s",
|
formatImageMetaGetCmd(defaultRBDPool, imageList[0], pvcNamespaceKey),
|
||||||
rbdOptions(defaultRBDPool), imageList[0], pvcNamespaceKey),
|
|
||||||
rookNamespace)
|
rookNamespace)
|
||||||
if err != nil || stdErr != "" {
|
if err != nil || stdErr != "" {
|
||||||
e2elog.Failf("failed to get PVC namespace %s/%s %s: err=%v stdErr=%q",
|
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)
|
e2elog.Logf("pv name is empty %q in namespace %q: %v", pvc.Name, pvc.Namespace, err)
|
||||||
}
|
}
|
||||||
pvName, stdErr, err := execCommandInToolBoxPod(f,
|
pvName, stdErr, err := execCommandInToolBoxPod(f,
|
||||||
fmt.Sprintf("rbd image-meta get %s --image=%s %s",
|
formatImageMetaGetCmd(defaultRBDPool, imageList[0], pvNameKey),
|
||||||
rbdOptions(defaultRBDPool), imageList[0], pvNameKey),
|
|
||||||
rookNamespace)
|
rookNamespace)
|
||||||
if err != nil || stdErr != "" {
|
if err != nil || stdErr != "" {
|
||||||
e2elog.Failf("failed to get PV name %s/%s %s: err=%v stdErr=%q",
|
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)
|
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)
|
err = deleteSnapshot(&snap, deployTimeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e2elog.Failf("failed to delete snapshot: %v", err)
|
e2elog.Failf("failed to delete snapshot: %v", err)
|
||||||
|
@ -229,6 +229,7 @@ func getVolumeSnapshotContent(namespace, snapshotName string) (*snapapi.VolumeSn
|
|||||||
return volumeSnapshotContent, nil
|
return volumeSnapshotContent, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nolint:gocyclo,cyclop // reduce complexity
|
||||||
func validateBiggerPVCFromSnapshot(f *framework.Framework,
|
func validateBiggerPVCFromSnapshot(f *framework.Framework,
|
||||||
pvcPath,
|
pvcPath,
|
||||||
appPath,
|
appPath,
|
||||||
@ -305,6 +306,43 @@ func validateBiggerPVCFromSnapshot(f *framework.Framework,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to validate device size: %w", err)
|
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)
|
err = deletePVCAndApp("", f, pvcClone, appClone)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user