OSDN Git Service

Paging (#234)
[bytom/vapor.git] / database / leveldb / db_test.go
diff --git a/database/leveldb/db_test.go b/database/leveldb/db_test.go
new file mode 100644 (file)
index 0000000..ccd37ed
--- /dev/null
@@ -0,0 +1,92 @@
+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())
+}