mirror of
https://github.com/arnaucube/hermez-node.git
synced 2026-02-08 11:56:46 +01:00
Extend ethclient test, implement new TxID spec
- Implement new TxID spec that distinguishes L1UserTx and L1CoordinatorTx - Replace some type []*Foo by []Foo - Fix HistoryDB & L2DB bug: in case of error, a rollback was applied and the returned error was nil - Reorder inserts in historydb.NewHistoryDB() to follow foreign key dependencies - Add initial synchronizer test with test.Client (for now, only tested l1UserTxs, blocks, addToken) - Update L1UserTx event in test.Client
This commit is contained in:
@@ -1,25 +1,37 @@
|
||||
package synchronizer
|
||||
|
||||
import (
|
||||
"context"
|
||||
"io/ioutil"
|
||||
"math/big"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/ethereum/go-ethereum/ethclient"
|
||||
ethCommon "github.com/ethereum/go-ethereum/common"
|
||||
dbUtils "github.com/hermeznetwork/hermez-node/db"
|
||||
"github.com/hermeznetwork/hermez-node/db/historydb"
|
||||
"github.com/hermeznetwork/hermez-node/db/statedb"
|
||||
"github.com/hermeznetwork/hermez-node/eth"
|
||||
"github.com/hermeznetwork/hermez-node/test"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func Test(t *testing.T) {
|
||||
type timer struct {
|
||||
time int64
|
||||
}
|
||||
|
||||
func (t *timer) Time() int64 {
|
||||
currentTime := t.time
|
||||
t.time++
|
||||
return currentTime
|
||||
}
|
||||
|
||||
func TestSync(t *testing.T) {
|
||||
// Int State DB
|
||||
dir, err := ioutil.TempDir("", "tmpdb")
|
||||
require.Nil(t, err)
|
||||
|
||||
sdb, err := statedb.NewStateDB(dir, statedb.TypeSynchronizer, 32)
|
||||
stateDB, err := statedb.NewStateDB(dir, statedb.TypeSynchronizer, 32)
|
||||
assert.Nil(t, err)
|
||||
|
||||
// Init History DB
|
||||
@@ -27,23 +39,56 @@ func Test(t *testing.T) {
|
||||
db, err := dbUtils.InitSQLDB(5432, "localhost", "hermez", pass, "hermez")
|
||||
require.Nil(t, err)
|
||||
historyDB := historydb.NewHistoryDB(db)
|
||||
err = historyDB.Reorg(0)
|
||||
// Clear DB
|
||||
err = historyDB.Reorg(-1)
|
||||
assert.Nil(t, err)
|
||||
|
||||
// Init eth client
|
||||
ehtClientDialURL := os.Getenv("ETHCLIENT_DIAL_URL")
|
||||
ethClient, err := ethclient.Dial(ehtClientDialURL)
|
||||
require.Nil(t, err)
|
||||
|
||||
client := eth.NewClient(ethClient, nil, nil, nil)
|
||||
var timer timer
|
||||
clientSetup := test.NewClientSetupExample()
|
||||
client := test.NewClient(true, &timer, ðCommon.Address{}, clientSetup)
|
||||
|
||||
// Create Synchronizer
|
||||
s := NewSynchronizer(client, historyDB, sdb)
|
||||
require.NotNil(t, s)
|
||||
s, err := NewSynchronizer(client, historyDB, stateDB)
|
||||
require.Nil(t, err)
|
||||
|
||||
// Test Sync
|
||||
// err = s.Sync()
|
||||
// require.Nil(t, err)
|
||||
// Test Sync for ethereum genesis block
|
||||
err = s.Sync(context.Background())
|
||||
require.Nil(t, err)
|
||||
|
||||
blocks, err := s.historyDB.GetBlocks(0, 9999)
|
||||
require.Nil(t, err)
|
||||
assert.Equal(t, int64(0), blocks[0].EthBlockNum)
|
||||
|
||||
// Test Sync for a block with new Tokens and L1UserTxs
|
||||
// accounts := test.GenerateKeys(t, []string{"A", "B", "C", "D"})
|
||||
l1UserTxs, _, _, _ := test.GenerateTestTxsFromSet(t, `
|
||||
A (1): 10
|
||||
A (2): 20
|
||||
B (1): 5
|
||||
C (1): 8
|
||||
D (3): 15
|
||||
> advance batch
|
||||
`)
|
||||
require.Greater(t, len(l1UserTxs[0]), 0)
|
||||
// require.Greater(t, len(tokens), 0)
|
||||
|
||||
for i := 1; i <= 3; i++ {
|
||||
_, err := client.RollupAddToken(ethCommon.BigToAddress(big.NewInt(int64(i * 10000))))
|
||||
require.Nil(t, err)
|
||||
}
|
||||
|
||||
for _, l1UserTx := range l1UserTxs[0] {
|
||||
client.CtlAddL1TxUser(&l1UserTx)
|
||||
}
|
||||
client.CtlMineBlock()
|
||||
|
||||
err = s.Sync(context.Background())
|
||||
require.Nil(t, err)
|
||||
|
||||
getTokens, err := s.historyDB.GetTokens()
|
||||
require.Nil(t, err)
|
||||
assert.Equal(t, 3, len(getTokens))
|
||||
|
||||
// TODO: Reorg will be properly tested once we have the mock ethClient implemented
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user