Skip to content

Commit

Permalink
datastore tests (#460)
Browse files Browse the repository at this point in the history
  • Loading branch information
metachris authored Jun 6, 2023
1 parent 392ab8d commit 16fc161
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 19 deletions.
15 changes: 11 additions & 4 deletions database/mockdb.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package database

import (
"database/sql"
"fmt"
"time"

Expand All @@ -9,9 +10,10 @@ import (
)

type MockDB struct {
Builders map[string]*BlockBuilderEntry
Demotions map[string]bool
Refunds map[string]bool
ExecPayloads map[string]*ExecutionPayloadEntry
Builders map[string]*BlockBuilderEntry
Demotions map[string]bool
Refunds map[string]bool
}

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

func (db MockDB) GetExecutionPayloadEntryBySlotPkHash(slot uint64, proposerPubkey, blockHash string) (entry *ExecutionPayloadEntry, err error) {
return nil, nil
key := fmt.Sprintf("%d-%s-%s", slot, proposerPubkey, blockHash)
entry, ok := db.ExecPayloads[key]
if !ok {
return nil, sql.ErrNoRows
}
return entry, nil
}

func (db MockDB) GetExecutionPayloads(idFirst, idLast uint64) (entries []*ExecutionPayloadEntry, err error) {
Expand Down
57 changes: 42 additions & 15 deletions datastore/datastore_test.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,53 @@
package datastore

// func setupTestDatastore(t *testing.T) *Datastore {
// t.Helper()
// var err error
import (
"testing"

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

// redisDs, err := NewRedisCache("", redisTestServer.Addr(), "")
// require.NoError(t, err)
func setupTestDatastore(t *testing.T, mockDB *database.MockDB) *Datastore {
t.Helper()

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

// require.NoError(t, err)
redisDs, err := NewRedisCache("", redisTestServer.Addr(), "")
require.NoError(t, err)

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

// return ds
// }
return ds
}

func TestGetPayloadFailure(t *testing.T) {
ds := setupTestDatastore(t, &database.MockDB{})
_, err := ds.GetGetPayloadResponse(1, "a", "b")
require.Error(t, ErrExecutionPayloadNotFound, err)
}

func TestGetPayloadDatabaseFallback(t *testing.T) {
filename := "../testdata/executionPayloadCapella_Goerli.json.gz"
payloadBytes := common.LoadGzippedBytes(t, filename)

// prepare mock database with execution payload entry
mockDB := &database.MockDB{
ExecPayloads: map[string]*database.ExecutionPayloadEntry{
"1-a-b": {
Version: common.ForkVersionStringCapella,
Payload: string(payloadBytes),
},
},
}
ds := setupTestDatastore(t, mockDB)
payload, err := ds.GetGetPayloadResponse(1, "a", "b")
require.NoError(t, err)
require.Equal(t, "0x1bafdc454116b605005364976b134d761dd736cb4788d25c835783b46daeb121", payload.Capella.Capella.BlockHash.String())
}

// func TestProdProposerValidatorRegistration(t *testing.T) {
// ds := setupTestDatastore(t)
Expand Down

0 comments on commit 16fc161

Please sign in to comment.