arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/db/statedb/txprocessors_test.go
db/statedb/txprocessors_test.goRaw
 1package statedb
 2
 3import (
 4	"io/ioutil"
 5	"strings"
 6	"testing"
 7
 8	"github.com/hermeznetwork/hermez-node/common"
 9	"github.com/hermeznetwork/hermez-node/test"
10	"github.com/stretchr/testify/assert"
11	"github.com/stretchr/testify/require"
12)
13
14func TestProcessTxs(t *testing.T) {
15	dir, err := ioutil.TempDir("", "tmpdb")
16	require.Nil(t, err)
17
18	sdb, err := NewStateDB(dir, true, 32)
19	assert.Nil(t, err)
20
21	// generate test transactions from test.SetTest0 code
22	parser := test.NewParser(strings.NewReader(test.SetTest0))
23	instructions, err := parser.Parse()
24	assert.Nil(t, err)
25
26	l1Txs, coordinatorL1Txs, poolL2Txs := test.GenerateTestTxs(t, instructions)
27	assert.Equal(t, 29, len(l1Txs[0]))
28	assert.Equal(t, 0, len(coordinatorL1Txs[0]))
29	assert.Equal(t, 21, len(poolL2Txs[0]))
30
31	// iterate for each batch
32	for i := 0; i < len(l1Txs); i++ {
33		l2Txs := common.PoolL2TxsToL2Txs(poolL2Txs[i])
34
35		_, _, err := sdb.ProcessTxs(true, l1Txs[i], coordinatorL1Txs[i], l2Txs)
36		require.Nil(t, err)
37	}
38
39	acc, err := sdb.GetAccount(common.Idx(1))
40	assert.Nil(t, err)
41	assert.Equal(t, "23", acc.Balance.String())
42}
43
44func TestProcessTxsBatchByBatch(t *testing.T) {
45	dir, err := ioutil.TempDir("", "tmpdb")
46	require.Nil(t, err)
47
48	sdb, err := NewStateDB(dir, true, 32)
49	assert.Nil(t, err)
50
51	// generate test transactions from test.SetTest0 code
52	parser := test.NewParser(strings.NewReader(test.SetTest0))
53	instructions, err := parser.Parse()
54	assert.Nil(t, err)
55
56	l1Txs, coordinatorL1Txs, poolL2Txs := test.GenerateTestTxs(t, instructions)
57	assert.Equal(t, 29, len(l1Txs[0]))
58	assert.Equal(t, 0, len(coordinatorL1Txs[0]))
59	assert.Equal(t, 21, len(poolL2Txs[0]))
60	assert.Equal(t, 5, len(l1Txs[1]))
61	assert.Equal(t, 1, len(coordinatorL1Txs[1]))
62	assert.Equal(t, 55, len(poolL2Txs[1]))
63	assert.Equal(t, 10, len(l1Txs[2]))
64	assert.Equal(t, 0, len(coordinatorL1Txs[2]))
65	assert.Equal(t, 7, len(poolL2Txs[2]))
66
67	// use first batch
68	l2txs := common.PoolL2TxsToL2Txs(poolL2Txs[0])
69	_, exitInfos, err := sdb.ProcessTxs(true, l1Txs[0], coordinatorL1Txs[0], l2txs)
70	require.Nil(t, err)
71	assert.Equal(t, 0, len(exitInfos))
72	acc, err := sdb.GetAccount(common.Idx(1))
73	assert.Nil(t, err)
74	assert.Equal(t, "28", acc.Balance.String())
75
76	// use second batch
77	l2txs = common.PoolL2TxsToL2Txs(poolL2Txs[1])
78	_, exitInfos, err = sdb.ProcessTxs(true, l1Txs[1], coordinatorL1Txs[1], l2txs)
79	require.Nil(t, err)
80	assert.Equal(t, 5, len(exitInfos))
81	acc, err = sdb.GetAccount(common.Idx(1))
82	assert.Nil(t, err)
83	assert.Equal(t, "48", acc.Balance.String())
84
85	// use third batch
86	l2txs = common.PoolL2TxsToL2Txs(poolL2Txs[2])
87	_, exitInfos, err = sdb.ProcessTxs(true, l1Txs[2], coordinatorL1Txs[2], l2txs)
88	require.Nil(t, err)
89	assert.Equal(t, 1, len(exitInfos))
90	acc, err = sdb.GetAccount(common.Idx(1))
91	assert.Nil(t, err)
92	assert.Equal(t, "23", acc.Balance.String())
93}