github.com/treeverse/lakefs@v1.24.1-0.20240520134607-95648127bfb0/pkg/graveler/retention/garbage_collection_manager_test.go (about) 1 package retention_test 2 3 import ( 4 "bufio" 5 "context" 6 "fmt" 7 "os" 8 "testing" 9 "time" 10 11 "github.com/google/uuid" 12 "github.com/stretchr/testify/require" 13 "github.com/treeverse/lakefs/pkg/block" 14 "github.com/treeverse/lakefs/pkg/block/mem" 15 "github.com/treeverse/lakefs/pkg/graveler" 16 "github.com/treeverse/lakefs/pkg/graveler/retention" 17 "github.com/treeverse/lakefs/pkg/graveler/testutil" 18 ) 19 20 func TestGarbageCollectionManager_GetUncommittedLocation(t *testing.T) { 21 blockAdapter := mem.New(context.Background()) 22 refMgr := &testutil.RefsFake{} 23 const prefix = "test_prefix" 24 const runID = "my_test_runID" 25 ns := graveler.StorageNamespace("mem://test-namespace/my-repo") 26 path := fmt.Sprintf("%s/%s/retention/gc/uncommitted/%s/uncommitted/", ns, prefix, runID) 27 gc := retention.NewGarbageCollectionManager(blockAdapter, refMgr, prefix) 28 location, err := gc.GetUncommittedLocation(runID, ns) 29 require.NoError(t, err) 30 require.Equal(t, path, location) 31 } 32 33 func createTestFile(t *testing.T, filename, testLine string, count int) { 34 t.Helper() 35 fd, err := os.Create(filename) 36 require.NoError(t, err) 37 defer func() { _ = fd.Close() }() 38 for i := 0; i < count; i++ { 39 _, err := fd.WriteString(fmt.Sprintf("%s_%d\n", testLine, i)) 40 require.NoError(t, err) 41 } 42 } 43 44 func TestGarbageCollectionManager_SaveGarbageCollectionUncommitted(t *testing.T) { 45 ctx := context.Background() 46 blockAdapter := mem.New(context.Background()) 47 refMgr := &testutil.RefsFake{} 48 const prefix = "test_prefix" 49 const runID = "my_test_runID" 50 const repoID = "my-repo" 51 ns := graveler.StorageNamespace("mem://test-namespace/" + repoID) 52 repositoryRec := graveler.RepositoryRecord{ 53 RepositoryID: repoID, 54 Repository: &graveler.Repository{ 55 StorageNamespace: ns, 56 CreationDate: time.Now(), 57 DefaultBranchID: "", 58 State: graveler.RepositoryState_ACTIVE, 59 InstanceUID: uuid.New().String(), 60 }, 61 } 62 gc := retention.NewGarbageCollectionManager(blockAdapter, refMgr, prefix) 63 location, err := gc.GetUncommittedLocation(runID, ns) 64 require.NoError(t, err) 65 filename := "uncommitted_test_file" 66 testLine := "TestLine" 67 lineCount := 5 68 createTestFile(t, filename, testLine, lineCount) 69 defer os.Remove(filename) 70 err = gc.SaveGarbageCollectionUncommitted(ctx, &repositoryRec, filename, runID) 71 require.NoError(t, err) 72 reader, err := blockAdapter.Get(ctx, block.ObjectPointer{ 73 StorageNamespace: "", 74 Identifier: fmt.Sprintf("%s%s", location, filename), 75 IdentifierType: block.IdentifierTypeFull, 76 }, 0) 77 require.NoError(t, err) 78 fileScanner := bufio.NewScanner(reader) 79 line := 0 80 for fileScanner.Scan() { 81 require.Equal(t, fmt.Sprintf("%s_%d", testLine, line), fileScanner.Text()) 82 line += 1 83 } 84 require.Equal(t, lineCount, line) 85 }