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 func TestMain(m *testing.M) { // 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) err = historyDB.AddBlocks(blocks) if err != nil { panic(err) } // Gen tokens and add them to DB tokens := []common.Token{} tokens = append(tokens, common.Token{ TokenID: 1, EthBlockNum: blocks[0].Num, EthAddr: ethCommon.HexToAddress("0x6b175474e89094c44da98b954eedeac495271d0f"), Name: "DAI", Symbol: "DAI", Decimals: 18, }) err = historyDB.AddTokens(tokens) if err != nil { panic(err) } result := m.Run() os.Exit(result) } func TestPriceUpdaterBitfinex(t *testing.T) { // Init price updater pu, err := NewPriceUpdater("https://api-pub.bitfinex.com/v2/", APITypeBitFinexV2, historyDB) require.NoError(t, err) // Update token list assert.NoError(t, pu.UpdateTokenList()) // Update prices pu.UpdatePrices(context.Background()) assertTokenHasPriceAndClean(t) } func TestPriceUpdaterCoingecko(t *testing.T) { // Init price updater pu, err := NewPriceUpdater("https://api.coingecko.com/api/v3/", APITypeCoingeckoV3, historyDB) require.NoError(t, err) // Update token list assert.NoError(t, pu.UpdateTokenList()) // Update prices pu.UpdatePrices(context.Background()) assertTokenHasPriceAndClean(t) } func assertTokenHasPriceAndClean(t *testing.T) { // Check that prices have been updated fetchedTokens, err := historyDB.GetTokensTest() require.NoError(t, err) // TokenID 0 (ETH) is always on the DB assert.Equal(t, 2, len(fetchedTokens)) for _, token := range fetchedTokens { require.NotNil(t, token.USD) require.NotNil(t, token.USDUpdate) assert.Greater(t, *token.USD, 0.0) } }