hermez-node/db/statedb/txprocessors_test.go
db/statedb/txprocessors_test.goRaw
1package statedb
2
3import (
4 "encoding/json"
5 "fmt"
6 "io/ioutil"
7 "strings"
8 "testing"
9
10 "github.com/hermeznetwork/hermez-node/common"
11 "github.com/hermeznetwork/hermez-node/test"
12 "github.com/stretchr/testify/assert"
13 "github.com/stretchr/testify/require"
14)
15
16var debug = false
17
18func TestProcessTxs(t *testing.T) {
19 dir, err := ioutil.TempDir("", "tmpdb")
20 require.Nil(t, err)
21
22 sdb, err := NewStateDB(dir, true, 32)
23 assert.Nil(t, err)
24
25 // generate test transactions from test.SetTest0 code
26 parser := test.NewParser(strings.NewReader(test.SetTest0))
27 instructions, err := parser.Parse()
28 assert.Nil(t, err)
29
30 l1Txs, coordinatorL1Txs, poolL2Txs, _ := test.GenerateTestTxs(t, instructions)
31 assert.Equal(t, 29, len(l1Txs[0]))
32 assert.Equal(t, 0, len(coordinatorL1Txs[0]))
33 assert.Equal(t, 21, len(poolL2Txs[0]))
34
35 // iterate for each batch
36 for i := 0; i < len(l1Txs); i++ {
37 // l2Txs := common.PoolL2TxsToL2Txs(poolL2Txs[i])
38
39 _, _, err := sdb.ProcessTxs(true, true, l1Txs[i], coordinatorL1Txs[i], poolL2Txs[i])
40 require.Nil(t, err)
41 }
42
43 acc, err := sdb.GetAccount(common.Idx(256))
44 assert.Nil(t, err)
45 assert.Equal(t, "23", acc.Balance.String())
46}
47
48func TestProcessTxsBatchByBatch(t *testing.T) {
49 dir, err := ioutil.TempDir("", "tmpdb")
50 require.Nil(t, err)
51
52 sdb, err := NewStateDB(dir, true, 32)
53 assert.Nil(t, err)
54
55 // generate test transactions from test.SetTest0 code
56 parser := test.NewParser(strings.NewReader(test.SetTest0))
57 instructions, err := parser.Parse()
58 assert.Nil(t, err)
59
60 l1Txs, coordinatorL1Txs, poolL2Txs, _ := test.GenerateTestTxs(t, instructions)
61 assert.Equal(t, 29, len(l1Txs[0]))
62 assert.Equal(t, 0, len(coordinatorL1Txs[0]))
63 assert.Equal(t, 21, len(poolL2Txs[0]))
64 assert.Equal(t, 5, len(l1Txs[1]))
65 assert.Equal(t, 1, len(coordinatorL1Txs[1]))
66 assert.Equal(t, 55, len(poolL2Txs[1]))
67 assert.Equal(t, 10, len(l1Txs[2]))
68 assert.Equal(t, 0, len(coordinatorL1Txs[2]))
69 assert.Equal(t, 7, len(poolL2Txs[2]))
70
71 // use first batch
72 // l2txs := common.PoolL2TxsToL2Txs(poolL2Txs[0])
73 _, exitInfos, err := sdb.ProcessTxs(true, true, l1Txs[0], coordinatorL1Txs[0], poolL2Txs[0])
74 require.Nil(t, err)
75 assert.Equal(t, 0, len(exitInfos))
76 acc, err := sdb.GetAccount(common.Idx(256))
77 assert.Nil(t, err)
78 assert.Equal(t, "28", acc.Balance.String())
79
80 // use second batch
81 // l2txs = common.PoolL2TxsToL2Txs(poolL2Txs[1])
82 _, exitInfos, err = sdb.ProcessTxs(true, true, l1Txs[1], coordinatorL1Txs[1], poolL2Txs[1])
83 require.Nil(t, err)
84 assert.Equal(t, 5, len(exitInfos))
85 acc, err = sdb.GetAccount(common.Idx(256))
86 require.Nil(t, err)
87 assert.Equal(t, "48", acc.Balance.String())
88
89 // use third batch
90 // l2txs = common.PoolL2TxsToL2Txs(poolL2Txs[2])
91 _, exitInfos, err = sdb.ProcessTxs(true, true, l1Txs[2], coordinatorL1Txs[2], poolL2Txs[2])
92 require.Nil(t, err)
93 assert.Equal(t, 1, len(exitInfos))
94 acc, err = sdb.GetAccount(common.Idx(256))
95 assert.Nil(t, err)
96 assert.Equal(t, "23", acc.Balance.String())
97}
98
99func TestZKInputsGeneration(t *testing.T) {
100 dir, err := ioutil.TempDir("", "tmpdb")
101 require.Nil(t, err)
102
103 sdb, err := NewStateDB(dir, true, 32)
104 assert.Nil(t, err)
105
106 // generate test transactions from test.SetTest0 code
107 parser := test.NewParser(strings.NewReader(test.SetTest0))
108 instructions, err := parser.Parse()
109 assert.Nil(t, err)
110
111 l1Txs, coordinatorL1Txs, poolL2Txs, _ := test.GenerateTestTxs(t, instructions)
112 assert.Equal(t, 29, len(l1Txs[0]))
113 assert.Equal(t, 0, len(coordinatorL1Txs[0]))
114 assert.Equal(t, 21, len(poolL2Txs[0]))
115
116 zki, _, err := sdb.ProcessTxs(false, true, l1Txs[0], coordinatorL1Txs[0], poolL2Txs[0])
117 require.Nil(t, err)
118
119 s, err := json.Marshal(zki)
120 require.Nil(t, err)
121 if debug {
122 fmt.Println(string(s))
123 }
124}