Skip to content

Commit f427a19

Browse files
committed
e2e: surface checksum mismatch for verification and deletion
1 parent aa1a11d commit f427a19

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

test/e2e/delete_incremental_backup_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package e2e
22

33
import (
4+
"context"
45
"fmt"
56
"time"
67

8+
"path/filepath"
9+
"strconv"
10+
711
finv1 "github.com/cybozu-go/fin/api/v1"
812
"github.com/cybozu-go/fin/internal/controller"
913
"github.com/cybozu-go/fin/test/utils"
@@ -118,4 +122,34 @@ func deleteIncrementalBackupTestSuite() {
118122
return nil
119123
}, "10s", "1s").WithContext(ctx).Should(Succeed())
120124
})
125+
126+
It("should fail deletion job when checksum file is corrupted", func(ctx SpecContext) {
127+
// Arrange
128+
pod := CreatePodForBlockPVC(ctx, k8sClient, pvc)
129+
_ = WriteRandomDataToPVC(ctx, pod, devicePathInPodForPVC, 1024)
130+
131+
fullBackup := CreateBackup(ctx, ctrlClient, rookNamespace, pvc, nodes[0])
132+
133+
incremental, err := NewFinBackup(rookNamespace, utils.GetUniqueName("test-finbackup-"), pvc, nodes[0])
134+
incremental.Annotations = map[string]string{controller.AnnotationSkipVerify: "true"}
135+
Expect(err).NotTo(HaveOccurred())
136+
Expect(CreateFinBackup(ctx, ctrlClient, incremental)).NotTo(HaveOccurred())
137+
Expect(WaitForFinBackupStoredToNode(ctx, ctrlClient, incremental, 2*time.Minute)).NotTo(HaveOccurred())
138+
Expect(ctrlClient.Get(ctx, client.ObjectKeyFromObject(incremental), incremental)).NotTo(HaveOccurred())
139+
ExpectDiffChecksumExists(nodes[0], incremental, pvc)
140+
141+
diffChecksumPath := filepath.Join("/fin", pvc.Namespace, pvc.Name, "diff", strconv.Itoa(*incremental.Status.SnapID), "part-0.csum")
142+
CorruptFileOnNode(nodes[0], diffChecksumPath)
143+
144+
// Act
145+
Expect(DeleteFinBackup(ctx, ctrlClient, incremental)).NotTo(HaveOccurred())
146+
147+
// Assert
148+
Expect(WaitForFinBackupChecksumMismatch(ctx, ctrlClient, incremental, 2*time.Minute)).NotTo(HaveOccurred())
149+
150+
// Cleanup
151+
ForceDeleteFinBackup(context.Background(), ctrlClient, incremental)
152+
ForceDeleteFinBackup(context.Background(), ctrlClient, fullBackup)
153+
_ = DeletePod(ctx, k8sClient, pod)
154+
})
121155
}

test/e2e/verification_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package e2e
22

33
import (
4+
"context"
45
"path"
6+
"strconv"
57
"time"
68

79
"github.com/cybozu-go/fin/test/utils"
@@ -289,4 +291,34 @@ func verificationTestSuite() {
289291
Expect(err).NotTo(HaveOccurred())
290292
},
291293
)
294+
295+
It("should fail verification when diff checksum file is corrupted", func(ctx SpecContext) {
296+
// Arrange
297+
fullBackup := CreateBackup(ctx, ctrlClient, rookNamespace, pvc, nodes[0])
298+
299+
By("modifying data to generate diff for incremental backup")
300+
pod := CreatePodForFilesystemPVC(ctx, k8sClient, pvc)
301+
defer func() {
302+
_ = DeletePod(context.Background(), k8sClient, pod)
303+
}()
304+
_ = WriteRandomDataToPVC(ctx, pod, path.Join(mountPathInPodForFSPVC, "test2"), dataSize)
305+
306+
By("creating an incremental backup")
307+
incrementalBackup, err := NewFinBackup(ns.Name, utils.GetUniqueName("test-finbackup-"), pvc, nodes[0])
308+
Expect(err).NotTo(HaveOccurred())
309+
Expect(CreateFinBackup(ctx, ctrlClient, incrementalBackup)).NotTo(HaveOccurred())
310+
Expect(WaitForFinBackupStoredToNode(ctx, ctrlClient, incrementalBackup, 2*time.Minute)).NotTo(HaveOccurred())
311+
Expect(ctrlClient.Get(ctx, client.ObjectKeyFromObject(incrementalBackup), incrementalBackup)).NotTo(HaveOccurred())
312+
ExpectDiffChecksumExists(nodes[0], incrementalBackup, pvc)
313+
314+
diffChecksumPath := path.Join("/fin", pvc.Namespace, pvc.Name, "diff", strconv.Itoa(*incrementalBackup.Status.SnapID), "part-0.csum")
315+
CorruptFileOnNode(nodes[0], diffChecksumPath)
316+
317+
// Act + Assert
318+
Expect(WaitForFinBackupChecksumMismatch(ctx, ctrlClient, incrementalBackup, 2*time.Minute)).NotTo(HaveOccurred())
319+
320+
// Cleanup
321+
ForceDeleteFinBackup(context.Background(), ctrlClient, incrementalBackup)
322+
ForceDeleteFinBackup(context.Background(), ctrlClient, fullBackup)
323+
})
292324
}

0 commit comments

Comments
 (0)