add more 'bad blocks' to mainnet_tests

This commit is contained in:
i-norden 2021-12-01 22:27:33 -06:00
parent a784cfde86
commit 9e4cbe512b
12 changed files with 44 additions and 37 deletions

View File

@ -20,32 +20,25 @@ import (
"context"
"errors"
"fmt"
"math/big"
"os"
"testing"
"github.com/ipfs/go-cid"
"github.com/jmoiron/sqlx"
"github.com/multiformats/go-multihash"
"github.com/stretchr/testify/require"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/statediff/indexer/database/file"
"github.com/ethereum/go-ethereum/statediff/indexer/database/sql/postgres"
"github.com/ethereum/go-ethereum/statediff/indexer/interfaces"
"github.com/ethereum/go-ethereum/statediff/indexer/ipld"
"github.com/ethereum/go-ethereum/statediff/indexer/mocks"
"github.com/ethereum/go-ethereum/statediff/indexer/test_helpers"
)
var (
testBlock *types.Block
testReceipts types.Receipts
testHeaderCID cid.Cid
sqlxdb *sqlx.DB
err error
chainConf = params.MainnetChainConfig
sqlxdb *sqlx.DB
chainConf = params.MainnetChainConfig
)
func init() {
@ -55,13 +48,35 @@ func init() {
}
}
func setup(t *testing.T) {
testBlock, testReceipts, err = TestBlocksAndReceiptsFromEnv()
require.NoError(t, err)
headerRLP, err := rlp.EncodeToBytes(testBlock.Header())
func TestPushBlockAndState(t *testing.T) {
conf := DefaultTestConfig
rawURL := os.Getenv(TEST_RAW_URL)
if rawURL == "" {
fmt.Printf("Warning: no raw url configured for statediffing mainnet tests, will look for local file and"+
"then try default endpoint (%s)\r\n", DefaultTestConfig.RawURL)
} else {
conf.RawURL = rawURL
}
for _, blockNumber := range problemBlocks {
conf.BlockNumber = big.NewInt(blockNumber)
tb, trs, err := TestBlockAndReceipts(conf)
require.NoError(t, err)
testPushBlockAndState(t, tb, trs)
}
testBlock, testReceipts, err := TestBlockAndReceiptsFromEnv(conf)
require.NoError(t, err)
testPushBlockAndState(t, testBlock, testReceipts)
}
testHeaderCID, _ = ipld.RawdataToCid(ipld.MEthHeader, headerRLP, multihash.KECCAK_256)
func testPushBlockAndState(t *testing.T, block *types.Block, receipts types.Receipts) {
t.Run("Test PushBlock and PushStateNode", func(t *testing.T) {
setup(t, block, receipts)
dumpData(t)
tearDown(t)
})
}
func setup(t *testing.T, testBlock *types.Block, testReceipts types.Receipts) {
if _, err := os.Stat(file.TestConfig.FilePath); !errors.Is(err, os.ErrNotExist) {
err := os.Remove(file.TestConfig.FilePath)
require.NoError(t, err)
@ -113,11 +128,3 @@ func tearDown(t *testing.T) {
err = sqlxdb.Close()
require.NoError(t, err)
}
func TestPushBlockAndState(t *testing.T) {
t.Run("Test PushBlock and PushStateNode", func(t *testing.T) {
setup(t)
dumpData(t)
tearDown(t)
})
}

View File

@ -36,9 +36,17 @@ const (
const (
TEST_RAW_URL = "TEST_RAW_URL"
TEST_BLOCK_NUMBER = "TEST_BLOCK_NUMBER"
TEST_LOCAL_CACHE = "TEST_LOCAL_CACHE"
)
var problemBlocks = []int64{
12600011,
12619985,
12625121,
12655432,
12579670,
12914664,
}
// TestConfig holds configuration params for mainnet tests
type TestConfig struct {
RawURL string
@ -53,16 +61,8 @@ var DefaultTestConfig = TestConfig{
LocalCache: true,
}
// TestBlocksAndReceiptsFromEnv retrieves the block and receipts using env variables to override default config
func TestBlocksAndReceiptsFromEnv() (*types.Block, types.Receipts, error) {
conf := DefaultTestConfig
rawURL := os.Getenv(TEST_RAW_URL)
if rawURL == "" {
fmt.Printf("Warning: no raw url configured for statediffing mainnet tests, will look for local file and"+
"then try default endpoint (%s)\r\n", DefaultTestConfig.RawURL)
} else {
conf.RawURL = rawURL
}
// TestBlockAndReceiptsFromEnv retrieves the block and receipts using env variables to override default config block number
func TestBlockAndReceiptsFromEnv(conf TestConfig) (*types.Block, types.Receipts, error) {
blockNumberStr := os.Getenv(TEST_BLOCK_NUMBER)
blockNumber, ok := new(big.Int).SetString(blockNumberStr, 10)
if !ok {
@ -71,12 +71,12 @@ func TestBlocksAndReceiptsFromEnv() (*types.Block, types.Receipts, error) {
} else {
conf.BlockNumber = blockNumber
}
return TestBlocksAndReceipts(conf)
return TestBlockAndReceipts(conf)
}
// TestBlocksAndReceipts retrieves the block and receipts for the provided test config
// TestBlockAndReceipts retrieves the block and receipts for the provided test config
// It first tries to load files from the local system before setting up and using an ethclient.Client to pull the data
func TestBlocksAndReceipts(conf TestConfig) (*types.Block, types.Receipts, error) {
func TestBlockAndReceipts(conf TestConfig) (*types.Block, types.Receipts, error) {
var cli *ethclient.Client
var err error
var block *types.Block