github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/db/goleveldb/go_level_db_test.go (about)

     1  package goleveldb
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/gnolang/gno/tm2/pkg/db"
     8  	"github.com/gnolang/gno/tm2/pkg/db/internal"
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  	"github.com/syndtr/goleveldb/leveldb/opt"
    12  )
    13  
    14  func TestGoLevelDBNewGoLevelDB(t *testing.T) {
    15  	t.Parallel()
    16  
    17  	dir := t.TempDir()
    18  	name := fmt.Sprintf("test_%x", internal.RandStr(12))
    19  
    20  	// Test we can't open the db twice for writing
    21  	wr1, err := NewGoLevelDB(name, dir)
    22  	require.Nil(t, err)
    23  	_, err = NewGoLevelDB(name, dir)
    24  	require.NotNil(t, err)
    25  	wr1.Close() // Close the db to release the lock
    26  
    27  	// Test we can open the db twice for reading only
    28  	ro1, err := NewGoLevelDBWithOpts(name, dir, &opt.Options{ReadOnly: true})
    29  	require.Nil(t, err)
    30  	defer ro1.Close()
    31  	ro2, err := NewGoLevelDBWithOpts(name, dir, &opt.Options{ReadOnly: true})
    32  	require.Nil(t, err)
    33  	defer ro2.Close()
    34  }
    35  
    36  func TestGoLevelDBBackend(t *testing.T) {
    37  	t.Parallel()
    38  
    39  	name := fmt.Sprintf("test_%x", internal.RandStr(12))
    40  	db, err := db.NewDB(name, db.GoLevelDBBackend, t.TempDir())
    41  	require.NoError(t, err)
    42  
    43  	_, ok := db.(*GoLevelDB)
    44  	assert.True(t, ok)
    45  }
    46  
    47  func BenchmarkGoLevelDBRandomReadsWrites(b *testing.B) {
    48  	name := fmt.Sprintf("test_%x", internal.RandStr(12))
    49  	db, err := NewGoLevelDB(name, b.TempDir())
    50  	if err != nil {
    51  		b.Fatal(err)
    52  	}
    53  	defer db.Close()
    54  
    55  	internal.BenchmarkRandomReadsWrites(b, db)
    56  }