+package leveldb
+
+import (
+ "fmt"
+ "io/ioutil"
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func newTempDB(t *testing.T, backend string) (db DB, dbDir string) {
+ dirname, err := ioutil.TempDir("", "db_common_test")
+ require.Nil(t, err)
+ return NewDB("testdb", backend, dirname), dirname
+}
+
+func TestDBIteratorSingleKey(t *testing.T) {
+ for backend := range backends {
+ t.Run(fmt.Sprintf("Backend %s", backend), func(t *testing.T) {
+ db, dir := newTempDB(t, backend)
+ defer os.RemoveAll(dir)
+
+ db.Set([]byte("1"), []byte("value_1"))
+ itr := db.IteratorPrefixWithStart(nil, nil)
+ require.Equal(t, []byte(""), itr.Key())
+ require.Equal(t, true, itr.Next())
+ require.Equal(t, []byte("1"), itr.Key())
+ })
+ }
+}
+
+func TestDBIteratorTwoKeys(t *testing.T) {
+ for backend := range backends {
+ t.Run(fmt.Sprintf("Backend %s", backend), func(t *testing.T) {
+ db, dir := newTempDB(t, backend)
+ defer os.RemoveAll(dir)
+
+ db.SetSync([]byte("1"), []byte("value_1"))
+ db.SetSync([]byte("2"), []byte("value_1"))
+
+ itr := db.IteratorPrefixWithStart(nil, []byte("1"))
+
+ require.Equal(t, []byte("1"), itr.Key())
+
+ require.Equal(t, true, itr.Next())
+ itr = db.IteratorPrefixWithStart(nil, []byte("2"))
+
+ require.Equal(t, false, itr.Next())
+ })
+ }
+}
+
+func TestDBIterator(t *testing.T) {
+ dirname, err := ioutil.TempDir("", "db_common_test")
+ require.Nil(t, err)
+
+ db, err := NewGoLevelDB("testdb", dirname)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ defer func() {
+ db.Close()
+ os.RemoveAll(dirname)
+ }()
+
+ db.SetSync([]byte("aaa1"), []byte("value_1"))
+ db.SetSync([]byte("aaa22"), []byte("value_2"))
+ db.SetSync([]byte("bbb22"), []byte("value_3"))
+
+ itr := db.IteratorPrefixWithStart([]byte("aaa"), []byte("aaa1"))
+ defer itr.Release()
+
+ require.Equal(t, true, itr.Next())
+ require.Equal(t, []byte("aaa22"), itr.Key())
+
+ require.Equal(t, false, itr.Next())
+
+ itr = db.IteratorPrefixWithStart([]byte("aaa"), nil)
+
+ require.Equal(t, true, itr.Next())
+ require.Equal(t, []byte("aaa1"), itr.Key())
+
+ require.Equal(t, true, itr.Next())
+ require.Equal(t, []byte("aaa22"), itr.Key())
+
+ require.Equal(t, false, itr.Next())
+
+ itr = db.IteratorPrefixWithStart([]byte("bbb"), []byte("aaa1"))
+ require.Equal(t, false, itr.Next())
+}