github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/utils/dbutil/compactdb/key_test.go (about) 1 package compactdb 2 3 import ( 4 "io/ioutil" 5 "path" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 "github.com/syndtr/goleveldb/leveldb/opt" 10 "github.com/unicornultrafoundation/go-helios/u2udb" 11 "github.com/unicornultrafoundation/go-helios/u2udb/leveldb" 12 "github.com/unicornultrafoundation/go-helios/u2udb/memorydb" 13 "github.com/unicornultrafoundation/go-helios/u2udb/pebble" 14 ) 15 16 func tmpDir(name string) string { 17 dir, err := ioutil.TempDir("", name) 18 if err != nil { 19 panic(err) 20 } 21 return dir 22 } 23 24 func TestLastKey(t *testing.T) { 25 testLastKey(t, memorydb.New()) 26 dir := tmpDir("test-last-key") 27 ldb, err := leveldb.New(path.Join(dir, "ldb"), 16*opt.MiB, 64, nil, nil) 28 require.NoError(t, err) 29 defer ldb.Close() 30 testLastKey(t, ldb) 31 pbl, err := pebble.New(path.Join(dir, "pbl"), 16*opt.MiB, 64, nil, nil) 32 require.NoError(t, err) 33 defer pbl.Close() 34 testLastKey(t, pbl) 35 } 36 37 func testLastKey(t *testing.T, db u2udb.Store) { 38 require.Nil(t, lastKey(db)) 39 40 db.Put([]byte{0}, []byte{0}) 41 require.Equal(t, []byte{0}, lastKey(db)) 42 43 db.Put([]byte{1}, []byte{0}) 44 require.Equal(t, []byte{1}, lastKey(db)) 45 46 db.Put([]byte{2}, []byte{0}) 47 require.Equal(t, []byte{2}, lastKey(db)) 48 49 db.Put([]byte{1, 0}, []byte{0}) 50 require.Equal(t, []byte{2}, lastKey(db)) 51 52 db.Put([]byte{3}, []byte{0}) 53 require.Equal(t, []byte{3}, lastKey(db)) 54 55 db.Put([]byte{3, 0}, []byte{0}) 56 require.Equal(t, []byte{3, 0}, lastKey(db)) 57 58 db.Put([]byte{3, 1}, []byte{0}) 59 require.Equal(t, []byte{3, 1}, lastKey(db)) 60 61 db.Put([]byte{4}, []byte{0}) 62 require.Equal(t, []byte{4}, lastKey(db)) 63 64 db.Put([]byte{4, 0, 0, 0}, []byte{0}) 65 require.Equal(t, []byte{4, 0, 0, 0}, lastKey(db)) 66 67 db.Put([]byte{4, 0, 1, 0}, []byte{0}) 68 require.Equal(t, []byte{4, 0, 1, 0}, lastKey(db)) 69 } 70 71 func TestTrimAfterDiff(t *testing.T) { 72 a, b := trimAfterDiff([]byte{}, []byte{}, 1) 73 require.Equal(t, []byte{}, a) 74 require.Equal(t, []byte{}, b) 75 76 a, b = trimAfterDiff([]byte{1, 2}, []byte{1, 3}, 1) 77 require.Equal(t, []byte{1, 2}, a) 78 require.Equal(t, []byte{1, 3}, b) 79 80 a, b = trimAfterDiff([]byte{1, 2, 4}, []byte{1, 3, 4}, 1) 81 require.Equal(t, []byte{1, 2}, a) 82 require.Equal(t, []byte{1, 3}, b) 83 84 a, b = trimAfterDiff([]byte{1, 2, 4, 5}, []byte{1, 3, 4, 6}, 1) 85 require.Equal(t, []byte{1, 2}, a) 86 require.Equal(t, []byte{1, 3}, b) 87 88 a, b = trimAfterDiff([]byte{1, 2, 4, 5}, []byte{1, 3, 4, 6}, 2) 89 require.Equal(t, []byte{1, 2, 4, 5}, a) 90 require.Equal(t, []byte{1, 3, 4, 6}, b) 91 92 a, b = trimAfterDiff([]byte{1, 2, 4, 5, 7}, []byte{1, 3, 4, 6}, 2) 93 require.Equal(t, []byte{1, 2, 4, 5}, a) 94 require.Equal(t, []byte{1, 3, 4, 6}, b) 95 96 a, b = trimAfterDiff([]byte{1, 2, 4, 5, 7}, []byte{1, 3, 4, 6, 7}, 2) 97 require.Equal(t, []byte{1, 2, 4, 5}, a) 98 require.Equal(t, []byte{1, 3, 4, 6}, b) 99 100 a, b = trimAfterDiff([]byte{1, 2, 4, 5, 7}, []byte{1, 3, 4}, 2) 101 require.Equal(t, []byte{1, 2, 4}, a) 102 require.Equal(t, []byte{1, 3, 4}, b) 103 }