arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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}