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
 33	stateDB, err := statedb.NewStateDB(dir, statedb.TypeSynchronizer, 32)
 34	assert.Nil(t, err)
 35
 36	// Init History DB
 37	pass := os.Getenv("POSTGRES_PASS")
 38	db, err := dbUtils.InitSQLDB(5432, "localhost", "hermez", pass, "hermez")
 39	require.Nil(t, err)
 40	historyDB := historydb.NewHistoryDB(db)
 41	// Clear DB
 42	err = historyDB.Reorg(-1)
 43	assert.Nil(t, err)
 44
 45	// Init eth client
 46	var timer timer
 47	clientSetup := test.NewClientSetupExample()
 48	client := test.NewClient(true, &timer, &ethCommon.Address{}, clientSetup)
 49
 50	// Create Synchronizer
 51	s, err := NewSynchronizer(client, historyDB, stateDB)
 52	require.Nil(t, err)
 53
 54	// Test Sync for ethereum genesis block
 55	err = s.Sync(context.Background())
 56	require.Nil(t, err)
 57
 58	blocks, err := s.historyDB.GetBlocks(0, 9999)
 59	require.Nil(t, err)
 60	assert.Equal(t, int64(1), blocks[0].EthBlockNum)
 61
 62	// TODO once transakcio is completed
 63	/*
 64			// Test Sync for a block with new Tokens and L1UserTxs
 65			// accounts := test.GenerateKeys(t, []string{"A", "B", "C", "D"})
 66			l1UserTxs, _, _, _ := test.GenerateTestTxsFromSet(t, `
 67		A (1): 10
 68		A (2): 20
 69		B (1): 5
 70		C (1): 8
 71		D (3): 15
 72		> advance batch
 73			`)
 74			require.Greater(t, len(l1UserTxs[0]), 0)
 75			// require.Greater(t, len(tokens), 0)
 76
 77			for i := 1; i <= 3; i++ {
 78				_, err := client.RollupAddToken(ethCommon.BigToAddress(big.NewInt(int64(i*10000))),
 79					clientSetup.RollupVariables.FeeAddToken)
 80				require.Nil(t, err)
 81			}
 82
 83			for i := range l1UserTxs[0] {
 84				client.CtlAddL1TxUser(&l1UserTxs[0][i])
 85			}
 86			client.CtlMineBlock()
 87
 88			err = s.Sync(context.Background())
 89			require.Nil(t, err)
 90
 91			getTokens, err := s.historyDB.GetTokens()
 92			require.Nil(t, err)
 93			assert.Equal(t, 3, len(getTokens))
 94	*/
 95
 96	// TODO: Reorg will be properly tested once we have the mock ethClient implemented
 97	/*
 98		// Force a Reorg
 99		lastSavedBlock, err := historyDB.GetLastBlock()
100		require.Nil(t, err)
101
102		lastSavedBlock.EthBlockNum++
103		err = historyDB.AddBlock(lastSavedBlock)
104		require.Nil(t, err)
105
106		lastSavedBlock.EthBlockNum++
107		err = historyDB.AddBlock(lastSavedBlock)
108		require.Nil(t, err)
109
110		log.Debugf("Wait for the blockchain to generate some blocks...")
111		time.Sleep(40 * time.Second)
112
113
114		err = s.Sync()
115		require.Nil(t, err)
116	*/
117}