From 9468b8cfa9ec69cae1703fd1e1d75e5778465f35 Mon Sep 17 00:00:00 2001 From: Lyndon-Li Date: Fri, 8 Sep 2023 09:03:55 +0800 Subject: [PATCH] fix issue 6785 Signed-off-by: Lyndon-Li --- pkg/exposer/csi_snapshot.go | 8 ++-- pkg/exposer/csi_snapshot_test.go | 71 ++++++++++++++++++++++++++++++-- 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/pkg/exposer/csi_snapshot.go b/pkg/exposer/csi_snapshot.go index df9b08546..bc6f00e9c 100644 --- a/pkg/exposer/csi_snapshot.go +++ b/pkg/exposer/csi_snapshot.go @@ -246,8 +246,9 @@ func (e *csiSnapshotExposer) createBackupVS(ctx context.Context, ownerObject cor vs := &snapshotv1api.VolumeSnapshot{ ObjectMeta: metav1.ObjectMeta{ - Name: backupVSName, - Namespace: ownerObject.Namespace, + Name: backupVSName, + Namespace: ownerObject.Namespace, + Annotations: snapshotVS.Annotations, // Don't add ownerReference to SnapshotBackup. // The backupPVC should be deleted before backupVS, otherwise, the deletion of backupVS will fail since // backupPVC has its dataSource referring to it @@ -268,7 +269,8 @@ func (e *csiSnapshotExposer) createBackupVSC(ctx context.Context, ownerObject co vsc := &snapshotv1api.VolumeSnapshotContent{ ObjectMeta: metav1.ObjectMeta{ - Name: backupVSCName, + Name: backupVSCName, + Annotations: snapshotVSC.Annotations, }, Spec: snapshotv1api.VolumeSnapshotContentSpec{ VolumeSnapshotRef: corev1.ObjectReference{ diff --git a/pkg/exposer/csi_snapshot_test.go b/pkg/exposer/csi_snapshot_test.go index dfd4884d1..7ea6d5bf0 100644 --- a/pkg/exposer/csi_snapshot_test.go +++ b/pkg/exposer/csi_snapshot_test.go @@ -58,10 +58,22 @@ func TestExpose(t *testing.T) { UID: "fake-uid", }, } + + snapshotClass := "fake-snapshot-class" vsObject := &snapshotv1api.VolumeSnapshot{ ObjectMeta: metav1.ObjectMeta{ Name: "fake-vs", Namespace: "fake-ns", + Annotations: map[string]string{ + "fake-key-1": "fake-value-1", + "fake-key-2": "fake-value-2", + }, + }, + Spec: snapshotv1api.VolumeSnapshotSpec{ + Source: snapshotv1api.VolumeSnapshotSource{ + VolumeSnapshotContentName: &vscName, + }, + VolumeSnapshotClassName: &snapshotClass, }, Status: &snapshotv1api.VolumeSnapshotStatus{ BoundVolumeSnapshotContentName: &vscName, @@ -71,15 +83,23 @@ func TestExpose(t *testing.T) { } var restoreSize int64 + snapshotHandle := "fake-handle" vscObj := &snapshotv1api.VolumeSnapshotContent{ ObjectMeta: metav1.ObjectMeta{ - Name: "fake-vsc", + Name: vscName, + Annotations: map[string]string{ + "fake-key-3": "fake-value-3", + "fake-key-4": "fake-value-4", + }, }, Spec: snapshotv1api.VolumeSnapshotContentSpec{ - DeletionPolicy: snapshotv1api.VolumeSnapshotContentDelete, + DeletionPolicy: snapshotv1api.VolumeSnapshotContentDelete, + Driver: "fake-driver", + VolumeSnapshotClassName: &snapshotClass, }, Status: &snapshotv1api.VolumeSnapshotContentStatus{ - RestoreSize: &restoreSize, + RestoreSize: &restoreSize, + SnapshotHandle: &snapshotHandle, }, } @@ -284,6 +304,23 @@ func TestExpose(t *testing.T) { }, err: "error to create backup pod: fake-create-error", }, + { + name: "success", + ownerBackup: backup, + exposeParam: CSISnapshotExposeParam{ + SnapshotName: "fake-vs", + SourceNamespace: "fake-ns", + AccessMode: AccessModeFileSystem, + Timeout: time.Millisecond, + }, + snapshotClientObj: []runtime.Object{ + vsObject, + vscObj, + }, + kubeClientObj: []runtime.Object{ + daemonSet, + }, + }, } for _, test := range tests { @@ -317,7 +354,33 @@ func TestExpose(t *testing.T) { } err := exposer.Expose(context.Background(), ownerObject, &test.exposeParam) - assert.EqualError(t, err, test.err) + if err == nil { + assert.NoError(t, err) + + _, err = exposer.kubeClient.CoreV1().Pods(ownerObject.Namespace).Get(context.Background(), ownerObject.Name, metav1.GetOptions{}) + assert.NoError(t, err) + + _, err = exposer.kubeClient.CoreV1().PersistentVolumeClaims(ownerObject.Namespace).Get(context.Background(), ownerObject.Name, metav1.GetOptions{}) + assert.NoError(t, err) + + expectedVS, err := exposer.csiSnapshotClient.VolumeSnapshots(ownerObject.Namespace).Get(context.Background(), ownerObject.Name, metav1.GetOptions{}) + assert.NoError(t, err) + + expectedVSC, err := exposer.csiSnapshotClient.VolumeSnapshotContents().Get(context.Background(), ownerObject.Name, metav1.GetOptions{}) + assert.NoError(t, err) + + assert.Equal(t, expectedVS.Annotations, vsObject.Annotations) + assert.Equal(t, *expectedVS.Spec.VolumeSnapshotClassName, *vsObject.Spec.VolumeSnapshotClassName) + assert.Equal(t, *expectedVS.Spec.Source.VolumeSnapshotContentName, expectedVSC.Name) + + assert.Equal(t, expectedVSC.Annotations, vscObj.Annotations) + assert.Equal(t, expectedVSC.Spec.DeletionPolicy, vscObj.Spec.DeletionPolicy) + assert.Equal(t, expectedVSC.Spec.Driver, vscObj.Spec.Driver) + assert.Equal(t, *expectedVSC.Spec.VolumeSnapshotClassName, *vscObj.Spec.VolumeSnapshotClassName) + } else { + assert.EqualError(t, err, test.err) + } + }) } }