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 }