OSDN Git Service

Paging (#234)
[bytom/vapor.git] / database / leveldb / db_test.go
1 package leveldb
2
3 import (
4         "fmt"
5         "io/ioutil"
6         "os"
7         "testing"
8
9         "github.com/stretchr/testify/require"
10 )
11
12 func newTempDB(t *testing.T, backend string) (db DB, dbDir string) {
13         dirname, err := ioutil.TempDir("", "db_common_test")
14         require.Nil(t, err)
15         return NewDB("testdb", backend, dirname), dirname
16 }
17
18 func TestDBIteratorSingleKey(t *testing.T) {
19         for backend := range backends {
20                 t.Run(fmt.Sprintf("Backend %s", backend), func(t *testing.T) {
21                         db, dir := newTempDB(t, backend)
22                         defer os.RemoveAll(dir)
23
24                         db.Set([]byte("1"), []byte("value_1"))
25                         itr := db.IteratorPrefixWithStart(nil, nil)
26                         require.Equal(t, []byte(""), itr.Key())
27                         require.Equal(t, true, itr.Next())
28                         require.Equal(t, []byte("1"), itr.Key())
29                 })
30         }
31 }
32
33 func TestDBIteratorTwoKeys(t *testing.T) {
34         for backend := range backends {
35                 t.Run(fmt.Sprintf("Backend %s", backend), func(t *testing.T) {
36                         db, dir := newTempDB(t, backend)
37                         defer os.RemoveAll(dir)
38
39                         db.SetSync([]byte("1"), []byte("value_1"))
40                         db.SetSync([]byte("2"), []byte("value_1"))
41
42                         itr := db.IteratorPrefixWithStart(nil, []byte("1"))
43
44                         require.Equal(t, []byte("1"), itr.Key())
45
46                         require.Equal(t, true, itr.Next())
47                         itr = db.IteratorPrefixWithStart(nil, []byte("2"))
48
49                         require.Equal(t, false, itr.Next())
50                 })
51         }
52 }
53
54 func TestDBIterator(t *testing.T) {
55         dirname, err := ioutil.TempDir("", "db_common_test")
56         require.Nil(t, err)
57
58         db, err := NewGoLevelDB("testdb", dirname)
59         if err != nil {
60                 t.Fatal(err)
61         }
62
63         defer func() {
64                 db.Close()
65                 os.RemoveAll(dirname)
66         }()
67
68         db.SetSync([]byte("aaa1"), []byte("value_1"))
69         db.SetSync([]byte("aaa22"), []byte("value_2"))
70         db.SetSync([]byte("bbb22"), []byte("value_3"))
71
72         itr := db.IteratorPrefixWithStart([]byte("aaa"), []byte("aaa1"))
73         defer itr.Release()
74
75         require.Equal(t, true, itr.Next())
76         require.Equal(t, []byte("aaa22"), itr.Key())
77
78         require.Equal(t, false, itr.Next())
79
80         itr = db.IteratorPrefixWithStart([]byte("aaa"), nil)
81
82         require.Equal(t, true, itr.Next())
83         require.Equal(t, []byte("aaa1"), itr.Key())
84
85         require.Equal(t, true, itr.Next())
86         require.Equal(t, []byte("aaa22"), itr.Key())
87
88         require.Equal(t, false, itr.Next())
89
90         itr = db.IteratorPrefixWithStart([]byte("bbb"), []byte("aaa1"))
91         require.Equal(t, false, itr.Next())
92 }