mirror of
https://github.com/status-im/status-go.git
synced 2025-02-16 08:50:09 +00:00
fix(wallet): fix blocks ranges update error, add tests (#4560)
Fixes #4559
This commit is contained in:
parent
3af8cfc054
commit
3a4dfff20b
@ -116,13 +116,17 @@ func (b *BlockRangeSequentialDAO) upsertEthRange(chainID uint64, account common.
|
||||
"start", blockRange.Start, "first", blockRange.FirstKnown, "last", blockRange.LastKnown)
|
||||
|
||||
upsert, err := b.db.Prepare(`REPLACE INTO blocks_ranges_sequential
|
||||
(network_id, address, blk_start, blk_first, blk_last) VALUES (?, ?, ?, ?, ?)`)
|
||||
(network_id, address, blk_start, blk_first, blk_last, token_blk_start, token_blk_first, token_blk_last) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = upsert.Exec(chainID, account, (*bigint.SQLBigInt)(blockRange.Start), (*bigint.SQLBigInt)(blockRange.FirstKnown),
|
||||
(*bigint.SQLBigInt)(blockRange.LastKnown))
|
||||
if ethTokensBlockRange.tokens == nil {
|
||||
ethTokensBlockRange.tokens = NewBlockRange()
|
||||
}
|
||||
|
||||
_, err = upsert.Exec(chainID, account, (*bigint.SQLBigInt)(blockRange.Start), (*bigint.SQLBigInt)(blockRange.FirstKnown), (*bigint.SQLBigInt)(blockRange.LastKnown),
|
||||
(*bigint.SQLBigInt)(ethTokensBlockRange.tokens.Start), (*bigint.SQLBigInt)(ethTokensBlockRange.tokens.FirstKnown), (*bigint.SQLBigInt)(ethTokensBlockRange.tokens.LastKnown))
|
||||
|
||||
return err
|
||||
}
|
||||
@ -145,8 +149,8 @@ func (b *BlockRangeSequentialDAO) updateTokenRange(chainID uint64, account commo
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = update.Exec(chainID, account, (*bigint.SQLBigInt)(blockRange.Start), (*bigint.SQLBigInt)(blockRange.FirstKnown),
|
||||
(*bigint.SQLBigInt)(blockRange.LastKnown))
|
||||
_, err = update.Exec((*bigint.SQLBigInt)(blockRange.Start), (*bigint.SQLBigInt)(blockRange.FirstKnown),
|
||||
(*bigint.SQLBigInt)(blockRange.LastKnown), chainID, account)
|
||||
|
||||
return err
|
||||
}
|
||||
|
141
services/wallet/transfer/block_ranges_sequential_dao_test.go
Normal file
141
services/wallet/transfer/block_ranges_sequential_dao_test.go
Normal file
@ -0,0 +1,141 @@
|
||||
package transfer
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"math/big"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/status-im/status-go/t/helpers"
|
||||
"github.com/status-im/status-go/walletdatabase"
|
||||
)
|
||||
|
||||
func setupBlockRangesTestDB(t *testing.T) (*sql.DB, func()) {
|
||||
db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
|
||||
require.NoError(t, err)
|
||||
return db, func() {
|
||||
require.NoError(t, db.Close())
|
||||
}
|
||||
}
|
||||
|
||||
func TestBlockRangeSequentialDAO_updateTokenRange(t *testing.T) {
|
||||
walletDb, stop := setupBlockRangesTestDB(t)
|
||||
defer stop()
|
||||
|
||||
type fields struct {
|
||||
db *sql.DB
|
||||
}
|
||||
type args struct {
|
||||
chainID uint64
|
||||
account common.Address
|
||||
newBlockRange *BlockRange
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
fields fields
|
||||
args args
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
"testTokenBlockRange",
|
||||
fields{db: walletDb},
|
||||
args{
|
||||
chainID: 1,
|
||||
account: common.Address{},
|
||||
newBlockRange: &BlockRange{
|
||||
LastKnown: big.NewInt(1),
|
||||
},
|
||||
},
|
||||
false,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
b := &BlockRangeSequentialDAO{
|
||||
db: tt.fields.db,
|
||||
}
|
||||
|
||||
err := b.upsertRange(tt.args.chainID, tt.args.account, newEthTokensBlockRanges())
|
||||
require.NoError(t, err)
|
||||
|
||||
if err := b.updateTokenRange(tt.args.chainID, tt.args.account, tt.args.newBlockRange); (err != nil) != tt.wantErr {
|
||||
t.Errorf("BlockRangeSequentialDAO.updateTokenRange() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
|
||||
ethTokensBlockRanges, err := b.getBlockRange(tt.args.chainID, tt.args.account)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, ethTokensBlockRanges.tokens)
|
||||
require.Equal(t, tt.args.newBlockRange.LastKnown, ethTokensBlockRanges.tokens.LastKnown)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestBlockRangeSequentialDAO_updateEthRange(t *testing.T) {
|
||||
walletDb, stop := setupBlockRangesTestDB(t)
|
||||
defer stop()
|
||||
|
||||
type fields struct {
|
||||
db *sql.DB
|
||||
}
|
||||
type args struct {
|
||||
chainID uint64
|
||||
account common.Address
|
||||
newBlockRange *BlockRange
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
fields fields
|
||||
args args
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
"testEthBlockRange",
|
||||
fields{db: walletDb},
|
||||
args{
|
||||
chainID: 1,
|
||||
account: common.Address{},
|
||||
newBlockRange: &BlockRange{
|
||||
Start: big.NewInt(2),
|
||||
FirstKnown: big.NewInt(1),
|
||||
LastKnown: big.NewInt(3),
|
||||
},
|
||||
},
|
||||
false,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
b := &BlockRangeSequentialDAO{
|
||||
db: tt.fields.db,
|
||||
}
|
||||
|
||||
// Initial insert
|
||||
dummyBlockRange := NewBlockRange()
|
||||
dummyBlockRange.FirstKnown = big.NewInt(2) // To confirm that it is updated it must be greater than newBlockRange.FirstKnown
|
||||
if err := b.upsertEthRange(tt.args.chainID, tt.args.account, dummyBlockRange); (err != nil) != tt.wantErr {
|
||||
t.Errorf("BlockRangeSequentialDAO.upsertEthRange() insert error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
|
||||
ethTokensBlockRanges, err := b.getBlockRange(tt.args.chainID, tt.args.account)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, ethTokensBlockRanges.eth)
|
||||
require.Equal(t, dummyBlockRange.Start, ethTokensBlockRanges.eth.Start)
|
||||
require.Equal(t, dummyBlockRange.FirstKnown, ethTokensBlockRanges.eth.FirstKnown)
|
||||
require.Equal(t, dummyBlockRange.LastKnown, ethTokensBlockRanges.eth.LastKnown)
|
||||
|
||||
// Update
|
||||
if err := b.upsertEthRange(tt.args.chainID, tt.args.account, tt.args.newBlockRange); (err != nil) != tt.wantErr {
|
||||
t.Errorf("BlockRangeSequentialDAO.upsertEthRange() update error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
|
||||
ethTokensBlockRanges, err = b.getBlockRange(tt.args.chainID, tt.args.account)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, ethTokensBlockRanges.eth)
|
||||
require.Equal(t, tt.args.newBlockRange.Start, ethTokensBlockRanges.eth.Start)
|
||||
require.Equal(t, tt.args.newBlockRange.LastKnown, ethTokensBlockRanges.eth.LastKnown)
|
||||
require.Equal(t, tt.args.newBlockRange.FirstKnown, ethTokensBlockRanges.eth.FirstKnown)
|
||||
})
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user