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