hermez-node/coordinator/coordinator_test.go
coordinator/coordinator_test.goRaw
1package coordinator
2
3import (
4 "io/ioutil"
5 "os"
6 "testing"
7 "time"
8
9 "github.com/hermeznetwork/hermez-node/batchbuilder"
10 "github.com/hermeznetwork/hermez-node/db/historydb"
11 "github.com/hermeznetwork/hermez-node/db/l2db"
12 "github.com/hermeznetwork/hermez-node/db/statedb"
13 "github.com/hermeznetwork/hermez-node/log"
14 "github.com/hermeznetwork/hermez-node/txselector"
15 "github.com/stretchr/testify/assert"
16 "github.com/stretchr/testify/require"
17)
18
19func newTestModules(t *testing.T) (*txselector.TxSelector, *batchbuilder.BatchBuilder) { // FUTURE once Synchronizer is ready, should return it also
20 nLevels := 32
21
22 synchDB, err := ioutil.TempDir("", "tmpSynchDB")
23 require.Nil(t, err)
24 sdb, err := statedb.NewStateDB(synchDB, true, nLevels)
25 assert.Nil(t, err)
26
27 pass := os.Getenv("POSTGRES_PASS")
28 l2DB, err := l2db.NewL2DB(5432, "localhost", "hermez", pass, "l2", 10, 512, 24*time.Hour)
29 require.Nil(t, err)
30
31 txselDir, err := ioutil.TempDir("", "tmpTxSelDB")
32 require.Nil(t, err)
33 txsel, err := txselector.NewTxSelector(txselDir, sdb, l2DB, 10, 10, 10)
34 assert.Nil(t, err)
35
36 bbDir, err := ioutil.TempDir("", "tmpBatchBuilderDB")
37 require.Nil(t, err)
38 bb, err := batchbuilder.NewBatchBuilder(bbDir, sdb, nil, 0, uint64(nLevels))
39 assert.Nil(t, err)
40
41 // l1Txs, coordinatorL1Txs, poolL2Txs := test.GenerateTestTxsFromSet(t, test.SetTest0)
42
43 return txsel, bb
44}
45
46func TestCoordinator(t *testing.T) {
47 txsel, bb := newTestModules(t)
48
49 conf := Config{
50 LoopInterval: 100 * time.Millisecond,
51 }
52 hdb := &historydb.HistoryDB{}
53 c := NewCoordinator(conf, hdb, txsel, bb, nil)
54 c.Start()
55 time.Sleep(1 * time.Second)
56
57 // simulate forgeSequence time
58 log.Debug("simulate entering in forge time")
59 c.isForgeSeq = true
60 time.Sleep(1 * time.Second)
61
62 // simulate going out from forgeSequence
63 log.Debug("simulate going out from forge time")
64 c.isForgeSeq = false
65 time.Sleep(1 * time.Second)
66
67 // simulate entering forgeSequence time again
68 log.Debug("simulate entering in forge time again")
69 c.isForgeSeq = true
70 time.Sleep(1 * time.Second)
71
72 // simulate stopping forgerLoop by channel
73 log.Debug("simulate stopping forgerLoop by closing coordinator stopch")
74 c.Stop()
75 time.Sleep(1 * time.Second)
76}