github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/kbfs/libfs/leveldb_storage_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 libfs 6 7 import ( 8 "testing" 9 10 "github.com/keybase/client/go/kbfs/data" 11 "github.com/keybase/client/go/kbfs/libkbfs" 12 "github.com/keybase/client/go/kbfs/tlf" 13 "github.com/keybase/client/go/kbfs/tlfhandle" 14 "github.com/keybase/client/go/protocol/keybase1" 15 "github.com/stretchr/testify/require" 16 "github.com/syndtr/goleveldb/leveldb" 17 ) 18 19 func TestLevelDBWithFS(t *testing.T) { 20 ctx, _, fs := makeFS(t, "") 21 defer libkbfs.CheckConfigAndShutdown(ctx, t, fs.config) 22 23 t.Log("Open a leveldb using a KBFS billy filesystem") 24 s, err := OpenLevelDBStorage(fs, false) 25 require.NoError(t, err) 26 sNeedsClose := true 27 defer func() { 28 if sNeedsClose { 29 err := s.Close() 30 require.NoError(t, err) 31 } 32 }() 33 db, err := leveldb.Open(s, nil) 34 require.NoError(t, err) 35 dbNeedsClose := true 36 defer func() { 37 if dbNeedsClose { 38 err := db.Close() 39 require.NoError(t, err) 40 } 41 }() 42 43 t.Log("Put some stuff into the db") 44 key1 := []byte("key1") 45 val1 := []byte("val1") 46 key2 := []byte("key2") 47 val2 := []byte("val2") 48 err = db.Put(key1, val1, nil) 49 require.NoError(t, err) 50 err = db.Put(key2, val2, nil) 51 require.NoError(t, err) 52 53 t.Log("Close the db to release the lock") 54 err = db.Close() 55 require.NoError(t, err) 56 dbNeedsClose = false 57 err = s.Close() 58 require.NoError(t, err) 59 sNeedsClose = false 60 61 t.Log("Read from another device") 62 config2 := libkbfs.ConfigAsUser(fs.config.(*libkbfs.ConfigLocal), "user1") 63 defer libkbfs.CheckConfigAndShutdown(ctx, t, config2) 64 h, err := tlfhandle.ParseHandle( 65 ctx, config2.KBPKI(), config2.MDOps(), nil, "user1", tlf.Private) 66 require.NoError(t, err) 67 fs2, err := NewFS( 68 ctx, config2, h, data.MasterBranch, "", "", keybase1.MDPriorityNormal) 69 require.NoError(t, err) 70 s2, err := OpenLevelDBStorage(fs2, false) 71 require.NoError(t, err) 72 defer func() { 73 err := s2.Close() 74 require.NoError(t, err) 75 }() 76 db2, err := leveldb.Open(s2, nil) 77 require.NoError(t, err) 78 defer func() { 79 err := db2.Close() 80 require.NoError(t, err) 81 }() 82 83 gotVal1, err := db2.Get(key1, nil) 84 require.NoError(t, err) 85 require.Equal(t, val1, gotVal1) 86 gotVal2, err := db2.Get(key2, nil) 87 require.NoError(t, err) 88 require.Equal(t, val2, gotVal2) 89 }