arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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(1))
 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(1))
 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(1))
 86	assert.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(1))
 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}