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  }