From 2b69e856c64979c5d4114aaecf8f77525f1dad0a Mon Sep 17 00:00:00 2001 From: i-norden Date: Fri, 17 Dec 2021 13:34:22 -0600 Subject: [PATCH] extend testing --- .../file/mainnet_tests/indexer_test.go | 12 +- .../sql/mainnet_tests/indexer_test.go | 109 ++++++++++++++++++ .../indexer/database/sql/postgres/config.go | 2 +- .../block_12579670.rlp | Bin .../block_12600011.rlp | Bin .../block_12619985.rlp | Bin .../block_12625121.rlp | Bin .../block_12655432.rlp | Bin .../block_12914664.rlp | Bin .../receipts_12579670.rlp | Bin .../receipts_12600011.rlp | Bin .../receipts_12619985.rlp | Bin .../receipts_12625121.rlp | Bin .../receipts_12655432.rlp | Bin .../receipts_12914664.rlp | Bin .../mainnet_test_helpers.go} | 9 +- 16 files changed, 121 insertions(+), 11 deletions(-) create mode 100644 statediff/indexer/database/sql/mainnet_tests/indexer_test.go rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/block_12579670.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/block_12600011.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/block_12619985.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/block_12625121.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/block_12655432.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/block_12914664.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/receipts_12579670.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/receipts_12600011.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/receipts_12619985.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/receipts_12625121.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/receipts_12655432.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests => mainnet_data}/receipts_12914664.rlp (100%) rename statediff/indexer/{database/file/mainnet_tests/test_helpers.go => test_helpers/mainnet_test_helpers.go} (96%) diff --git a/statediff/indexer/database/file/mainnet_tests/indexer_test.go b/statediff/indexer/database/file/mainnet_tests/indexer_test.go index 32850ca29..b721ff05e 100644 --- a/statediff/indexer/database/file/mainnet_tests/indexer_test.go +++ b/statediff/indexer/database/file/mainnet_tests/indexer_test.go @@ -49,21 +49,21 @@ func init() { } func TestPushBlockAndState(t *testing.T) { - conf := DefaultTestConfig - rawURL := os.Getenv(TEST_RAW_URL) + conf := test_helpers.DefaultTestConfig + rawURL := os.Getenv(test_helpers.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) + "then try default endpoint (%s)\r\n", test_helpers.DefaultTestConfig.RawURL) } else { conf.RawURL = rawURL } - for _, blockNumber := range problemBlocks { + for _, blockNumber := range test_helpers.ProblemBlocks { conf.BlockNumber = big.NewInt(blockNumber) - tb, trs, err := TestBlockAndReceipts(conf) + tb, trs, err := test_helpers.TestBlockAndReceipts(conf) require.NoError(t, err) testPushBlockAndState(t, tb, trs) } - testBlock, testReceipts, err := TestBlockAndReceiptsFromEnv(conf) + testBlock, testReceipts, err := test_helpers.TestBlockAndReceiptsFromEnv(conf) require.NoError(t, err) testPushBlockAndState(t, testBlock, testReceipts) } diff --git a/statediff/indexer/database/sql/mainnet_tests/indexer_test.go b/statediff/indexer/database/sql/mainnet_tests/indexer_test.go new file mode 100644 index 000000000..7a4165d41 --- /dev/null +++ b/statediff/indexer/database/sql/mainnet_tests/indexer_test.go @@ -0,0 +1,109 @@ +// VulcanizeDB +// Copyright © 2021 Vulcanize + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package mainnet_tests + +import ( + "context" + "fmt" + "math/big" + "os" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/statediff/indexer/database/sql" + "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/mocks" + "github.com/ethereum/go-ethereum/statediff/indexer/test_helpers" +) + +var ( + err error + db sql.Database + chainConf = params.MainnetChainConfig +) + +func init() { + if os.Getenv("MODE") != "statediff" { + fmt.Println("Skipping statediff test") + os.Exit(0) + } +} + +func TestPushBlockAndState(t *testing.T) { + conf := test_helpers.DefaultTestConfig + rawURL := os.Getenv(test_helpers.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", test_helpers.DefaultTestConfig.RawURL) + } else { + conf.RawURL = rawURL + } + for _, blockNumber := range test_helpers.ProblemBlocks { + conf.BlockNumber = big.NewInt(blockNumber) + tb, trs, err := test_helpers.TestBlockAndReceipts(conf) + require.NoError(t, err) + testPushBlockAndState(t, tb, trs) + } + testBlock, testReceipts, err := test_helpers.TestBlockAndReceiptsFromEnv(conf) + require.NoError(t, err) + testPushBlockAndState(t, testBlock, testReceipts) +} + +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) + tearDown(t) + }) +} + +func setup(t *testing.T, testBlock *types.Block, testReceipts types.Receipts) { + db, err = postgres.SetupSQLXDB() + if err != nil { + t.Fatal(err) + } + ind, err := sql.NewStateDiffIndexer(context.Background(), chainConf, db) + require.NoError(t, err) + var tx interfaces.Batch + tx, err = ind.PushBlock( + testBlock, + testReceipts, + testBlock.Difficulty()) + require.NoError(t, err) + + defer func() { + if err := tx.Submit(err); err != nil { + t.Fatal(err) + } + if err := ind.Close(); err != nil { + t.Fatal(err) + } + }() + for _, node := range mocks.StateDiffs { + err = ind.PushStateNode(tx, node, testBlock.Hash().String()) + require.NoError(t, err) + } + + test_helpers.ExpectEqual(t, tx.(*sql.BatchTx).BlockNumber, testBlock.Number().Uint64()) +} + +func tearDown(t *testing.T) { + sql.TearDownDB(t, db) +} diff --git a/statediff/indexer/database/sql/postgres/config.go b/statediff/indexer/database/sql/postgres/config.go index a7c7cc9b4..842c80b32 100644 --- a/statediff/indexer/database/sql/postgres/config.go +++ b/statediff/indexer/database/sql/postgres/config.go @@ -49,7 +49,7 @@ func ResolveDriverType(str string) (DriverType, error) { var DefaultConfig = Config{ Hostname: "localhost", Port: 5432, - DatabaseName: "vulcanize_test", + DatabaseName: "vulcanize_testing", Username: "postgres", Password: "", } diff --git a/statediff/indexer/database/file/mainnet_tests/block_12579670.rlp b/statediff/indexer/mainnet_data/block_12579670.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/block_12579670.rlp rename to statediff/indexer/mainnet_data/block_12579670.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/block_12600011.rlp b/statediff/indexer/mainnet_data/block_12600011.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/block_12600011.rlp rename to statediff/indexer/mainnet_data/block_12600011.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/block_12619985.rlp b/statediff/indexer/mainnet_data/block_12619985.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/block_12619985.rlp rename to statediff/indexer/mainnet_data/block_12619985.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/block_12625121.rlp b/statediff/indexer/mainnet_data/block_12625121.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/block_12625121.rlp rename to statediff/indexer/mainnet_data/block_12625121.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/block_12655432.rlp b/statediff/indexer/mainnet_data/block_12655432.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/block_12655432.rlp rename to statediff/indexer/mainnet_data/block_12655432.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/block_12914664.rlp b/statediff/indexer/mainnet_data/block_12914664.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/block_12914664.rlp rename to statediff/indexer/mainnet_data/block_12914664.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/receipts_12579670.rlp b/statediff/indexer/mainnet_data/receipts_12579670.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/receipts_12579670.rlp rename to statediff/indexer/mainnet_data/receipts_12579670.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/receipts_12600011.rlp b/statediff/indexer/mainnet_data/receipts_12600011.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/receipts_12600011.rlp rename to statediff/indexer/mainnet_data/receipts_12600011.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/receipts_12619985.rlp b/statediff/indexer/mainnet_data/receipts_12619985.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/receipts_12619985.rlp rename to statediff/indexer/mainnet_data/receipts_12619985.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/receipts_12625121.rlp b/statediff/indexer/mainnet_data/receipts_12625121.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/receipts_12625121.rlp rename to statediff/indexer/mainnet_data/receipts_12625121.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/receipts_12655432.rlp b/statediff/indexer/mainnet_data/receipts_12655432.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/receipts_12655432.rlp rename to statediff/indexer/mainnet_data/receipts_12655432.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/receipts_12914664.rlp b/statediff/indexer/mainnet_data/receipts_12914664.rlp similarity index 100% rename from statediff/indexer/database/file/mainnet_tests/receipts_12914664.rlp rename to statediff/indexer/mainnet_data/receipts_12914664.rlp diff --git a/statediff/indexer/database/file/mainnet_tests/test_helpers.go b/statediff/indexer/test_helpers/mainnet_test_helpers.go similarity index 96% rename from statediff/indexer/database/file/mainnet_tests/test_helpers.go rename to statediff/indexer/test_helpers/mainnet_test_helpers.go index 7203649d4..141bb10fd 100644 --- a/statediff/indexer/database/file/mainnet_tests/test_helpers.go +++ b/statediff/indexer/test_helpers/mainnet_test_helpers.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -package mainnet_tests +package test_helpers import ( "context" @@ -29,8 +29,8 @@ import ( ) const ( - defaultBlockFilePath = "./block" - defaultReceiptsFilePath = "./receipts" + defaultBlockFilePath = "../../../mainnet_data/block" + defaultReceiptsFilePath = "../../../mainnet_data/receipts" ) const ( @@ -38,7 +38,8 @@ const ( TEST_BLOCK_NUMBER = "TEST_BLOCK_NUMBER" ) -var problemBlocks = []int64{ +// ProblemBlocks list of known problem blocks, with funky edge cases +var ProblemBlocks = []int64{ 12600011, 12619985, 12625121,