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	"os"
  7	"testing"
  8
  9	ethCommon "github.com/ethereum/go-ethereum/common"
 10	dbUtils "github.com/hermeznetwork/hermez-node/db"
 11	"github.com/hermeznetwork/hermez-node/db/historydb"
 12	"github.com/hermeznetwork/hermez-node/db/statedb"
 13	"github.com/hermeznetwork/hermez-node/test"
 14	"github.com/stretchr/testify/assert"
 15	"github.com/stretchr/testify/require"
 16)
 17
 18type timer struct {
 19	time int64
 20}
 21
 22func (t *timer) Time() int64 {
 23	currentTime := t.time
 24	t.time++
 25	return currentTime
 26}
 27
 28func TestSync(t *testing.T) {
 29	// Int State DB
 30	dir, err := ioutil.TempDir("", "tmpdb")
 31	require.Nil(t, err)
 32	defer assert.Nil(t, os.RemoveAll(dir))
 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(1), blocks[0].EthBlockNum)
 62
 63	// TODO once Til is completed
 64	/*
 65			// Test Sync for a block with new Tokens and L1UserTxs
 66			// accounts := test.GenerateKeys(t, []string{"A", "B", "C", "D"})
 67			l1UserTxs, _, _, _ := test.GenerateTestTxsFromSet(t, `
 68		A (1): 10
 69		A (2): 20
 70		B (1): 5
 71		C (1): 8
 72		D (3): 15
 73		> advance batch
 74			`)
 75			require.Greater(t, len(l1UserTxs[0]), 0)
 76			// require.Greater(t, len(tokens), 0)
 77
 78			for i := 1; i <= 3; i++ {
 79				_, err := client.RollupAddToken(ethCommon.BigToAddress(big.NewInt(int64(i*10000))),
 80					clientSetup.RollupVariables.FeeAddToken)
 81				require.Nil(t, err)
 82			}
 83
 84			for i := range l1UserTxs[0] {
 85				client.CtlAddL1TxUser(&l1UserTxs[0][i])
 86			}
 87			client.CtlMineBlock()
 88
 89			err = s.Sync(context.Background())
 90			require.Nil(t, err)
 91
 92			getTokens, err := s.historyDB.GetTokens()
 93			require.Nil(t, err)
 94			assert.Equal(t, 3, len(getTokens))
 95	*/
 96
 97	// TODO: Reorg will be properly tested once we have the mock ethClient implemented
 98	/*
 99		// Force a Reorg
100		lastSavedBlock, err := historyDB.GetLastBlock()
101		require.Nil(t, err)
102
103		lastSavedBlock.EthBlockNum++
104		err = historyDB.AddBlock(lastSavedBlock)
105		require.Nil(t, err)
106
107		lastSavedBlock.EthBlockNum++
108		err = historyDB.AddBlock(lastSavedBlock)
109		require.Nil(t, err)
110
111		log.Debugf("Wait for the blockchain to generate some blocks...")
112		time.Sleep(40 * time.Second)
113
114
115		err = s.Sync()
116		require.Nil(t, err)
117	*/
118}