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  }