hermez-node/priceupdater/priceupdater_test.go
priceupdater/priceupdater_test.goRaw
1package priceupdater
2
3import (
4 "context"
5 "os"
6 "testing"
7
8 ethCommon "github.com/ethereum/go-ethereum/common"
9 "github.com/hermeznetwork/hermez-node/common"
10 dbUtils "github.com/hermeznetwork/hermez-node/db"
11 "github.com/hermeznetwork/hermez-node/db/historydb"
12 "github.com/hermeznetwork/hermez-node/test"
13 "github.com/stretchr/testify/assert"
14 "github.com/stretchr/testify/require"
15)
16
17var historyDB *historydb.HistoryDB
18
19func TestMain(m *testing.M) {
20 // Init DB
21 pass := os.Getenv("POSTGRES_PASS")
22 db, err := dbUtils.InitSQLDB(5432, "localhost", "hermez", pass, "hermez")
23 if err != nil {
24 panic(err)
25 }
26 historyDB = historydb.NewHistoryDB(db, db, nil)
27 // Clean DB
28 test.WipeDB(historyDB.DB())
29 // Populate DB
30 // Gen blocks and add them to DB
31 blocks := test.GenBlocks(1, 2)
32 err = historyDB.AddBlocks(blocks)
33 if err != nil {
34 panic(err)
35 }
36 // Gen tokens and add them to DB
37 tokens := []common.Token{}
38 tokens = append(tokens, common.Token{
39 TokenID: 1,
40 EthBlockNum: blocks[0].Num,
41 EthAddr: ethCommon.HexToAddress("0x6b175474e89094c44da98b954eedeac495271d0f"),
42 Name: "DAI",
43 Symbol: "DAI",
44 Decimals: 18,
45 })
46 err = historyDB.AddTokens(tokens)
47 if err != nil {
48 panic(err)
49 }
50
51 result := m.Run()
52 os.Exit(result)
53}
54
55func TestPriceUpdaterBitfinex(t *testing.T) {
56 // Init price updater
57 pu, err := NewPriceUpdater("https://api-pub.bitfinex.com/v2/", APITypeBitFinexV2, historyDB)
58 require.NoError(t, err)
59 // Update token list
60 assert.NoError(t, pu.UpdateTokenList())
61 // Update prices
62 pu.UpdatePrices(context.Background())
63 assertTokenHasPriceAndClean(t)
64}
65
66func TestPriceUpdaterCoingecko(t *testing.T) {
67 // Init price updater
68 pu, err := NewPriceUpdater("https://api.coingecko.com/api/v3/", APITypeCoingeckoV3, historyDB)
69 require.NoError(t, err)
70 // Update token list
71 assert.NoError(t, pu.UpdateTokenList())
72 // Update prices
73 pu.UpdatePrices(context.Background())
74 assertTokenHasPriceAndClean(t)
75}
76
77func assertTokenHasPriceAndClean(t *testing.T) {
78 // Check that prices have been updated
79 fetchedTokens, err := historyDB.GetTokensTest()
80 require.NoError(t, err)
81 // TokenID 0 (ETH) is always on the DB
82 assert.Equal(t, 2, len(fetchedTokens))
83 for _, token := range fetchedTokens {
84 require.NotNil(t, token.USD)
85 require.NotNil(t, token.USDUpdate)
86 assert.Greater(t, *token.USD, 0.0)
87 }
88}