Skip to content

Commit 905efb9

Browse files
committed
add test
1 parent 7e52e75 commit 905efb9

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

import_test.go

+76
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package iavl
22

33
import (
4+
"encoding/binary"
45
"testing"
56

67
"github.com/stretchr/testify/assert"
78
"github.com/stretchr/testify/require"
9+
"golang.org/x/crypto/sha3"
810

911
dbm "github.com/cosmos/iavl/db"
1012
)
@@ -69,6 +71,80 @@ func ExampleImporter() {
6971
}
7072
}
7173

74+
func TestImporterDataIntegrity(t *testing.T) {
75+
// run multiple times to ensure the data integrity
76+
tree := NewMutableTree(dbm.NewMemDB(), 0, false, NewNopLogger())
77+
78+
// write more than maxBatchSize
79+
for i := 0; i < maxBatchSize+1; i++ {
80+
bz := sha3.Sum256(binary.BigEndian.AppendUint64([]byte{}, uint64(i)))
81+
_, err := tree.Set(bz[:], []byte{byte(i)})
82+
if err != nil {
83+
require.NoError(t, err)
84+
}
85+
}
86+
87+
_, version, err := tree.SaveVersion()
88+
require.NoError(t, err)
89+
90+
itree, err := tree.GetImmutable(version)
91+
require.NoError(t, err)
92+
93+
exporter, err := itree.Export()
94+
require.NoError(t, err)
95+
96+
defer exporter.Close()
97+
exported := []*ExportNode{}
98+
for {
99+
var node *ExportNode
100+
node, err = exporter.Next()
101+
if err == ErrorExportDone {
102+
break
103+
}
104+
105+
require.NoError(t, err)
106+
exported = append(exported, node)
107+
}
108+
109+
tempDir := t.TempDir()
110+
db, err := dbm.NewDB("importer-test", "goleveldb", tempDir)
111+
require.NoError(t, err)
112+
newTree := NewMutableTree(db, 0, false, NewNopLogger())
113+
importer, err := newTree.Import(version)
114+
require.NoError(t, err)
115+
116+
for _, node := range exported {
117+
err = importer.Add(node)
118+
require.NoError(t, err)
119+
}
120+
err = importer.Commit()
121+
require.NoError(t, err)
122+
importer.Close()
123+
124+
_, version, err = newTree.SaveVersion()
125+
require.NoError(t, err)
126+
err = newTree.Close()
127+
require.NoError(t, err)
128+
err = db.Close()
129+
require.NoError(t, err)
130+
131+
// check if the tree is the same
132+
db, err = dbm.NewDB("importer-test", "goleveldb", tempDir)
133+
require.NoError(t, err)
134+
newTree = NewMutableTree(db, 0, false, NewNopLogger())
135+
_, err = newTree.LoadVersion(version)
136+
require.NoError(t, err)
137+
itree, err = newTree.GetImmutable(version)
138+
require.NoError(t, err)
139+
140+
for i := 0; i < maxBatchSize+1; i++ {
141+
bz := sha3.Sum256(binary.BigEndian.AppendUint64([]byte{}, uint64(i)))
142+
value, err := itree.Get(bz[:])
143+
require.NoError(t, err)
144+
require.Equal(t, []byte{byte(i)}, value)
145+
}
146+
}
147+
72148
func TestImporter_NegativeVersion(t *testing.T) {
73149
tree := NewMutableTree(dbm.NewMemDB(), 0, false, NewNopLogger())
74150
_, err := tree.Import(-1)

0 commit comments

Comments
 (0)