github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/storage/stores/indexshipper/table_client_test.go (about)

     1  package indexshipper_test
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"path"
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/grafana/loki/pkg/storage"
    12  	"github.com/grafana/loki/pkg/storage/chunk/client/local"
    13  	"github.com/grafana/loki/pkg/storage/stores/indexshipper"
    14  	"github.com/grafana/loki/pkg/storage/stores/series/index"
    15  )
    16  
    17  func TestBoltDBShipperTableClient(t *testing.T) {
    18  	tempDir := t.TempDir()
    19  
    20  	cm := storage.NewClientMetrics()
    21  	objectClient, err := storage.NewObjectClient("filesystem", storage.Config{FSConfig: local.FSConfig{Directory: tempDir}}, cm)
    22  	require.NoError(t, err)
    23  
    24  	// create a couple of folders with files
    25  	foldersWithFiles := map[string][]string{
    26  		"table1": {"file1", "file2", "file3"},
    27  		"table2": {"file3", "file4"},
    28  		"table3": {"file5", "file6"},
    29  	}
    30  
    31  	for folder, files := range foldersWithFiles {
    32  		for _, fileName := range files {
    33  			// we will use "index/" prefix for all the objects
    34  			err := objectClient.PutObject(context.Background(), path.Join("index", folder, fileName), bytes.NewReader([]byte{}))
    35  			require.NoError(t, err)
    36  		}
    37  	}
    38  
    39  	tableClient := indexshipper.NewTableClient(objectClient, "index/")
    40  
    41  	// check list of tables returns all the folders/tables created above
    42  	checkExpectedTables(t, tableClient, foldersWithFiles)
    43  
    44  	// let us delete table1 and see if it goes away from the list of tables
    45  	err = tableClient.DeleteTable(context.Background(), "table1")
    46  	require.NoError(t, err)
    47  
    48  	delete(foldersWithFiles, "table1")
    49  	checkExpectedTables(t, tableClient, foldersWithFiles)
    50  }
    51  
    52  func checkExpectedTables(t *testing.T, tableClient index.TableClient, expectedTables map[string][]string) {
    53  	actualTables, err := tableClient.ListTables(context.Background())
    54  	require.NoError(t, err)
    55  
    56  	require.Len(t, actualTables, len(expectedTables))
    57  
    58  	for _, table := range actualTables {
    59  		_, ok := expectedTables[table]
    60  		require.True(t, ok)
    61  	}
    62  }