-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathbinance_test.go
More file actions
103 lines (86 loc) · 3.01 KB
/
binance_test.go
File metadata and controls
103 lines (86 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package provider
import (
"context"
"encoding/json"
"testing"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ojo-network/price-feeder/oracle/types"
"github.com/rs/zerolog"
"github.com/stretchr/testify/require"
)
func TestBinanceProvider_GetTickerPrices(t *testing.T) {
p, err := NewBinanceProvider(
context.TODO(),
zerolog.Nop(),
Endpoint{},
true,
types.CurrencyPair{Base: "ATOM", Quote: "USDT"},
)
require.NoError(t, err)
t.Run("valid_request_single_ticker", func(t *testing.T) {
lastPrice := "34.69000000"
volume := "2396974.02000000"
tickerMap := map[string]BinanceTicker{}
tickerMap["ATOMUSDT"] = BinanceTicker{
Symbol: "ATOMUSDT",
LastPrice: lastPrice,
Volume: volume,
}
p.tickers = tickerMap
prices, err := p.GetTickerPrices(types.CurrencyPair{Base: "ATOM", Quote: "USDT"})
require.NoError(t, err)
require.Len(t, prices, 1)
require.Equal(t, sdk.MustNewDecFromStr(lastPrice), prices["ATOMUSDT"].Price)
require.Equal(t, sdk.MustNewDecFromStr(volume), prices["ATOMUSDT"].Volume)
})
t.Run("valid_request_multi_ticker", func(t *testing.T) {
lastPriceAtom := "34.69000000"
lastPriceLuna := "41.35000000"
volume := "2396974.02000000"
tickerMap := map[string]BinanceTicker{}
tickerMap["ATOMUSDT"] = BinanceTicker{
Symbol: "ATOMUSDT",
LastPrice: lastPriceAtom,
Volume: volume,
}
tickerMap["LUNAUSDT"] = BinanceTicker{
Symbol: "LUNAUSDT",
LastPrice: lastPriceLuna,
Volume: volume,
}
p.tickers = tickerMap
prices, err := p.GetTickerPrices(
types.CurrencyPair{Base: "ATOM", Quote: "USDT"},
types.CurrencyPair{Base: "LUNA", Quote: "USDT"},
)
require.NoError(t, err)
require.Len(t, prices, 2)
require.Equal(t, sdk.MustNewDecFromStr(lastPriceAtom), prices["ATOMUSDT"].Price)
require.Equal(t, sdk.MustNewDecFromStr(volume), prices["ATOMUSDT"].Volume)
require.Equal(t, sdk.MustNewDecFromStr(lastPriceLuna), prices["LUNAUSDT"].Price)
require.Equal(t, sdk.MustNewDecFromStr(volume), prices["LUNAUSDT"].Volume)
})
t.Run("invalid_request_invalid_ticker", func(t *testing.T) {
prices, err := p.GetTickerPrices(types.CurrencyPair{Base: "FOO", Quote: "BAR"})
require.EqualError(t, err, "binanceus has no ticker data for requested pairs: [FOOBAR]")
require.Nil(t, prices)
})
}
func TestBinanceCurrencyPairToBinancePair(t *testing.T) {
cp := types.CurrencyPair{Base: "ATOM", Quote: "USDT"}
binanceSymbol := currencyPairToBinanceTickerPair(cp)
require.Equal(t, binanceSymbol, "atomusdt@ticker")
}
func TestBinanceProvider_getSubscriptionMsgs(t *testing.T) {
provider := &BinanceProvider{
subscribedPairs: map[string]types.CurrencyPair{},
}
cps := []types.CurrencyPair{
{Base: "ATOM", Quote: "USDT"},
}
subMsgs := provider.getSubscriptionMsgs(cps...)
msg, _ := json.Marshal(subMsgs[0])
require.Equal(t, "{\"method\":\"SUBSCRIBE\",\"params\":[\"atomusdt@ticker\"],\"id\":1}", string(msg))
msg, _ = json.Marshal(subMsgs[1])
require.Equal(t, "{\"method\":\"SUBSCRIBE\",\"params\":[\"atomusdt@kline_1m\"],\"id\":1}", string(msg))
}