Skip to content

Commit 9623d93

Browse files
committed
fix: unit test for splitstore
1 parent b7ca555 commit 9623d93

File tree

2 files changed

+81
-29
lines changed

2 files changed

+81
-29
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,4 @@ gengen
5252
dockerfile
5353
coverage_unit.txt
5454
coverage_venus_shared.txt
55+
venus-shared/blockstore/splitstore/test_data/base_583_bafy2bzaceazuutcexhvwkyyesszohrkjjzk2zgknasgs7bb7zgfnwghtnu5w2.db/LOCK

venus-shared/blockstore/splitstore/splitstore_test.go

Lines changed: 80 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,61 @@
11
package splitstore
22

33
import (
4+
"context"
5+
"encoding/json"
46
"fmt"
57
"os"
68
"path/filepath"
79
"runtime"
810
"sync"
911
"testing"
1012

11-
blocks "github.com/ipfs/go-block-format"
13+
"github.com/filecoin-project/go-state-types/abi"
14+
"github.com/filecoin-project/venus/venus-shared/types"
1215
cid "github.com/ipfs/go-cid"
1316
"github.com/stretchr/testify/require"
1417
)
1518

1619
func TestNewSplitstore(t *testing.T) {
20+
ctx := context.Background()
1721
tempDir := t.TempDir()
18-
tempBlocks := []blocks.Block{
19-
newBlock("b1"),
20-
newBlock("b2"),
21-
newBlock("b3"),
22-
newBlock("b4"),
23-
newBlock("b4"),
22+
mockTipset := []*types.TipSet{
23+
newTipSet(100),
24+
newTipSet(200),
25+
newTipSet(300),
26+
newTipSet(400),
27+
newTipSet(500),
2428
}
2529

26-
for i, b := range tempBlocks {
27-
storePath := fmt.Sprintf("base_%d_%s.db", 10+i, b.Cid())
28-
storePath = filepath.Join(tempDir, storePath)
29-
err := os.MkdirAll(storePath, 0777)
30+
var tskCids []cid.Cid
31+
for i, ts := range mockTipset {
32+
tsk := ts.Key()
33+
tskCid, err := tsk.Cid()
3034
require.NoError(t, err)
35+
tskCids = append(tskCids, tskCid)
36+
37+
s, err := newLayer(tempDir, int64(100+i*100), tskCid)
38+
require.NoError(t, err)
39+
40+
rawBlk, err := ts.Blocks()[0].ToStorageBlock()
41+
require.NoError(t, err)
42+
err = s.Put(ctx, rawBlk)
43+
require.NoError(t, err)
44+
45+
rawTsk, err := tsk.ToStorageBlock()
46+
require.NoError(t, err)
47+
err = s.Put(ctx, rawTsk)
48+
require.NoError(t, err)
49+
50+
if s, ok := s.Blockstore.(Closer); ok {
51+
err := s.Close()
52+
require.NoError(t, err)
53+
}
3154
}
3255

3356
ss, err := NewSplitstore(tempDir, nil)
3457
require.NoError(t, err)
35-
require.Len(t, ss.layers, ss.maxLayerCount)
58+
require.Equal(t, 5, ss.layers.Len())
3659
}
3760

3861
func TestSethead(t *testing.T) {
@@ -60,42 +83,53 @@ func TestSethead(t *testing.T) {
6083
}
6184

6285
func TestScan(t *testing.T) {
86+
ctx := context.Background()
6387
tempDir := t.TempDir()
64-
tempBlocks := []blocks.Block{
65-
newBlock("b1"),
66-
newBlock("b2"),
67-
newBlock("b3"),
88+
mockTipset := []*types.TipSet{
89+
newTipSet(100),
90+
newTipSet(200),
91+
newTipSet(300),
6892
}
6993

70-
for i, b := range tempBlocks {
71-
s, err := newLayer(tempDir, int64(10+i), b.Cid())
94+
var tskCids []cid.Cid
95+
for i, ts := range mockTipset {
96+
tsk := ts.Key()
97+
tskCid, err := tsk.Cid()
98+
require.NoError(t, err)
99+
tskCids = append(tskCids, tskCid)
100+
101+
s, err := newLayer(tempDir, int64(100+i*100), tskCid)
72102
require.NoError(t, err)
103+
104+
rawBlk, err := ts.Blocks()[0].ToStorageBlock()
105+
require.NoError(t, err)
106+
err = s.Put(ctx, rawBlk)
107+
require.NoError(t, err)
108+
109+
rawTsk, err := tsk.ToStorageBlock()
110+
require.NoError(t, err)
111+
err = s.Put(ctx, rawTsk)
112+
require.NoError(t, err)
113+
73114
if s, ok := s.Blockstore.(Closer); ok {
74115
err := s.Close()
75116
require.NoError(t, err)
76117
}
77118
}
78119

79-
// base_init.db(place holder)
80-
_, err := newLayer(tempDir, int64(0), cid.Undef)
81-
require.NoError(t, err)
82-
83120
// any.db will not be scanned in
84-
err = os.MkdirAll(filepath.Join(tempDir, "any.db"), 0777)
121+
err := os.MkdirAll(filepath.Join(tempDir, "any.db"), 0777)
85122
require.NoError(t, err)
86123

87124
bs, err := scan(tempDir)
88125
require.NoError(t, err)
89126

90127
t.Run("scan in", func(t *testing.T) {
91-
require.Len(t, bs, len(tempBlocks)+1)
128+
require.Len(t, bs, len(mockTipset))
92129

93-
for i, b := range tempBlocks {
94-
require.Equal(t, b.Cid(), bs[i+1].Base())
130+
for i, c := range tskCids {
131+
require.Equal(t, c, bs[i].Base())
95132
}
96-
97-
// store from place holder should be empty
98-
require.Nil(t, bs[0].Blockstore)
99133
})
100134

101135
t.Run("clean up", func(t *testing.T) {
@@ -125,3 +159,20 @@ func TestExtractHeightAndCid(t *testing.T) {
125159
_, _, err = extractHeightAndCid("base_10_bafy2bzacedyokdqa4mnkercuk5hcufi52w5q2xannm567ij2njiqovgwiicx6.db.del")
126160
require.Error(t, err)
127161
}
162+
163+
const blkRaw = `{"Miner":"t038057","Ticket":{"VRFProof":"kfggWR2GcEbfTuJ20hkAFNRbF7xusDuAQR7XwTjJ2/gc1rwIDmaXbSVxXe4j1njcCBoMhmlYIn9D/BLqQuIOayMHPYvDmOJGc9M27Hwg1UZkiuJmXji+iM/JBNYaOA61"},"ElectionProof":{"WinCount":1,"VRFProof":"tI7cWWM9sGsKc69N9DjN41glaO5Hg7r742H56FPzg7szbhTrxj8kw0OsiJzcPJdiAa6D5jZ1S2WKoLK7lwg2R5zYvCRwwWLGDiExqbqsvqmH5z/e6YGpaD7ghTPRH1SR"},"BeaconEntries":[{"Round":2118576,"Data":"rintMKcvVAslYpn9DcshDBmlPN6hUR+wjvVQSkkVUK5klx1kOSpcDvzODSc2wXFQA7BVbEcXJW/5KLoL0KHx2alLUWDOwxhsIQnAydXdZqG8G76nTIgogthfIMgSGdB2"}],"WinPoStProof":[{"PoStProof":3,"ProofBytes":"t0ZgPHFv0ao9fVZJ/fxbBrzATmOiIv9/IueSyAjtcqEpxqWViqchaaxnz1afwzAbhahpfZsGiGWyc408WYh7Q8u0Aa52KGPmUNtf3pAvxWfsUDMz9QUfhLZVg/p8/PUVC/O/E7RBNq4YPrRK5b6Q8PVwzIOxGOS14ge6ys8Htq+LfNJbcqY676qOYF4lzMuMtQIe3CxMSAEaEBfNpHhAEs83dO6vll9MZKzcXYpNWeqmMIz4xSdF18StQq9vL/Lo"}],"Parents":[{"/":"bafy2bzacecf4wtqz3kgumeowhdulejk3xbfzgibfyhs42x4vx2guqgudem2hg"},{"/":"bafy2bzacebkpxh2k63xreigl6a3ggdr2adwk67b4zw5dddckhqex2tmha6hee"},{"/":"bafy2bzacecor3xq4ykmhhrgq55rdo5w7up65elc4qwx5uwjy25ffynidskbxw"},{"/":"bafy2bzacedr2mztmef65fodqzvyjcdnsgpcjthstseinll4maqg24avnv7ljo"}],"ParentWeight":"21779626255","Height":1164251,"ParentStateRoot":{"/":"bafy2bzacecypgutbewmyop2wfuafvxt7dm7ew4u3ssy2p4rn457f6ynrj2i6a"},"ParentMessageReceipts":{"/":"bafy2bzaceaflsspsxuxew2y4g6o72wp5i2ewp3fcolga6n2plw3gycam7s4lg"},"Messages":{"/":"bafy2bzaceanux5ivzlxzvhqxtwc5vkktcfqepubwtwgv26dowzbl3rtgqk54k"},"BLSAggregate":{"Type":2,"Data":"lQg9jBfYhY2vvjB/RPlWg6i+MBTlH1u0lmdasiab5BigsKAuZSeLNlTGbdoVZhAsDUT59ZdGsMmueHjafygDUN2KLhZoChFf6LQHH42PTSXFlkRVHvmKVz9DDU03FLMB"},"Timestamp":1658988330,"BlockSig":{"Type":2,"Data":"rMOv2tXKqV5VDOq5IQ35cP0cCAzGmaugVr/g5JTrilhAn4LYK0h6ByPL5cX5ONzlDTx9+zYZFteIzaenirZhw7G510Lh0J8lbTLP5X2EX251rEA8dpkPZPcNylzN0r8X"},"ForkSignaling":0,"ParentBaseFee":"100"}`
164+
165+
func newTipSet(height abi.ChainEpoch) *types.TipSet {
166+
var blk types.BlockHeader
167+
err := json.Unmarshal([]byte(blkRaw), &blk)
168+
if err != nil {
169+
panic(err)
170+
}
171+
blk.Height = height
172+
173+
ts, err := types.NewTipSet([]*types.BlockHeader{&blk})
174+
if err != nil {
175+
panic(err)
176+
}
177+
return ts
178+
}

0 commit comments

Comments
 (0)