github.com/MetalBlockchain/metalgo@v1.11.9/database/encdb/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 encdb
     5  
     6  import (
     7  	"fmt"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/MetalBlockchain/metalgo/database"
    13  	"github.com/MetalBlockchain/metalgo/database/memdb"
    14  )
    15  
    16  const testPassword = "lol totally a secure password" //nolint:gosec
    17  
    18  func TestInterface(t *testing.T) {
    19  	for name, test := range database.Tests {
    20  		t.Run(name, func(t *testing.T) {
    21  			unencryptedDB := memdb.New()
    22  			db, err := New([]byte(testPassword), unencryptedDB)
    23  			require.NoError(t, err)
    24  
    25  			test(t, db)
    26  		})
    27  	}
    28  }
    29  
    30  func newDB(t testing.TB) database.Database {
    31  	unencryptedDB := memdb.New()
    32  	db, err := New([]byte(testPassword), unencryptedDB)
    33  	require.NoError(t, err)
    34  	return db
    35  }
    36  
    37  func FuzzKeyValue(f *testing.F) {
    38  	database.FuzzKeyValue(f, newDB(f))
    39  }
    40  
    41  func FuzzNewIteratorWithPrefix(f *testing.F) {
    42  	database.FuzzNewIteratorWithPrefix(f, newDB(f))
    43  }
    44  
    45  func FuzzNewIteratorWithStartAndPrefix(f *testing.F) {
    46  	database.FuzzNewIteratorWithStartAndPrefix(f, newDB(f))
    47  }
    48  
    49  func BenchmarkInterface(b *testing.B) {
    50  	for _, size := range database.BenchmarkSizes {
    51  		keys, values := database.SetupBenchmark(b, size[0], size[1], size[2])
    52  		for name, bench := range database.Benchmarks {
    53  			b.Run(fmt.Sprintf("encdb_%d_pairs_%d_keys_%d_values_%s", size[0], size[1], size[2], name), func(b *testing.B) {
    54  				bench(b, newDB(b), keys, values)
    55  			})
    56  		}
    57  	}
    58  }