diff --git a/src/duplicacy_snapshotmanager_test.go b/src/duplicacy_snapshotmanager_test.go index b6e9f79..ef2ef6f 100644 --- a/src/duplicacy_snapshotmanager_test.go +++ b/src/duplicacy_snapshotmanager_test.go @@ -143,6 +143,15 @@ func uploadRandomChunk(manager *SnapshotManager, chunkSize int) string { return uploadTestChunk(manager, content) } +func uploadRandomChunks(manager *SnapshotManager, chunkSize int, numberOfChunks int) []string { + chunkList := make([]string, 0) + for i := 0; i < numberOfChunks; i++ { + chunkHash := uploadRandomChunk(manager, chunkSize) + chunkList = append(chunkList, chunkHash) + } + return chunkList +} + func createTestSnapshot(manager *SnapshotManager, snapshotID string, revision int, startTime int64, endTime int64, chunkHashes []string, tag string) { snapshot := &Snapshot{ @@ -535,3 +544,41 @@ func TestPruneWithFossils(t *testing.T) { snapshotManager.PruneSnapshots("vm1@host1", "vm1@host1", []int{}, []string{}, []string{}, false, true, []string{}, false, false, false, 1) checkTestSnapshots(snapshotManager, 2, 0) } + +func TestPruneMultipleThread(t *testing.T) { + + setTestingT(t) + + testDir := path.Join(os.TempDir(), "duplicacy_test", "snapshot_test") + + snapshotManager := createTestSnapshotManager(testDir) + + chunkSize := 1024 + numberOfChunks := 256 + numberOfThreads := 4 + + chunkList1 := uploadRandomChunks(snapshotManager, chunkSize, numberOfChunks) + chunkList2 := uploadRandomChunks(snapshotManager, chunkSize, numberOfChunks) + + now := time.Now().Unix() + day := int64(24 * 3600) + t.Logf("Creating 2 snapshots") + createTestSnapshot(snapshotManager, "repository1", 1, now-4*day-3600, now-3*day-60, chunkList1, "tag") + createTestSnapshot(snapshotManager, "repository1", 2, now-3*day-3600, now-2*day-60, chunkList2, "tag") + checkTestSnapshots(snapshotManager, 2, 0) + + t.Logf("Removing snapshot revisions 1 with --exclusive") + snapshotManager.PruneSnapshots("repository1", "repository1", []int{1}, []string{}, []string{}, false, true, []string{}, false, false, false, numberOfThreads) + checkTestSnapshots(snapshotManager, 1, 0) + + t.Logf("Creating 1 more snapshot") + chunkList3 := uploadRandomChunks(snapshotManager, chunkSize, numberOfChunks) + createTestSnapshot(snapshotManager, "repository1", 3, now-2*day-3600, now-1*day-60, chunkList3, "tag") + + t.Logf("Removing snapshot repository1 revision 2 without --exclusive") + snapshotManager.PruneSnapshots("repository1", "repository1", []int{2}, []string{}, []string{}, false, false, []string{}, false, false, false, numberOfThreads) + + t.Logf("Prune without removing any snapshots but with --exclusive") + snapshotManager.PruneSnapshots("repository1", "repository1", []int{}, []string{}, []string{}, false, true, []string{}, false, false, false, numberOfThreads) + checkTestSnapshots(snapshotManager, 1, 0) +}