github.com/ava-labs/avalanchego@v1.11.11/database/leveldb/db_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package leveldb 5 6 import ( 7 "fmt" 8 "testing" 9 10 "github.com/prometheus/client_golang/prometheus" 11 "github.com/stretchr/testify/require" 12 13 "github.com/ava-labs/avalanchego/database" 14 "github.com/ava-labs/avalanchego/database/dbtest" 15 "github.com/ava-labs/avalanchego/utils/logging" 16 ) 17 18 func TestInterface(t *testing.T) { 19 for name, test := range dbtest.Tests { 20 t.Run(name, func(t *testing.T) { 21 folder := t.TempDir() 22 db, err := New(folder, nil, logging.NoLog{}, prometheus.NewRegistry()) 23 require.NoError(t, err) 24 25 test(t, db) 26 27 _ = db.Close() 28 }) 29 } 30 } 31 32 func newDB(t testing.TB) database.Database { 33 folder := t.TempDir() 34 db, err := New(folder, nil, logging.NoLog{}, prometheus.NewRegistry()) 35 require.NoError(t, err) 36 return db 37 } 38 39 func FuzzKeyValue(f *testing.F) { 40 db := newDB(f) 41 defer db.Close() 42 43 dbtest.FuzzKeyValue(f, db) 44 } 45 46 func FuzzNewIteratorWithPrefix(f *testing.F) { 47 db := newDB(f) 48 defer db.Close() 49 50 dbtest.FuzzNewIteratorWithPrefix(f, db) 51 } 52 53 func FuzzNewIteratorWithStartAndPrefix(f *testing.F) { 54 db := newDB(f) 55 defer db.Close() 56 57 dbtest.FuzzNewIteratorWithStartAndPrefix(f, db) 58 } 59 60 func BenchmarkInterface(b *testing.B) { 61 for _, size := range dbtest.BenchmarkSizes { 62 keys, values := dbtest.SetupBenchmark(b, size[0], size[1], size[2]) 63 for name, bench := range dbtest.Benchmarks { 64 b.Run(fmt.Sprintf("leveldb_%d_pairs_%d_keys_%d_values_%s", size[0], size[1], size[2], name), func(b *testing.B) { 65 db := newDB(b) 66 67 bench(b, db, keys, values) 68 69 // The database may have been closed by the test, so we don't care if it 70 // errors here. 71 _ = db.Close() 72 }) 73 } 74 } 75 }