OSDN Git Service

fix log (#388)
[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, false)
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"), false)
43
44                         require.Equal(t, []byte("1"), itr.Key())
45
46                         require.Equal(t, true, itr.Next())
47                         itr = db.IteratorPrefixWithStart(nil, []byte("2"), false)
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"), false)
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, false)
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"), false)
91         require.Equal(t, false, itr.Next())
92 }
93
94 func TestDBIteratorReverse(t *testing.T) {
95         dirname, err := ioutil.TempDir("", "db_common_test")
96         require.Nil(t, err)
97
98         db, err := NewGoLevelDB("testdb", dirname)
99         if err != nil {
100                 t.Fatal(err)
101         }
102
103         defer func() {
104                 db.Close()
105                 os.RemoveAll(dirname)
106         }()
107
108         db.SetSync([]byte("aaa1"), []byte("value_1"))
109         db.SetSync([]byte("aaa22"), []byte("value_2"))
110         db.SetSync([]byte("bbb22"), []byte("value_3"))
111
112         itr := db.IteratorPrefixWithStart([]byte("aaa"), []byte("aaa22"), true)
113         defer itr.Release()
114
115         require.Equal(t, true, itr.Next())
116         require.Equal(t, []byte("aaa1"), itr.Key())
117
118         require.Equal(t, false, itr.Next())
119
120         itr = db.IteratorPrefixWithStart([]byte("aaa"), nil, true)
121
122         require.Equal(t, true, itr.Next())
123         require.Equal(t, []byte("aaa22"), itr.Key())
124
125         require.Equal(t, true, itr.Next())
126         require.Equal(t, []byte("aaa1"), itr.Key())
127
128         require.Equal(t, false, itr.Next())
129
130         require.Equal(t, false, itr.Next())
131
132         itr = db.IteratorPrefixWithStart([]byte("bbb"), []byte("aaa1"), true)
133         require.Equal(t, false, itr.Next())
134 }