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}