Skip to content

Commit eea0a82

Browse files
authored
Change mock implementation to use store.KVStore instead of maps
* update `MockDataAvailabilityLayerClient` to use `KVStore` instead of maps * ensure that `KVStore` is passed to `Init` in the tests Resolves cosmos#134.
1 parent 0826c05 commit eea0a82

File tree

2 files changed

+50
-30
lines changed

2 files changed

+50
-30
lines changed

da/mock/mock.go

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package mock
22

33
import (
4-
"sync"
4+
"encoding/binary"
55

66
"github.com/celestiaorg/optimint/da"
77
"github.com/celestiaorg/optimint/log"
@@ -13,23 +13,16 @@ import (
1313
// It does actually ensures DA - it stores data in-memory.
1414
type MockDataAvailabilityLayerClient struct {
1515
logger log.Logger
16-
17-
Blocks map[[32]byte]*types.Block
18-
BlockIndex map[uint64][32]byte
19-
20-
mtx sync.Mutex
16+
dalcKV store.KVStore
2117
}
2218

2319
var _ da.DataAvailabilityLayerClient = &MockDataAvailabilityLayerClient{}
2420
var _ da.BlockRetriever = &MockDataAvailabilityLayerClient{}
2521

2622
// Init is called once to allow DA client to read configuration and initialize resources.
27-
func (m *MockDataAvailabilityLayerClient) Init(config []byte, kvStore store.KVStore, logger log.Logger) error {
28-
m.mtx.Lock()
29-
defer m.mtx.Unlock()
23+
func (m *MockDataAvailabilityLayerClient) Init(config []byte, dalcKV store.KVStore, logger log.Logger) error {
3024
m.logger = logger
31-
m.Blocks = make(map[[32]byte]*types.Block)
32-
m.BlockIndex = make(map[uint64][32]byte)
25+
m.dalcKV = dalcKV
3326
return nil
3427
}
3528

@@ -49,13 +42,22 @@ func (m *MockDataAvailabilityLayerClient) Stop() error {
4942
// This should create a transaction which (potentially)
5043
// triggers a state transition in the DA layer.
5144
func (m *MockDataAvailabilityLayerClient) SubmitBlock(block *types.Block) da.ResultSubmitBlock {
52-
m.mtx.Lock()
53-
defer m.mtx.Unlock()
5445
m.logger.Debug("Submitting block to DA layer!", "height", block.Header.Height)
5546

5647
hash := block.Header.Hash()
57-
m.Blocks[hash] = block
58-
m.BlockIndex[block.Header.Height] = hash
48+
blob, err := block.MarshalBinary()
49+
if err != nil {
50+
return da.ResultSubmitBlock{DAResult: da.DAResult{Code: da.StatusError, Message: err.Error()}}
51+
}
52+
53+
err = m.dalcKV.Set(getKey(block.Header.Height), hash[:])
54+
if err != nil {
55+
return da.ResultSubmitBlock{DAResult: da.DAResult{Code: da.StatusError, Message: err.Error()}}
56+
}
57+
err = m.dalcKV.Set(hash[:], blob)
58+
if err != nil {
59+
return da.ResultSubmitBlock{DAResult: da.DAResult{Code: da.StatusError, Message: err.Error()}}
60+
}
5961

6062
return da.ResultSubmitBlock{
6163
DAResult: da.DAResult{
@@ -67,19 +69,36 @@ func (m *MockDataAvailabilityLayerClient) SubmitBlock(block *types.Block) da.Res
6769

6870
// CheckBlockAvailability queries DA layer to check data availability of block corresponding to given header.
6971
func (m *MockDataAvailabilityLayerClient) CheckBlockAvailability(header *types.Header) da.ResultCheckBlock {
70-
m.mtx.Lock()
71-
defer m.mtx.Unlock()
72-
_, ok := m.Blocks[header.Hash()]
73-
return da.ResultCheckBlock{DAResult: da.DAResult{Code: da.StatusSuccess}, DataAvailable: ok}
72+
hash := header.Hash()
73+
_, err := m.dalcKV.Get(hash[:])
74+
if err != nil {
75+
return da.ResultCheckBlock{DAResult: da.DAResult{Code: da.StatusSuccess}, DataAvailable: false}
76+
}
77+
return da.ResultCheckBlock{DAResult: da.DAResult{Code: da.StatusSuccess}, DataAvailable: true}
7478
}
7579

7680
// RetrieveBlock returns block at given height from data availability layer.
7781
func (m *MockDataAvailabilityLayerClient) RetrieveBlock(height uint64) da.ResultRetrieveBlock {
78-
m.mtx.Lock()
79-
defer m.mtx.Unlock()
80-
hash, ok := m.BlockIndex[height]
81-
if !ok {
82-
return da.ResultRetrieveBlock{DAResult: da.DAResult{Code: da.StatusError}}
82+
hash, err := m.dalcKV.Get(getKey(height))
83+
if err != nil {
84+
return da.ResultRetrieveBlock{DAResult: da.DAResult{Code: da.StatusError, Message: err.Error()}}
8385
}
84-
return da.ResultRetrieveBlock{DAResult: da.DAResult{Code: da.StatusSuccess}, Block: m.Blocks[hash]}
86+
blob, err := m.dalcKV.Get(hash)
87+
if err != nil {
88+
return da.ResultRetrieveBlock{DAResult: da.DAResult{Code: da.StatusError, Message: err.Error()}}
89+
}
90+
91+
block := &types.Block{}
92+
err = block.UnmarshalBinary(blob)
93+
if err != nil {
94+
return da.ResultRetrieveBlock{DAResult: da.DAResult{Code: da.StatusError, Message: err.Error()}}
95+
}
96+
97+
return da.ResultRetrieveBlock{DAResult: da.DAResult{Code: da.StatusSuccess}, Block: block}
98+
}
99+
100+
func getKey(height uint64) []byte {
101+
b := make([]byte, 8)
102+
binary.BigEndian.PutUint64(b, height)
103+
return b
85104
}

node/integration_test.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@ package node
33
import (
44
"context"
55
"crypto/rand"
6-
mockda "github.com/celestiaorg/optimint/da/mock"
7-
"github.com/celestiaorg/optimint/p2p"
8-
"github.com/stretchr/testify/assert"
96
mrand "math/rand"
107
"strconv"
118
"strings"
129
"testing"
1310
"time"
1411

12+
mockda "github.com/celestiaorg/optimint/da/mock"
13+
"github.com/celestiaorg/optimint/p2p"
14+
"github.com/celestiaorg/optimint/store"
15+
"github.com/stretchr/testify/assert"
16+
1517
"github.com/libp2p/go-libp2p-core/crypto"
1618
"github.com/libp2p/go-libp2p-core/peer"
1719
"github.com/stretchr/testify/mock"
@@ -154,7 +156,7 @@ func createNodes(num int, t *testing.T) ([]*Node, []*mocks.Application) {
154156
nodes := make([]*Node, num)
155157
apps := make([]*mocks.Application, num)
156158
dalc := &mockda.MockDataAvailabilityLayerClient{}
157-
_ = dalc.Init(nil, nil, log.TestingLogger())
159+
_ = dalc.Init(nil, store.NewInMemoryKVStore(), log.TestingLogger())
158160
_ = dalc.Start()
159161
nodes[0], apps[0] = createNode(0, true, dalc, keys, t)
160162
for i := 1; i < num; i++ {
@@ -216,4 +218,3 @@ func createNode(n int, aggregator bool, dalc da.DataAvailabilityLayerClient, key
216218

217219
return node, app
218220
}
219-

0 commit comments

Comments
 (0)