forked from DSiSc/blockstore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
block_store_test.go
115 lines (101 loc) · 2.72 KB
/
block_store_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package blockstore
import (
"github.com/DSiSc/blockstore/config"
"github.com/DSiSc/craft/types"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/assert"
"testing"
)
var (
stateHash = types.HexToHash("0x5a0b54d5dc17e0aadc383d2db43b0a0d3e029c4c")
blockHash = types.HexToHash("0xb3f9a62087cbe321e798966883cbc445d9b924a9bbf2e010957a537ea2da7f02")
)
type MockBlock struct {
types.Block
mockCtl *gomock.Controller
}
// mock block store config
func mockBlockStoreConfig() *config.BlockStoreConfig {
return &config.BlockStoreConfig{
PluginName: PLUGIN_MEMDB,
DataPath: "./",
}
}
// mock block
func mockBlock() *types.Block {
header := types.Header{
Height: 1,
StateRoot: stateHash,
}
block := &types.Block{
Header: &header,
}
return block
}
// test create block store
func TestNewBlockStore(t *testing.T) {
assert := assert.New(t)
blockStore, err := NewBlockStore(mockBlockStoreConfig())
assert.Nil(err)
assert.NotNil(blockStore)
}
// create block store inner database
func TestBlockStore_createDBStore(t *testing.T) {
assert := assert.New(t)
config := mockBlockStoreConfig()
database, err := createDBStore(config)
assert.Nil(err)
assert.NotNil(database)
config.PluginName = PLUGIN_LEVELDB
database, err = createDBStore(config)
assert.Nil(err)
assert.NotNil(database)
}
// test write block
func TestBlockStore_WriteBlock(t *testing.T) {
assert := assert.New(t)
blockStore, err := NewBlockStore(mockBlockStoreConfig())
assert.Nil(err)
assert.NotNil(blockStore)
block := mockBlock()
err = blockStore.WriteBlock(block)
assert.Nil(err)
}
// test get block by hash
func TestBlockStore_GetBlockByHash(t *testing.T) {
assert := assert.New(t)
blockStore, err := NewBlockStore(mockBlockStoreConfig())
assert.Nil(err)
assert.NotNil(blockStore)
block := mockBlock()
err = blockStore.WriteBlock(block)
assert.Nil(err)
blockSaved, err := blockStore.GetBlockByHash(block.Hash())
assert.Nil(err)
assert.Equal(block.Hash(), blockSaved.Hash())
}
// test get block by height
func TestBlockStore_GetBlockByHeight(t *testing.T) {
assert := assert.New(t)
blockStore, err := NewBlockStore(mockBlockStoreConfig())
assert.Nil(err)
assert.NotNil(blockStore)
block := mockBlock()
err = blockStore.WriteBlock(block)
assert.Nil(err)
blockSaved, err := blockStore.GetBlockByHeight(1)
assert.Nil(err)
assert.Equal(block.Hash(), blockSaved.Hash())
}
// test get current block
func TestBlockStore_GetCurrentBlock(t *testing.T) {
assert := assert.New(t)
blockStore, err := NewBlockStore(mockBlockStoreConfig())
assert.Nil(err)
assert.NotNil(blockStore)
block := mockBlock()
err = blockStore.WriteBlock(block)
assert.Nil(err)
blockCurrent := blockStore.GetCurrentBlock()
assert.Equal(block.Hash(), blockCurrent.Hash())
}