From 6134dd97d55a6c706153e7e9cae9dfec3db3705a Mon Sep 17 00:00:00 2001 From: Sunny Date: Tue, 20 Dec 2022 23:39:18 +0000 Subject: [PATCH] test: Add tests for GC ignoring lock files Add storage tests to ensure garbage collection ignores lock files for GC count and deletes them eventually. Signed-off-by: Sunny --- controllers/storage_test.go | 72 ++++++++++++++++++++++++++++++++----- 1 file changed, 63 insertions(+), 9 deletions(-) diff --git a/controllers/storage_test.go b/controllers/storage_test.go index fb5a79cf..a2b227e2 100644 --- a/controllers/storage_test.go +++ b/controllers/storage_test.go @@ -478,6 +478,28 @@ func TestStorage_getGarbageFiles(t *testing.T) { path.Join(artifactFolder, "artifact3.tar.gz"), }, }, + { + name: "delete files based on maxItemsToBeRetained, ignore lock files", + artifactPaths: []string{ + path.Join(artifactFolder, "artifact1.tar.gz"), + path.Join(artifactFolder, "artifact1.tar.gz.lock"), + path.Join(artifactFolder, "artifact2.tar.gz"), + path.Join(artifactFolder, "artifact2.tar.gz.lock"), + path.Join(artifactFolder, "artifact3.tar.gz"), + path.Join(artifactFolder, "artifact3.tar.gz.lock"), + path.Join(artifactFolder, "artifact4.tar.gz"), + path.Join(artifactFolder, "artifact5.tar.gz"), + }, + createPause: time.Millisecond * 10, + ttl: time.Minute * 2, + totalCountLimit: 10, + maxItemsToBeRetained: 2, + wantDeleted: []string{ + path.Join(artifactFolder, "artifact1.tar.gz"), + path.Join(artifactFolder, "artifact2.tar.gz"), + path.Join(artifactFolder, "artifact3.tar.gz"), + }, + }, { name: "delete files based on ttl", artifactPaths: []string{ @@ -496,6 +518,26 @@ func TestStorage_getGarbageFiles(t *testing.T) { path.Join(artifactFolder, "artifact2.tar.gz"), }, }, + { + name: "delete files based on ttl, ignore lock files", + artifactPaths: []string{ + path.Join(artifactFolder, "artifact1.tar.gz"), + path.Join(artifactFolder, "artifact1.tar.gz.lock"), + path.Join(artifactFolder, "artifact2.tar.gz"), + path.Join(artifactFolder, "artifact2.tar.gz.lock"), + path.Join(artifactFolder, "artifact3.tar.gz"), + path.Join(artifactFolder, "artifact4.tar.gz"), + path.Join(artifactFolder, "artifact5.tar.gz"), + }, + createPause: time.Second * 1, + ttl: time.Second*3 + time.Millisecond*500, + totalCountLimit: 10, + maxItemsToBeRetained: 4, + wantDeleted: []string{ + path.Join(artifactFolder, "artifact1.tar.gz"), + path.Join(artifactFolder, "artifact2.tar.gz"), + }, + }, { name: "delete files based on ttl and maxItemsToBeRetained", artifactPaths: []string{ @@ -580,6 +622,7 @@ func TestStorage_GarbageCollect(t *testing.T) { tests := []struct { name string artifactPaths []string + wantCollected []string wantDeleted []string wantErr string ctxTimeout time.Duration @@ -588,14 +631,22 @@ func TestStorage_GarbageCollect(t *testing.T) { name: "garbage collects", artifactPaths: []string{ path.Join(artifactFolder, "artifact1.tar.gz"), + path.Join(artifactFolder, "artifact1.tar.gz.lock"), path.Join(artifactFolder, "artifact2.tar.gz"), + path.Join(artifactFolder, "artifact2.tar.gz.lock"), path.Join(artifactFolder, "artifact3.tar.gz"), path.Join(artifactFolder, "artifact4.tar.gz"), }, - wantDeleted: []string{ + wantCollected: []string{ path.Join(artifactFolder, "artifact1.tar.gz"), path.Join(artifactFolder, "artifact2.tar.gz"), }, + wantDeleted: []string{ + path.Join(artifactFolder, "artifact1.tar.gz"), + path.Join(artifactFolder, "artifact1.tar.gz.lock"), + path.Join(artifactFolder, "artifact2.tar.gz"), + path.Join(artifactFolder, "artifact2.tar.gz.lock"), + }, ctxTimeout: time.Second * 1, }, { @@ -632,29 +683,32 @@ func TestStorage_GarbageCollect(t *testing.T) { } } - deletedPaths, err := s.GarbageCollect(context.TODO(), artifact, tt.ctxTimeout) + collectedPaths, err := s.GarbageCollect(context.TODO(), artifact, tt.ctxTimeout) if tt.wantErr == "" { g.Expect(err).ToNot(HaveOccurred(), "failed to collect garbage files") } else { g.Expect(err).To(HaveOccurred()) g.Expect(err.Error()).To(ContainSubstring(tt.wantErr)) } - if len(tt.wantDeleted) > 0 { - g.Expect(len(tt.wantDeleted)).To(Equal(len(deletedPaths))) - for _, wantDeletedPath := range tt.wantDeleted { + if len(tt.wantCollected) > 0 { + g.Expect(len(tt.wantCollected)).To(Equal(len(collectedPaths))) + for _, wantCollectedPath := range tt.wantCollected { present := false - for _, deletedPath := range deletedPaths { - if strings.Contains(deletedPath, wantDeletedPath) { - g.Expect(deletedPath).ToNot(BeAnExistingFile()) + for _, collectedPath := range collectedPaths { + if strings.Contains(collectedPath, wantCollectedPath) { + g.Expect(collectedPath).ToNot(BeAnExistingFile()) present = true break } } if present == false { - g.Fail(fmt.Sprintf("expected file to be deleted, still exists: %s", wantDeletedPath)) + g.Fail(fmt.Sprintf("expected file to be garbage collected, still exists: %s", wantCollectedPath)) } } } + for _, delFile := range tt.wantDeleted { + g.Expect(filepath.Join(dir, delFile)).ToNot(BeAnExistingFile()) + } }) } }