2016-01-17 13:13:19 -08:00
|
|
|
package db
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"testing"
|
|
|
|
|
2019-05-06 13:42:21 +04:00
|
|
|
"github.com/stretchr/testify/require"
|
2018-08-29 05:44:55 +01:00
|
|
|
"github.com/syndtr/goleveldb/leveldb/opt"
|
|
|
|
|
2018-07-01 22:36:49 -04:00
|
|
|
cmn "github.com/tendermint/tendermint/libs/common"
|
2016-01-17 13:13:19 -08:00
|
|
|
)
|
|
|
|
|
2019-05-06 13:42:21 +04:00
|
|
|
func TestGoLevelDBNewGoLevelDB(t *testing.T) {
|
2018-08-29 05:44:55 +01:00
|
|
|
name := fmt.Sprintf("test_%x", cmn.RandStr(12))
|
2019-05-06 13:42:21 +04:00
|
|
|
defer cleanupDBDir("", name)
|
|
|
|
|
|
|
|
// Test we can't open the db twice for writing
|
|
|
|
wr1, err := NewGoLevelDB(name, "")
|
2018-08-29 05:44:55 +01:00
|
|
|
require.Nil(t, err)
|
|
|
|
_, err = NewGoLevelDB(name, "")
|
|
|
|
require.NotNil(t, err)
|
2019-05-06 13:42:21 +04:00
|
|
|
wr1.Close() // Close the db to release the lock
|
2018-08-29 05:44:55 +01:00
|
|
|
|
2019-05-06 13:42:21 +04:00
|
|
|
// Test we can open the db twice for reading only
|
2018-08-29 05:44:55 +01:00
|
|
|
ro1, err := NewGoLevelDBWithOpts(name, "", &opt.Options{ReadOnly: true})
|
|
|
|
defer ro1.Close()
|
|
|
|
require.Nil(t, err)
|
|
|
|
ro2, err := NewGoLevelDBWithOpts(name, "", &opt.Options{ReadOnly: true})
|
|
|
|
defer ro2.Close()
|
|
|
|
require.Nil(t, err)
|
|
|
|
}
|
|
|
|
|
2019-05-06 13:42:21 +04:00
|
|
|
func BenchmarkGoLevelDBRandomReadsWrites(b *testing.B) {
|
|
|
|
name := fmt.Sprintf("test_%x", cmn.RandStr(12))
|
|
|
|
db, err := NewGoLevelDB(name, "")
|
2016-01-17 13:13:19 -08:00
|
|
|
if err != nil {
|
2019-05-06 13:42:21 +04:00
|
|
|
b.Fatal(err)
|
2016-01-17 13:13:19 -08:00
|
|
|
}
|
2019-05-06 13:42:21 +04:00
|
|
|
defer func() {
|
|
|
|
db.Close()
|
|
|
|
cleanupDBDir("", name)
|
|
|
|
}()
|
2016-01-17 13:13:19 -08:00
|
|
|
|
2019-05-06 13:42:21 +04:00
|
|
|
benchmarkRandomReadsWrites(b, db)
|
2016-01-17 13:13:19 -08:00
|
|
|
}
|