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