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	"os"
  6	"testing"
  7
  8	"github.com/hermeznetwork/hermez-node/common"
  9	"github.com/hermeznetwork/hermez-node/test/transakcio"
 10	"github.com/stretchr/testify/assert"
 11	"github.com/stretchr/testify/require"
 12)
 13
 14func TestProcessTxsSynchronizer(t *testing.T) {
 15	// TODO once TTGL is updated, use the blockchain L2Tx (not PoolL2Tx) for
 16	// the Synchronizer tests
 17
 18	dir, err := ioutil.TempDir("", "tmpdb")
 19	require.Nil(t, err)
 20	defer assert.Nil(t, os.RemoveAll(dir))
 21
 22	sdb, err := NewStateDB(dir, TypeSynchronizer, 32)
 23	assert.Nil(t, err)
 24
 25	// generate test transactions from test.SetTest0 code
 26	tc := transakcio.NewTestContext()
 27	blocks, err := tc.GenerateBlocks(transakcio.SetBlockchain0)
 28	require.Nil(t, err)
 29
 30	assert.Equal(t, 29, len(blocks[0].Batches[0].L1UserTxs))
 31	assert.Equal(t, 0, len(blocks[0].Batches[0].L1CoordinatorTxs))
 32	assert.Equal(t, 21, len(blocks[0].Batches[0].L2Txs))
 33	assert.Equal(t, 1, len(blocks[0].Batches[1].L1UserTxs))
 34	assert.Equal(t, 1, len(blocks[0].Batches[1].L1CoordinatorTxs))
 35	assert.Equal(t, 59, len(blocks[0].Batches[1].L2Txs))
 36	assert.Equal(t, 9, len(blocks[0].Batches[2].L1UserTxs))
 37	assert.Equal(t, 1, len(blocks[0].Batches[2].L1CoordinatorTxs))
 38	assert.Equal(t, 8, len(blocks[0].Batches[2].L2Txs))
 39
 40	// use first batch
 41	l2Txs := common.L2TxsToPoolL2Txs(blocks[0].Batches[0].L2Txs)
 42	_, exitInfos, err := sdb.ProcessTxs(blocks[0].Batches[0].L1UserTxs, blocks[0].Batches[0].L1CoordinatorTxs, l2Txs)
 43	require.Nil(t, err)
 44	// TODO once TTGL is updated, add a check that a input poolL2Tx with
 45	// Nonce & TokenID =0, after ProcessTxs call has the expected value
 46
 47	assert.Equal(t, 0, len(exitInfos))
 48	acc, err := sdb.GetAccount(common.Idx(256))
 49	assert.Nil(t, err)
 50	assert.Equal(t, "28", acc.Balance.String())
 51
 52	// use second batch
 53	l2Txs = common.L2TxsToPoolL2Txs(blocks[0].Batches[1].L2Txs)
 54	_, exitInfos, err = sdb.ProcessTxs(blocks[0].Batches[1].L1UserTxs, blocks[0].Batches[1].L1CoordinatorTxs, l2Txs)
 55	require.Nil(t, err)
 56	assert.Equal(t, 5, len(exitInfos))
 57	acc, err = sdb.GetAccount(common.Idx(256))
 58	require.Nil(t, err)
 59	assert.Equal(t, "48", acc.Balance.String())
 60
 61	// use third batch
 62	l2Txs = common.L2TxsToPoolL2Txs(blocks[0].Batches[2].L2Txs)
 63	_, exitInfos, err = sdb.ProcessTxs(blocks[0].Batches[2].L1UserTxs, blocks[0].Batches[2].L1CoordinatorTxs, l2Txs)
 64	require.Nil(t, err)
 65	assert.Equal(t, 1, len(exitInfos))
 66	acc, err = sdb.GetAccount(common.Idx(256))
 67	assert.Nil(t, err)
 68	assert.Equal(t, "73", acc.Balance.String())
 69}
 70
 71/*
 72WIP
 73
 74func TestProcessTxsBatchBuilder(t *testing.T) {
 75	dir, err := ioutil.TempDir("", "tmpdb")
 76	require.Nil(t, err)
 77	defer assert.Nil(t, os.RemoveAll(dir))
 78
 79	sdb, err := NewStateDB(dir, TypeBatchBuilder, 32)
 80	assert.Nil(t, err)
 81
 82	// generate test transactions from test.SetTest0 code
 83	tc := transakcio.NewTestContext()
 84	blocks := tc.GenerateBlocks(transakcio.SetBlockchain0)
 85
 86	assert.Equal(t, 29, len(blocks[0].Batches[0].L1UserTxs))
 87	assert.Equal(t, 0, len(blocks[0].Batches[0].L1CoordinatorTxs))
 88	assert.Equal(t, 21, len(blocks[0].Batches[0].L2Txs))
 89	assert.Equal(t, 1, len(blocks[0].Batches[1].L1UserTxs))
 90	assert.Equal(t, 1, len(blocks[0].Batches[1].L1CoordinatorTxs))
 91	assert.Equal(t, 59, len(blocks[0].Batches[1].L2Txs))
 92	assert.Equal(t, 9, len(blocks[0].Batches[2].L1UserTxs))
 93	assert.Equal(t, 0, len(blocks[0].Batches[2].L1CoordinatorTxs))
 94	assert.Equal(t, 8, len(blocks[0].Batches[2].L2Txs))
 95
 96	// use first batch
 97	l2Txs := common.L2TxsToPoolL2Txs(blocks[0].Batches[0].L2Txs)
 98	_, exitInfos, err := sdb.ProcessTxs(blocks[0].Batches[0].L1UserTxs, blocks[0].Batches[0].L1CoordinatorTxs, l2Txs)
 99	require.Nil(t, err)
100	assert.Equal(t, 0, len(exitInfos))
101	acc, err := sdb.GetAccount(common.Idx(256))
102	assert.Nil(t, err)
103	assert.Equal(t, "28", acc.Balance.String())
104
105	// use second batch
106	l2Txs = common.L2TxsToPoolL2Txs(blocks[0].Batches[1].L2Txs)
107	_, exitInfos, err = sdb.ProcessTxs(blocks[0].Batches[1].L1UserTxs, blocks[0].Batches[1].L1CoordinatorTxs, l2Txs)
108	require.Nil(t, err)
109	assert.Equal(t, 5, len(exitInfos))
110	acc, err = sdb.GetAccount(common.Idx(256))
111	require.Nil(t, err)
112	assert.Equal(t, "48", acc.Balance.String())
113
114	// use third batch
115	l2Txs = common.L2TxsToPoolL2Txs(blocks[0].Batches[2].L2Txs)
116	_, exitInfos, err = sdb.ProcessTxs(blocks[0].Batches[2].L1UserTxs, blocks[0].Batches[2].L1CoordinatorTxs, l2Txs)
117	require.Nil(t, err)
118	assert.Equal(t, 1, len(exitInfos))
119	acc, err = sdb.GetAccount(common.Idx(256))
120	assert.Nil(t, err)
121	assert.Equal(t, "23", acc.Balance.String())
122}
123
124func TestZKInputsGeneration(t *testing.T) {
125	dir, err := ioutil.TempDir("", "tmpdb")
126	require.Nil(t, err)
127	defer assert.Nil(t, os.RemoveAll(dir))
128
129	sdb, err := NewStateDB(dir, TypeBatchBuilder, 32)
130	assert.Nil(t, err)
131
132	// generate test transactions from test.SetTest0 code
133	tc := transakcio.NewTestContext()
134	blocks := tc.GenerateBlocks(transakcio.SetBlockchain0)
135	assert.Equal(t, 29, len(blocks[0].Batches[0].L1UserTxs))
136	assert.Equal(t, 0, len(blocks[0].Batches[0].L1CoordinatorTxs))
137	assert.Equal(t, 21, len(blocks[0].Batches[0].L2Txs))
138
139	l2Txs := common.L2TxsToPoolL2Txs(blocks[0].Batches[0].L2Txs)
140	zki, _, err := sdb.ProcessTxs(blocks[0].Batches[0].L1UserTxs, blocks[0].Batches[0].L1CoordinatorTxs, l2Txs)
141	require.Nil(t, err)
142
143	s, err := json.Marshal(zki)
144	require.Nil(t, err)
145	debug:=true
146	if debug {
147		fmt.Println(string(s))
148	}
149}
150*/