github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbfs/search/indexed_tlf_db_test.go (about) 1 // Copyright 2019 Keybase Inc. All rights reserved. 2 // Use of this source code is governed by a BSD 3 // license that can be found in the LICENSE file. 4 5 package search 6 7 import ( 8 "os" 9 "path/filepath" 10 "testing" 11 12 "github.com/keybase/client/go/kbfs/kbfsmd" 13 "github.com/keybase/client/go/kbfs/libkbfs" 14 "github.com/keybase/client/go/kbfs/tlf" 15 "github.com/stretchr/testify/require" 16 "github.com/syndtr/goleveldb/leveldb/storage" 17 "golang.org/x/net/context" 18 ) 19 20 func newIndexedTlfDbForTestWithStorage( 21 t *testing.T, tlfS storage.Storage) *IndexedTlfDb { 22 config := libkbfs.MakeTestConfigOrBust(t, "user1") 23 db, err := newIndexedTlfDbFromStorage(config, tlfS) 24 require.NoError(t, err) 25 return db 26 } 27 28 func newIndexedTlfDbForTest(t *testing.T) ( 29 *IndexedTlfDb, string) { 30 // Use a disk-based level, instead of memory storage, because we 31 // want to simulate a restart and memory storages can't be reused. 32 tempdir, err := os.MkdirTemp(os.TempDir(), "indexed_tlfs_db") 33 require.NoError(t, err) 34 tlfS, err := storage.OpenFile(filepath.Join(tempdir, "tlfs"), false) 35 require.NoError(t, err) 36 37 db := newIndexedTlfDbForTestWithStorage(t, tlfS) 38 return db, tempdir 39 } 40 41 func shutdownIndexedTlfDbTest(db *IndexedTlfDb, tempdir string) { 42 db.Shutdown(context.Background()) 43 os.RemoveAll(tempdir) 44 } 45 46 func TestIndexedTlfDbCreate(t *testing.T) { 47 config := libkbfs.MakeTestConfigOrBust(t, "user1") 48 defer func() { 49 err := config.Shutdown(context.Background()) 50 require.NoError(t, err) 51 }() 52 53 tempdir, err := os.MkdirTemp(os.TempDir(), "indexed_tlfs_db") 54 require.NoError(t, err) 55 db, err := newIndexedTlfDb(config, tempdir) 56 require.NoError(t, err) 57 shutdownIndexedTlfDbTest(db, tempdir) 58 } 59 60 func TestIndexedTlfDb(t *testing.T) { 61 t.Skip() // TRIAGE-1674 62 t.Parallel() 63 t.Log("Test that indexed TLF db Put and Get operations work.") 64 db, tempdir := newIndexedTlfDbForTest(t) 65 defer func() { 66 shutdownIndexedTlfDbTest(db, tempdir) 67 }() 68 69 ctx := context.Background() 70 tlfID1 := tlf.FakeID(1, tlf.Private) 71 ir1 := kbfsmd.Revision(50) 72 sr1 := kbfsmd.RevisionUninitialized 73 74 t.Log("Put TLF MD into the db.") 75 _, _, err := db.Get(ctx, tlfID1) 76 require.Error(t, err) // not in db yet 77 err = db.Put(ctx, tlfID1, ir1, sr1) 78 require.NoError(t, err) 79 80 t.Log("Get TLF MD from the db.") 81 getIR1, getSR1, err := db.Get(ctx, tlfID1) 82 require.NoError(t, err) 83 checkWrite := func( 84 expectedIR, ir, expectedSR, sr kbfsmd.Revision) { 85 require.Equal(t, expectedIR, ir) 86 require.Equal(t, expectedSR, sr) 87 } 88 checkWrite(ir1, getIR1, sr1, getSR1) 89 90 t.Log("A second entry.") 91 tlfID2 := tlf.FakeID(2, tlf.Private) 92 ir2 := kbfsmd.Revision(500) 93 sr2 := kbfsmd.Revision(600) 94 95 err = db.Put(ctx, tlfID2, ir2, sr2) 96 require.NoError(t, err) 97 getIR2, getSR2, err := db.Get(ctx, tlfID2) 98 require.NoError(t, err) 99 checkWrite(ir2, getIR2, sr2, getSR2) 100 101 t.Log("Override the first block with new start revision") 102 sr1 = kbfsmd.Revision(60) 103 err = db.Put(ctx, tlfID1, ir1, sr1) 104 require.NoError(t, err) 105 getIR1, getSR1, err = db.Get(ctx, tlfID1) 106 require.NoError(t, err) 107 checkWrite(ir1, getIR1, sr1, getSR1) 108 109 t.Log("Restart the db and check the MD") 110 db.Shutdown(ctx) 111 tlfS, err := storage.OpenFile(filepath.Join(tempdir, "tlfs"), false) 112 require.NoError(t, err) 113 db = newIndexedTlfDbForTestWithStorage(t, tlfS) 114 getIR1, getSR1, err = db.Get(ctx, tlfID1) 115 require.NoError(t, err) 116 checkWrite(ir1, getIR1, sr1, getSR1) 117 getIR2, getSR2, err = db.Get(ctx, tlfID2) 118 require.NoError(t, err) 119 checkWrite(ir2, getIR2, sr2, getSR2) 120 }