Co-authored-by: cool-developer <51834436+cool-develope@users.noreply.github.com> Co-authored-by: yihuang <huang@crypto.com>
90 lines
2.2 KiB
Go
90 lines
2.2 KiB
Go
package sqlite
|
|
|
|
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) {
|
|
return New(dir)
|
|
},
|
|
EmptyBatchSize: 0,
|
|
}
|
|
suite.Run(t, s)
|
|
}
|
|
|
|
func TestDatabase_ReverseIterator(t *testing.T) {
|
|
db, err := New(t.TempDir())
|
|
require.NoError(t, err)
|
|
defer db.Close()
|
|
|
|
cs := new(store.Changeset)
|
|
for i := 0; i < 100; i++ {
|
|
key := fmt.Sprintf("key%03d", i) // key000, key001, ..., key099
|
|
val := fmt.Sprintf("val%03d", i) // val000, val001, ..., val099
|
|
|
|
cs.AddKVPair(store.KVPair{StoreKey: storeKey1, Key: []byte(key), Value: []byte(val)})
|
|
}
|
|
|
|
require.NoError(t, db.ApplyChangeset(1, cs))
|
|
|
|
// 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.Next())
|
|
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.Next())
|
|
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)
|
|
}
|