github.com/MetalBlockchain/metalgo@v1.11.9/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/MetalBlockchain/metalgo/database" 14 "github.com/MetalBlockchain/metalgo/utils/logging" 15 ) 16 17 func TestInterface(t *testing.T) { 18 for name, test := range database.Tests { 19 t.Run(name, func(t *testing.T) { 20 folder := t.TempDir() 21 db, err := New(folder, nil, logging.NoLog{}, prometheus.NewRegistry()) 22 require.NoError(t, err) 23 24 test(t, db) 25 26 _ = db.Close() 27 }) 28 } 29 } 30 31 func newDB(t testing.TB) database.Database { 32 folder := t.TempDir() 33 db, err := New(folder, nil, logging.NoLog{}, prometheus.NewRegistry()) 34 require.NoError(t, err) 35 return db 36 } 37 38 func FuzzKeyValue(f *testing.F) { 39 db := newDB(f) 40 defer db.Close() 41 42 database.FuzzKeyValue(f, db) 43 } 44 45 func FuzzNewIteratorWithPrefix(f *testing.F) { 46 db := newDB(f) 47 defer db.Close() 48 49 database.FuzzNewIteratorWithPrefix(f, db) 50 } 51 52 func FuzzNewIteratorWithStartAndPrefix(f *testing.F) { 53 db := newDB(f) 54 defer db.Close() 55 56 database.FuzzNewIteratorWithStartAndPrefix(f, db) 57 } 58 59 func BenchmarkInterface(b *testing.B) { 60 for _, size := range database.BenchmarkSizes { 61 keys, values := database.SetupBenchmark(b, size[0], size[1], size[2]) 62 for name, bench := range database.Benchmarks { 63 b.Run(fmt.Sprintf("leveldb_%d_pairs_%d_keys_%d_values_%s", size[0], size[1], size[2], name), func(b *testing.B) { 64 db := newDB(b) 65 66 bench(b, db, keys, values) 67 68 // The database may have been closed by the test, so we don't care if it 69 // errors here. 70 _ = db.Close() 71 }) 72 } 73 } 74 }