package priceupdater
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"testing"
|
|
|
|
ethCommon "github.com/ethereum/go-ethereum/common"
|
|
"github.com/hermeznetwork/hermez-node/common"
|
|
dbUtils "github.com/hermeznetwork/hermez-node/db"
|
|
"github.com/hermeznetwork/hermez-node/db/historydb"
|
|
"github.com/hermeznetwork/hermez-node/test"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var historyDB *historydb.HistoryDB
|
|
|
|
const usdtAddr = "0xdac17f958d2ee523a2206206994597c13d831ec7"
|
|
|
|
func TestPriceUpdaterBitfinex(t *testing.T) {
|
|
// Init DB
|
|
pass := os.Getenv("POSTGRES_PASS")
|
|
db, err := dbUtils.InitSQLDB(5432, "localhost", "hermez", pass, "hermez")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
historyDB = historydb.NewHistoryDB(db, db, nil)
|
|
// Clean DB
|
|
test.WipeDB(historyDB.DB())
|
|
// Populate DB
|
|
// Gen blocks and add them to DB
|
|
blocks := test.GenBlocks(1, 2)
|
|
require.NoError(t, historyDB.AddBlocks(blocks))
|
|
// Gen tokens and add them to DB
|
|
tokens := []common.Token{
|
|
{
|
|
TokenID: 1,
|
|
EthBlockNum: blocks[0].Num,
|
|
EthAddr: ethCommon.HexToAddress("0x1"),
|
|
Name: "DAI",
|
|
Symbol: "DAI",
|
|
Decimals: 18,
|
|
}, // Used to test get by SC addr
|
|
{
|
|
TokenID: 2,
|
|
EthBlockNum: blocks[0].Num,
|
|
EthAddr: ethCommon.HexToAddress(usdtAddr),
|
|
Name: "Tether",
|
|
Symbol: "USDT",
|
|
Decimals: 18,
|
|
}, // Used to test get by token symbol
|
|
{
|
|
TokenID: 3,
|
|
EthBlockNum: blocks[0].Num,
|
|
EthAddr: ethCommon.HexToAddress("0x2"),
|
|
Name: "FOO",
|
|
Symbol: "FOO",
|
|
Decimals: 18,
|
|
}, // Used to test ignore
|
|
{
|
|
TokenID: 4,
|
|
EthBlockNum: blocks[0].Num,
|
|
EthAddr: ethCommon.HexToAddress("0x3"),
|
|
Name: "BAR",
|
|
Symbol: "BAR",
|
|
Decimals: 18,
|
|
}, // Used to test static
|
|
{
|
|
TokenID: 5,
|
|
EthBlockNum: blocks[0].Num,
|
|
EthAddr: ethCommon.HexToAddress("0x1f9840a85d5af5bf1d1762f925bdaddc4201f984"),
|
|
Name: "Uniswap",
|
|
Symbol: "UNI",
|
|
Decimals: 18,
|
|
}, // Used to test default
|
|
}
|
|
require.NoError(t, historyDB.AddTokens(tokens)) // ETH token exist in DB by default
|
|
// Update token price used to test ignore
|
|
ignoreValue := 44.44
|
|
require.NoError(t, historyDB.UpdateTokenValue(tokens[2].EthAddr, ignoreValue))
|
|
|
|
// Prepare token config
|
|
staticValue := 0.12345
|
|
tc := []TokenConfig{
|
|
// ETH and UNI tokens use default method
|
|
{ // DAI uses SC addr
|
|
UpdateMethod: UpdateMethodTypeBitFinexV2,
|
|
Addr: ethCommon.HexToAddress("0x1"),
|
|
Symbol: "DAI",
|
|
},
|
|
{ // USDT uses symbol
|
|
UpdateMethod: UpdateMethodTypeCoingeckoV3,
|
|
Addr: ethCommon.HexToAddress(usdtAddr),
|
|
},
|
|
{ // FOO uses ignore
|
|
UpdateMethod: UpdateMethodTypeIgnore,
|
|
Addr: ethCommon.HexToAddress("0x2"),
|
|
},
|
|
{ // BAR uses static
|
|
UpdateMethod: UpdateMethodTypeStatic,
|
|
Addr: ethCommon.HexToAddress("0x3"),
|
|
StaticValue: staticValue,
|
|
},
|
|
}
|
|
|
|
bitfinexV2URL := "https://api-pub.bitfinex.com/v2/"
|
|
coingeckoV3URL := "https://api.coingecko.com/api/v3/"
|
|
// Init price updater
|
|
pu, err := NewPriceUpdater(
|
|
UpdateMethodTypeCoingeckoV3,
|
|
tc,
|
|
historyDB,
|
|
bitfinexV2URL,
|
|
coingeckoV3URL,
|
|
)
|
|
require.NoError(t, err)
|
|
// Update token list
|
|
require.NoError(t, pu.UpdateTokenList())
|
|
// Update prices
|
|
pu.UpdatePrices(context.Background())
|
|
|
|
// Check results: get tokens from DB
|
|
fetchedTokens, err := historyDB.GetTokensTest()
|
|
require.NoError(t, err)
|
|
// Check that tokens that are updated via API have value:
|
|
// ETH
|
|
require.NotNil(t, fetchedTokens[0].USDUpdate)
|
|
assert.Greater(t, *fetchedTokens[0].USD, 0.0)
|
|
// DAI
|
|
require.NotNil(t, fetchedTokens[1].USDUpdate)
|
|
assert.Greater(t, *fetchedTokens[1].USD, 0.0)
|
|
// USDT
|
|
require.NotNil(t, fetchedTokens[2].USDUpdate)
|
|
assert.Greater(t, *fetchedTokens[2].USD, 0.0)
|
|
// UNI
|
|
require.NotNil(t, fetchedTokens[5].USDUpdate)
|
|
assert.Greater(t, *fetchedTokens[5].USD, 0.0)
|
|
// Check ignored token
|
|
assert.Equal(t, ignoreValue, *fetchedTokens[3].USD)
|
|
// Check static value
|
|
assert.Equal(t, staticValue, *fetchedTokens[4].USD)
|
|
}
|