Skip to content

Commit 16fc161

Browse files
authored
datastore tests (#460)
1 parent 392ab8d commit 16fc161

File tree

2 files changed

+53
-19
lines changed

2 files changed

+53
-19
lines changed

database/mockdb.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package database
22

33
import (
4+
"database/sql"
45
"fmt"
56
"time"
67

@@ -9,9 +10,10 @@ import (
910
)
1011

1112
type MockDB struct {
12-
Builders map[string]*BlockBuilderEntry
13-
Demotions map[string]bool
14-
Refunds map[string]bool
13+
ExecPayloads map[string]*ExecutionPayloadEntry
14+
Builders map[string]*BlockBuilderEntry
15+
Demotions map[string]bool
16+
Refunds map[string]bool
1517
}
1618

1719
func (db MockDB) NumRegisteredValidators() (count uint64, err error) {
@@ -43,7 +45,12 @@ func (db MockDB) GetExecutionPayloadEntryByID(executionPayloadID int64) (entry *
4345
}
4446

4547
func (db MockDB) GetExecutionPayloadEntryBySlotPkHash(slot uint64, proposerPubkey, blockHash string) (entry *ExecutionPayloadEntry, err error) {
46-
return nil, nil
48+
key := fmt.Sprintf("%d-%s-%s", slot, proposerPubkey, blockHash)
49+
entry, ok := db.ExecPayloads[key]
50+
if !ok {
51+
return nil, sql.ErrNoRows
52+
}
53+
return entry, nil
4754
}
4855

4956
func (db MockDB) GetExecutionPayloads(idFirst, idLast uint64) (entries []*ExecutionPayloadEntry, err error) {

datastore/datastore_test.go

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,53 @@
11
package datastore
22

3-
// func setupTestDatastore(t *testing.T) *Datastore {
4-
// t.Helper()
5-
// var err error
3+
import (
4+
"testing"
65

7-
// redisTestServer, err := miniredis.Run()
8-
// require.NoError(t, err)
6+
"github.com/alicebob/miniredis/v2"
7+
"github.com/flashbots/mev-boost-relay/common"
8+
"github.com/flashbots/mev-boost-relay/database"
9+
"github.com/stretchr/testify/require"
10+
)
911

10-
// redisDs, err := NewRedisCache("", redisTestServer.Addr(), "")
11-
// require.NoError(t, err)
12+
func setupTestDatastore(t *testing.T, mockDB *database.MockDB) *Datastore {
13+
t.Helper()
1214

13-
// // TODO: add support for testing datastore with memcached enabled
14-
// ds, err := NewDatastore(common.TestLog, redisDs, nil, database.MockDB{})
15+
redisTestServer, err := miniredis.Run()
16+
require.NoError(t, err)
1517

16-
// require.NoError(t, err)
18+
redisDs, err := NewRedisCache("", redisTestServer.Addr(), "")
19+
require.NoError(t, err)
1720

18-
// // we should not panic when fetching execution payload response, even when memcached is nil
19-
// _, err = ds.GetGetPayloadResponse(0, "foo", "bar")
20-
// require.NoError(t, err)
21+
ds, err := NewDatastore(common.TestLog, redisDs, nil, mockDB)
22+
require.NoError(t, err)
2123

22-
// return ds
23-
// }
24+
return ds
25+
}
26+
27+
func TestGetPayloadFailure(t *testing.T) {
28+
ds := setupTestDatastore(t, &database.MockDB{})
29+
_, err := ds.GetGetPayloadResponse(1, "a", "b")
30+
require.Error(t, ErrExecutionPayloadNotFound, err)
31+
}
32+
33+
func TestGetPayloadDatabaseFallback(t *testing.T) {
34+
filename := "../testdata/executionPayloadCapella_Goerli.json.gz"
35+
payloadBytes := common.LoadGzippedBytes(t, filename)
36+
37+
// prepare mock database with execution payload entry
38+
mockDB := &database.MockDB{
39+
ExecPayloads: map[string]*database.ExecutionPayloadEntry{
40+
"1-a-b": {
41+
Version: common.ForkVersionStringCapella,
42+
Payload: string(payloadBytes),
43+
},
44+
},
45+
}
46+
ds := setupTestDatastore(t, mockDB)
47+
payload, err := ds.GetGetPayloadResponse(1, "a", "b")
48+
require.NoError(t, err)
49+
require.Equal(t, "0x1bafdc454116b605005364976b134d761dd736cb4788d25c835783b46daeb121", payload.Capella.Capella.BlockHash.String())
50+
}
2451

2552
// func TestProdProposerValidatorRegistration(t *testing.T) {
2653
// ds := setupTestDatastore(t)

0 commit comments

Comments
 (0)