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(dir, 128, TypeTxSelector, 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}