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/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}