arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/synchronizer/synchronizer_test.go
synchronizer/synchronizer_test.goRaw
  1package synchronizer
  2
  3import (
  4	"context"
  5	"io/ioutil"
  6	"math/big"
  7	"os"
  8	"testing"
  9
 10	ethCommon "github.com/ethereum/go-ethereum/common"
 11	dbUtils "github.com/hermeznetwork/hermez-node/db"
 12	"github.com/hermeznetwork/hermez-node/db/historydb"
 13	"github.com/hermeznetwork/hermez-node/db/statedb"
 14	"github.com/hermeznetwork/hermez-node/test"
 15	"github.com/stretchr/testify/assert"
 16	"github.com/stretchr/testify/require"
 17)
 18
 19type timer struct {
 20	time int64
 21}
 22
 23func (t *timer) Time() int64 {
 24	currentTime := t.time
 25	t.time++
 26	return currentTime
 27}
 28
 29func TestSync(t *testing.T) {
 30	// Int State DB
 31	dir, err := ioutil.TempDir("", "tmpdb")
 32	require.Nil(t, err)
 33
 34	stateDB, err := statedb.NewStateDB(dir, statedb.TypeSynchronizer, 32)
 35	assert.Nil(t, err)
 36
 37	// Init History DB
 38	pass := os.Getenv("POSTGRES_PASS")
 39	db, err := dbUtils.InitSQLDB(5432, "localhost", "hermez", pass, "hermez")
 40	require.Nil(t, err)
 41	historyDB := historydb.NewHistoryDB(db)
 42	// Clear DB
 43	err = historyDB.Reorg(-1)
 44	assert.Nil(t, err)
 45
 46	// Init eth client
 47	var timer timer
 48	clientSetup := test.NewClientSetupExample()
 49	client := test.NewClient(true, &timer, &ethCommon.Address{}, clientSetup)
 50
 51	// Create Synchronizer
 52	s, err := NewSynchronizer(client, historyDB, stateDB)
 53	require.Nil(t, err)
 54
 55	// Test Sync for ethereum genesis block
 56	err = s.Sync(context.Background())
 57	require.Nil(t, err)
 58
 59	blocks, err := s.historyDB.GetBlocks(0, 9999)
 60	require.Nil(t, err)
 61	assert.Equal(t, int64(0), blocks[0].EthBlockNum)
 62
 63	// Test Sync for a block with new Tokens and L1UserTxs
 64	// accounts := test.GenerateKeys(t, []string{"A", "B", "C", "D"})
 65	l1UserTxs, _, _, _ := test.GenerateTestTxsFromSet(t, `
 66A (1): 10
 67A (2): 20
 68B (1): 5
 69C (1): 8
 70D (3): 15
 71> advance batch
 72	`)
 73	require.Greater(t, len(l1UserTxs[0]), 0)
 74	// require.Greater(t, len(tokens), 0)
 75
 76	for i := 1; i <= 3; i++ {
 77		_, err := client.RollupAddToken(ethCommon.BigToAddress(big.NewInt(int64(i*10000))),
 78			clientSetup.RollupVariables.FeeAddToken)
 79		require.Nil(t, err)
 80	}
 81
 82	for i := range l1UserTxs[0] {
 83		client.CtlAddL1TxUser(&l1UserTxs[0][i])
 84	}
 85	client.CtlMineBlock()
 86
 87	err = s.Sync(context.Background())
 88	require.Nil(t, err)
 89
 90	getTokens, err := s.historyDB.GetTokens()
 91	require.Nil(t, err)
 92	assert.Equal(t, 3, len(getTokens))
 93
 94	// TODO: Reorg will be properly tested once we have the mock ethClient implemented
 95	/*
 96		// Force a Reorg
 97		lastSavedBlock, err := historyDB.GetLastBlock()
 98		require.Nil(t, err)
 99
100		lastSavedBlock.EthBlockNum++
101		err = historyDB.AddBlock(lastSavedBlock)
102		require.Nil(t, err)
103
104		lastSavedBlock.EthBlockNum++
105		err = historyDB.AddBlock(lastSavedBlock)
106		require.Nil(t, err)
107
108		log.Debugf("Wait for the blockchain to generate some blocks...")
109		time.Sleep(40 * time.Second)
110
111
112		err = s.Sync()
113		require.Nil(t, err)
114	*/
115}