cosmos-sdk/store/storage/rocksdb/db_test.go
Aleksandr Bezobchuk 20b1da7a2e
refactor(store/v2): Use Core Iterator (#18957)
Co-authored-by: marbar3778 <marbar3778@yahoo.com>
Co-authored-by: cool-developer <51834436+cool-develope@users.noreply.github.com>
2024-01-08 19:26:10 +00:00

92 lines
2.2 KiB
Go

//go:build rocksdb
// +build rocksdb
package rocksdb
import (
"fmt"
"testing"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
"cosmossdk.io/store/v2"
"cosmossdk.io/store/v2/storage"
)
const (
storeKey1 = "store1"
)
func TestStorageTestSuite(t *testing.T) {
s := &storage.StorageTestSuite{
NewDB: func(dir string) (store.VersionedDatabase, error) {
db, err := New(dir)
return storage.NewStorageStore(db), err
},
EmptyBatchSize: 12,
}
suite.Run(t, s)
}
func TestDatabase_ReverseIterator(t *testing.T) {
db, err := New(t.TempDir())
require.NoError(t, err)
defer db.Close()
batch := NewBatch(db, 1)
for i := 0; i < 100; i++ {
key := fmt.Sprintf("key%03d", i) // key000, key001, ..., key099
val := fmt.Sprintf("val%03d", i) // val000, val001, ..., val099
require.NoError(t, batch.Set(storeKey1, []byte(key), []byte(val)))
}
require.NoError(t, batch.Write())
// reverse iterator without an end key
iter, err := db.ReverseIterator(storeKey1, 1, []byte("key000"), nil)
require.NoError(t, err)
defer iter.Close()
i, count := 99, 0
for ; iter.Valid(); iter.Next() {
require.Equal(t, []byte(fmt.Sprintf("key%03d", i)), iter.Key())
require.Equal(t, []byte(fmt.Sprintf("val%03d", i)), iter.Value())
i--
count++
}
require.Equal(t, 100, count)
require.NoError(t, iter.Error())
// seek past domain, which should make the iterator invalid and produce an error
require.False(t, iter.Valid())
// reverse iterator with with a start and end domain
iter2, err := db.ReverseIterator(storeKey1, 1, []byte("key010"), []byte("key019"))
require.NoError(t, err)
defer iter2.Close()
i, count = 18, 0
for ; iter2.Valid(); iter2.Next() {
require.Equal(t, []byte(fmt.Sprintf("key%03d", i)), iter2.Key())
require.Equal(t, []byte(fmt.Sprintf("val%03d", i)), iter2.Value())
i--
count++
}
require.Equal(t, 9, count)
require.NoError(t, iter2.Error())
// seek past domain, which should make the iterator invalid and produce an error
require.False(t, iter2.Valid())
// start must be <= end
iter3, err := db.ReverseIterator(storeKey1, 1, []byte("key020"), []byte("key019"))
require.Error(t, err)
require.Nil(t, iter3)
}