arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
hermez-node/db/statedb/utils_test.go
db/statedb/utils_test.goRaw
 1package statedb
 2
 3import (
 4	"io/ioutil"
 5	"os"
 6	"testing"
 7
 8	ethCommon "github.com/ethereum/go-ethereum/common"
 9	"github.com/hermeznetwork/hermez-node/common"
10	"github.com/hermeznetwork/tracerr"
11	"github.com/iden3/go-iden3-crypto/babyjub"
12	"github.com/stretchr/testify/assert"
13	"github.com/stretchr/testify/require"
14)
15
16func TestGetIdx(t *testing.T) {
17	dir, err := ioutil.TempDir("", "tmpdb")
18	require.NoError(t, err)
19	defer assert.NoError(t, os.RemoveAll(dir))
20
21	sdb, err := NewStateDB(Config{Path: dir, Keep: 128, Type: TypeTxSelector, NLevels: 0})
22	assert.NoError(t, err)
23
24	var sk babyjub.PrivateKey
25	copy(sk[:], []byte("1234")) // only for testing
26	pk := sk.Public()
27	var sk2 babyjub.PrivateKey
28	copy(sk2[:], []byte("12345")) // only for testing
29	pk2 := sk2.Public()
30	addr := ethCommon.HexToAddress("0x74E803744B7EEFc272E852f89a05D41515d431f2")
31	addr2 := ethCommon.HexToAddress("0x54A0706531cEa2ee8F09bAd22f604e377bb56948")
32	idx := common.Idx(1234)
33	idx2 := common.Idx(12345)
34	idx3 := common.Idx(1233)
35
36	tokenID0 := common.TokenID(0)
37	tokenID1 := common.TokenID(1)
38
39	// store the keys for idx by Addr & BJJ
40	err = sdb.setIdxByEthAddrBJJ(idx, addr, pk.Compress(), tokenID0)
41	require.NoError(t, err)
42
43	idxR, err := sdb.GetIdxByEthAddrBJJ(addr, pk.Compress(), tokenID0)
44	assert.NoError(t, err)
45	assert.Equal(t, idx, idxR)
46
47	// expect error when getting only by EthAddr, as value does not exist
48	// in the db for only EthAddr
49	_, err = sdb.GetIdxByEthAddr(addr, tokenID0)
50	assert.NoError(t, err)
51	_, err = sdb.GetIdxByEthAddr(addr2, tokenID0)
52	assert.NotNil(t, err)
53	// expect error when getting by EthAddr and BJJ, but for another TokenID
54	_, err = sdb.GetIdxByEthAddrBJJ(addr, pk.Compress(), tokenID1)
55	assert.NotNil(t, err)
56
57	// expect to fail
58	idxR, err = sdb.GetIdxByEthAddrBJJ(addr2, pk.Compress(), tokenID0)
59	assert.NotNil(t, err)
60	assert.Equal(t, common.Idx(0), idxR)
61	idxR, err = sdb.GetIdxByEthAddrBJJ(addr, pk2.Compress(), tokenID0)
62	assert.NotNil(t, err)
63	assert.Equal(t, common.Idx(0), idxR)
64
65	// try to store bigger idx, will not affect as already exist a smaller
66	// Idx for that Addr & BJJ
67	err = sdb.setIdxByEthAddrBJJ(idx2, addr, pk.Compress(), tokenID0)
68	assert.NoError(t, err)
69
70	// store smaller idx
71	err = sdb.setIdxByEthAddrBJJ(idx3, addr, pk.Compress(), tokenID0)
72	assert.NoError(t, err)
73
74	idxR, err = sdb.GetIdxByEthAddrBJJ(addr, pk.Compress(), tokenID0)
75	assert.NoError(t, err)
76	assert.Equal(t, idx3, idxR)
77
78	// by EthAddr should work
79	idxR, err = sdb.GetIdxByEthAddr(addr, tokenID0)
80	assert.NoError(t, err)
81	assert.Equal(t, idx3, idxR)
82	// expect error when trying to get Idx by addr2 & pk2
83	idxR, err = sdb.GetIdxByEthAddrBJJ(addr2, pk2.Compress(), tokenID0)
84	assert.NotNil(t, err)
85	assert.Equal(t, ErrIdxNotFound, tracerr.Unwrap(err))
86	assert.Equal(t, common.Idx(0), idxR)
87	// expect error when trying to get Idx by addr with not used TokenID
88	_, err = sdb.GetIdxByEthAddr(addr, tokenID1)
89	assert.NotNil(t, err)
90}