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  }