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, ðCommon.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(0), 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}