From e460225b805f5f0d266743a35f5cb6797db0f023 Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Wed, 25 Sep 2024 16:32:05 +0200 Subject: [PATCH] e2e: add tests for RBD VolumeGroupSnapshots Signed-off-by: Niels de Vos --- e2e/rbd.go | 13 ++++++++ e2e/volumegroupsnapshot.go | 62 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/e2e/rbd.go b/e2e/rbd.go index c44a6441afa..22d9589c284 100644 --- a/e2e/rbd.go +++ b/e2e/rbd.go @@ -4745,6 +4745,19 @@ var _ = Describe("RBD", func() { } }) + By("test volumeGroupSnapshot", func() { + scName := "csi-rbd-sc" + snapshotter, err := newRBDVolumeGroupSnapshot(f, f.UniqueName, scName, false, deployTimeout, 3) + if err != nil { + framework.Failf("failed to create RBDVolumeGroupSnapshot: %v", err) + } + + err = snapshotter.TestVolumeGroupSnapshot() + if err != nil { + framework.Failf("failed to test volumeGroupSnapshot: %v", err) + } + }) + // delete RBD provisioner secret err := deleteCephUser(f, keyringRBDProvisionerUsername) if err != nil { diff --git a/e2e/volumegroupsnapshot.go b/e2e/volumegroupsnapshot.go index a204bab9eff..8a41aef57ef 100644 --- a/e2e/volumegroupsnapshot.go +++ b/e2e/volumegroupsnapshot.go @@ -117,3 +117,65 @@ func (c *cephFSVolumeGroupSnapshot) ValidateResourcesForDelete() error { return nil } + +type rbdVolumeGroupSnapshot struct { + *volumeGroupSnapshotterBase +} + +var _ VolumeGroupSnapshotter = &rbdVolumeGroupSnapshot{} + +func newRBDVolumeGroupSnapshot(f *framework.Framework, namespace, + storageClass string, + blockPVC bool, + timeout, totalPVCCount int, +) (VolumeGroupSnapshotter, error) { + base, err := newVolumeGroupSnapshotBase(f, namespace, storageClass, blockPVC, timeout, totalPVCCount) + if err != nil { + return nil, fmt.Errorf("failed to create volumeGroupSnapshotterBase: %w", err) + } + + return &rbdVolumeGroupSnapshot{ + volumeGroupSnapshotterBase: base, + }, nil +} + +func (rvgs *rbdVolumeGroupSnapshot) TestVolumeGroupSnapshot() error { + return rvgs.volumeGroupSnapshotterBase.testVolumeGroupSnapshot(rvgs) +} + +func (rvgs *rbdVolumeGroupSnapshot) GetVolumeGroupSnapshotClass() (*groupsnapapi.VolumeGroupSnapshotClass, error) { + vgscPath := fmt.Sprintf("%s/%s", rbdExamplePath, "groupsnapshotclass.yaml") + vgsc := &groupsnapapi.VolumeGroupSnapshotClass{} + err := unmarshal(vgscPath, vgsc) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal VolumeGroupSnapshotClass: %w", err) + } + + vgsc.Parameters["csi.storage.k8s.io/group-snapshotter-secret-namespace"] = cephCSINamespace + vgsc.Parameters["csi.storage.k8s.io/group-snapshotter-secret-name"] = rbdProvisionerSecretName + vgsc.Parameters["pool"] = defaultRBDPool + + fsID, err := getClusterID(rvgs.framework) + if err != nil { + return nil, fmt.Errorf("failed to get clusterID: %w", err) + } + vgsc.Parameters["clusterID"] = fsID + + return vgsc, nil +} + +func (rvgs *rbdVolumeGroupSnapshot) ValidateResourcesForCreate(vgs *groupsnapapi.VolumeGroupSnapshot) error { + sourcePVCCount := len(vgs.Status.PVCVolumeSnapshotRefList) + clonePVCCount := len(vgs.Status.PVCVolumeSnapshotRefList) + totalPVCCount := sourcePVCCount + clonePVCCount + + validateOmapCount(rvgs.framework, totalPVCCount, rbdType, defaultRBDPool, volumesType) + + return nil +} + +func (rvgs *rbdVolumeGroupSnapshot) ValidateResourcesForDelete() error { + validateOmapCount(rvgs.framework, 0, rbdType, defaultRBDPool, volumesType) + + return nil +}