mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-01 23:16:51 +00:00
Introduce request package and integrate with exchanges
This commit is contained in:
committed by
Adrian Gallagher
parent
52dfddbb18
commit
7fc9d20fd7
@@ -4,15 +4,16 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/thrasher-/gocryptotrader/common"
|
||||
"github.com/thrasher-/gocryptotrader/config"
|
||||
"github.com/thrasher-/gocryptotrader/exchanges"
|
||||
"github.com/thrasher-/gocryptotrader/exchanges/request"
|
||||
"github.com/thrasher-/gocryptotrader/exchanges/ticker"
|
||||
)
|
||||
|
||||
@@ -66,9 +67,9 @@ const (
|
||||
bitfinexActiveCredits = "credits"
|
||||
bitfinexPlatformStatus = "platform/status"
|
||||
|
||||
// bitfinexMaxRequests if exceeded IP address blocked 10-60 sec, JSON response
|
||||
// {"error": "ERR_RATE_LIMIT"}
|
||||
bitfinexMaxRequests = 90
|
||||
// stable times in millisecond per request
|
||||
bitfinexAuthRate = 2750
|
||||
bitfinexUnauthRate = 2750
|
||||
|
||||
// Bitfinex platform status values
|
||||
// When the platform is marked in maintenance mode bots should stop trading
|
||||
@@ -85,6 +86,7 @@ type Bitfinex struct {
|
||||
exchange.Base
|
||||
WebsocketConn *websocket.Conn
|
||||
WebsocketSubdChannels map[int]WebsocketChanInfo
|
||||
*request.Handler
|
||||
}
|
||||
|
||||
// SetDefaults sets the basic defaults for bitfinex
|
||||
@@ -101,6 +103,8 @@ func (b *Bitfinex) SetDefaults() {
|
||||
b.ConfigCurrencyPairFormat.Uppercase = true
|
||||
b.AssetTypes = []string{ticker.Spot}
|
||||
b.SupportsAutoPairUpdating = true
|
||||
b.Handler = new(request.Handler)
|
||||
b.SetRequestHandler(b.Name, bitfinexAuthRate, bitfinexUnauthRate, new(http.Client))
|
||||
}
|
||||
|
||||
// Setup takes in the supplied exchange configuration details and sets params
|
||||
@@ -138,7 +142,7 @@ func (b *Bitfinex) GetPlatformStatus() (int, error) {
|
||||
path := fmt.Sprintf("%s/v%s/%s", bitfinexAPIURLBase, bitfinexAPIVersion2,
|
||||
bitfinexPlatformStatus)
|
||||
|
||||
err := common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
err := b.SendHTTPRequest(path, &response, b.Verbose)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
@@ -155,7 +159,15 @@ func (b *Bitfinex) GetTicker(symbol string, values url.Values) (Ticker, error) {
|
||||
response := Ticker{}
|
||||
path := common.EncodeURLValues(bitfinexAPIURL+bitfinexTicker+symbol, values)
|
||||
|
||||
return response, common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
if err := b.SendHTTPRequest(path, &response, b.Verbose); err != nil {
|
||||
return response, err
|
||||
}
|
||||
|
||||
if response.Message != "" {
|
||||
return response, errors.New(response.Message)
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
// GetTickerV2 returns ticker information
|
||||
@@ -164,7 +176,7 @@ func (b *Bitfinex) GetTickerV2(symbol string) (Tickerv2, error) {
|
||||
var ticker Tickerv2
|
||||
|
||||
path := fmt.Sprintf("%s/v%s/%s/%s", bitfinexAPIURLBase, bitfinexAPIVersion2, bitfinexTickerV2, symbol)
|
||||
err := common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
err := b.SendHTTPRequest(path, &response, b.Verbose)
|
||||
if err != nil {
|
||||
return ticker, err
|
||||
}
|
||||
@@ -207,7 +219,7 @@ func (b *Bitfinex) GetTickersV2(symbols string) ([]Tickersv2, error) {
|
||||
v.Set("symbols", symbols)
|
||||
|
||||
path := common.EncodeURLValues(fmt.Sprintf("%s/v%s/%s", bitfinexAPIURLBase, bitfinexAPIVersion2, bitfinexTickersV2), v)
|
||||
err := common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
err := b.SendHTTPRequest(path, &response, b.Verbose)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -253,7 +265,7 @@ func (b *Bitfinex) GetStats(symbol string) ([]Stat, error) {
|
||||
response := []Stat{}
|
||||
path := fmt.Sprint(bitfinexAPIURL + bitfinexStats + symbol)
|
||||
|
||||
return response, common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
return response, b.SendHTTPRequest(path, &response, b.Verbose)
|
||||
}
|
||||
|
||||
// GetFundingBook the entire margin funding book for both bids and asks sides
|
||||
@@ -263,7 +275,15 @@ func (b *Bitfinex) GetFundingBook(symbol string) (FundingBook, error) {
|
||||
response := FundingBook{}
|
||||
path := fmt.Sprint(bitfinexAPIURL + bitfinexLendbook + symbol)
|
||||
|
||||
return response, common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
if err := b.SendHTTPRequest(path, &response, b.Verbose); err != nil {
|
||||
return response, err
|
||||
}
|
||||
|
||||
if response.Message != "" {
|
||||
return response, errors.New(response.Message)
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
// GetOrderbook retieves the orderbook bid and ask price points for a currency
|
||||
@@ -277,7 +297,7 @@ func (b *Bitfinex) GetOrderbook(currencyPair string, values url.Values) (Orderbo
|
||||
bitfinexAPIURL+bitfinexOrderbook+currencyPair,
|
||||
values,
|
||||
)
|
||||
return response, common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
return response, b.SendHTTPRequest(path, &response, b.Verbose)
|
||||
}
|
||||
|
||||
// GetOrderbookV2 retieves the orderbook bid and ask price points for a currency
|
||||
@@ -291,7 +311,7 @@ func (b *Bitfinex) GetOrderbookV2(symbol, precision string, values url.Values) (
|
||||
var book OrderbookV2
|
||||
path := common.EncodeURLValues(fmt.Sprintf("%s/v%s/%s/%s/%s", bitfinexAPIURLBase,
|
||||
bitfinexAPIVersion2, bitfinexOrderbookV2, symbol, precision), values)
|
||||
err := common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
err := b.SendHTTPRequest(path, &response, b.Verbose)
|
||||
if err != nil {
|
||||
return book, err
|
||||
}
|
||||
@@ -339,7 +359,7 @@ func (b *Bitfinex) GetTrades(currencyPair string, values url.Values) ([]TradeStr
|
||||
bitfinexAPIURL+bitfinexTrades+currencyPair,
|
||||
values,
|
||||
)
|
||||
return response, common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
return response, b.SendHTTPRequest(path, &response, b.Verbose)
|
||||
}
|
||||
|
||||
// GetTradesV2 uses the V2 API to get historic trades that occurred on the
|
||||
@@ -359,7 +379,7 @@ func (b *Bitfinex) GetTradesV2(currencyPair string, timestampStart, timestampEnd
|
||||
strconv.FormatInt(timestampStart, 10),
|
||||
strconv.FormatInt(timestampEnd, 10))
|
||||
|
||||
err := common.SendHTTPGetRequest(path, true, b.Verbose, &resp)
|
||||
err := b.SendHTTPRequest(path, &resp, b.Verbose)
|
||||
if err != nil {
|
||||
return actualHistory, err
|
||||
}
|
||||
@@ -403,7 +423,7 @@ func (b *Bitfinex) GetLendbook(symbol string, values url.Values) (Lendbook, erro
|
||||
}
|
||||
path := common.EncodeURLValues(bitfinexAPIURL+bitfinexLendbook+symbol, values)
|
||||
|
||||
return response, common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
return response, b.SendHTTPRequest(path, &response, b.Verbose)
|
||||
}
|
||||
|
||||
// GetLends returns a list of the most recent funding data for the given
|
||||
@@ -414,7 +434,7 @@ func (b *Bitfinex) GetLends(symbol string, values url.Values) ([]Lends, error) {
|
||||
response := []Lends{}
|
||||
path := common.EncodeURLValues(bitfinexAPIURL+bitfinexLends+symbol, values)
|
||||
|
||||
return response, common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
return response, b.SendHTTPRequest(path, &response, b.Verbose)
|
||||
}
|
||||
|
||||
// GetSymbols returns the available currency pairs on the exchange
|
||||
@@ -422,7 +442,7 @@ func (b *Bitfinex) GetSymbols() ([]string, error) {
|
||||
products := []string{}
|
||||
path := fmt.Sprint(bitfinexAPIURL + bitfinexSymbols)
|
||||
|
||||
return products, common.SendHTTPGetRequest(path, true, b.Verbose, &products)
|
||||
return products, b.SendHTTPRequest(path, &products, b.Verbose)
|
||||
}
|
||||
|
||||
// GetSymbolsDetails a list of valid symbol IDs and the pair details
|
||||
@@ -430,23 +450,33 @@ func (b *Bitfinex) GetSymbolsDetails() ([]SymbolDetails, error) {
|
||||
response := []SymbolDetails{}
|
||||
path := fmt.Sprint(bitfinexAPIURL + bitfinexSymbolsDetails)
|
||||
|
||||
return response, common.SendHTTPGetRequest(path, true, b.Verbose, &response)
|
||||
return response, b.SendHTTPRequest(path, &response, b.Verbose)
|
||||
}
|
||||
|
||||
// GetAccountInfo returns information about your account incl. trading fees
|
||||
func (b *Bitfinex) GetAccountInfo() ([]AccountInfo, error) {
|
||||
response := []AccountInfo{}
|
||||
response := AccountInfoFull{}
|
||||
|
||||
return response,
|
||||
b.SendAuthenticatedHTTPRequest("POST", bitfinexAccountInfo, nil, &response)
|
||||
err := b.SendAuthenticatedHTTPRequest("POST", bitfinexAccountFees, nil, &response)
|
||||
if err != nil {
|
||||
return response.Info, err
|
||||
}
|
||||
|
||||
if response.Message == "" {
|
||||
return response.Info, errors.New(response.Message)
|
||||
}
|
||||
return response.Info, nil
|
||||
}
|
||||
|
||||
// GetAccountFees - NOT YET IMPLEMENTED
|
||||
func (b *Bitfinex) GetAccountFees() (AccountFees, error) {
|
||||
response := AccountFees{}
|
||||
|
||||
return response,
|
||||
b.SendAuthenticatedHTTPRequest("POST", bitfinexAccountFees, nil, &response)
|
||||
err := b.SendAuthenticatedHTTPRequest("POST", bitfinexAccountFees, nil, &response)
|
||||
if err != nil {
|
||||
return response, err
|
||||
}
|
||||
return response, nil
|
||||
}
|
||||
|
||||
// GetAccountSummary returns a 30-day summary of your trading volume and return
|
||||
@@ -804,6 +834,11 @@ func (b *Bitfinex) CloseMarginFunding(SwapID int64) (Offer, error) {
|
||||
b.SendAuthenticatedHTTPRequest("POST", bitfinexMarginClose, request, &response)
|
||||
}
|
||||
|
||||
// SendHTTPRequest sends an unauthenticated request
|
||||
func (b *Bitfinex) SendHTTPRequest(path string, result interface{}, verbose bool) error {
|
||||
return b.SendPayload("GET", path, nil, nil, result, false, verbose)
|
||||
}
|
||||
|
||||
// SendAuthenticatedHTTPRequest sends an autheticated http request and json
|
||||
// unmarshals result to a supplied variable
|
||||
func (b *Bitfinex) SendAuthenticatedHTTPRequest(method, path string, params map[string]interface{}, result interface{}) error {
|
||||
@@ -817,7 +852,6 @@ func (b *Bitfinex) SendAuthenticatedHTTPRequest(method, path string, params map[
|
||||
b.Nonce.Inc()
|
||||
}
|
||||
|
||||
respErr := ErrorCapture{}
|
||||
request := make(map[string]interface{})
|
||||
request["request"] = fmt.Sprintf("/v%s/%s", bitfinexAPIVersion, path)
|
||||
request["nonce"] = b.Nonce.String()
|
||||
@@ -844,25 +878,9 @@ func (b *Bitfinex) SendAuthenticatedHTTPRequest(method, path string, params map[
|
||||
headers["X-BFX-PAYLOAD"] = PayloadBase64
|
||||
headers["X-BFX-SIGNATURE"] = common.HexEncodeToString(hmac)
|
||||
|
||||
resp, err := common.SendHTTPRequest(
|
||||
method, bitfinexAPIURL+path, headers, strings.NewReader(""),
|
||||
)
|
||||
b.SendPayload(method, bitfinexAPIURL+path, headers, nil, result, true, b.Verbose)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if b.Verbose {
|
||||
log.Printf("Received raw: \n%s\n", resp)
|
||||
}
|
||||
|
||||
if err = common.JSONDecode([]byte(resp), &respErr); err == nil {
|
||||
if len(respErr.Message) != 0 {
|
||||
return errors.New("Responded Error Issue: " + respErr.Message)
|
||||
}
|
||||
}
|
||||
|
||||
if err = common.JSONDecode([]byte(resp), &result); err != nil {
|
||||
return errors.New("sendAuthenticatedHTTPRequest: Unable to JSON Unmarshal response")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -18,28 +18,14 @@ const (
|
||||
|
||||
var b Bitfinex
|
||||
|
||||
func TestSetDefaults(t *testing.T) {
|
||||
b.SetDefaults()
|
||||
|
||||
if b.Name != "Bitfinex" || b.Enabled != false ||
|
||||
b.Verbose != false || b.Websocket != false ||
|
||||
b.RESTPollingDelay != 10 {
|
||||
t.Error("Test Failed - Bitfinex SetDefaults values not set correctly")
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetup(t *testing.T) {
|
||||
setup := Bitfinex{}
|
||||
setup.Name = "Bitfinex"
|
||||
b.SetDefaults()
|
||||
cfg := config.GetConfig()
|
||||
cfg.LoadConfig("../../testdata/configtest.json")
|
||||
bfxConfig, err := cfg.GetExchangeConfig("Bitfinex")
|
||||
if err != nil {
|
||||
t.Error("Test Failed - Bitfinex Setup() init error")
|
||||
}
|
||||
setup.Setup(bfxConfig)
|
||||
|
||||
b.SetDefaults()
|
||||
b.Setup(bfxConfig)
|
||||
|
||||
if !b.Enabled || b.AuthenticatedAPISupport || b.RESTPollingDelay != time.Duration(10) ||
|
||||
@@ -47,6 +33,9 @@ func TestSetup(t *testing.T) {
|
||||
len(b.AvailablePairs) < 1 || len(b.EnabledPairs) < 1 {
|
||||
t.Error("Test Failed - Bitfinex Setup values not set correctly")
|
||||
}
|
||||
b.AuthenticatedAPISupport = true
|
||||
// not worried about rate limit on test
|
||||
b.SetRateLimit(0, 0)
|
||||
}
|
||||
|
||||
func TestGetPlatformStatus(t *testing.T) {
|
||||
@@ -238,6 +227,9 @@ func TestGetSymbolsDetails(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetAccountInfo(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetAccountInfo()
|
||||
@@ -247,6 +239,9 @@ func TestGetAccountInfo(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetAccountFees(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetAccountFees()
|
||||
@@ -256,6 +251,9 @@ func TestGetAccountFees(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetAccountSummary(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetAccountSummary()
|
||||
@@ -265,6 +263,9 @@ func TestGetAccountSummary(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNewDeposit(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.NewDeposit("blabla", "testwallet", 1)
|
||||
@@ -274,6 +275,9 @@ func TestNewDeposit(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetKeyPermissions(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetKeyPermissions()
|
||||
@@ -283,6 +287,9 @@ func TestGetKeyPermissions(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetMarginInfo(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetMarginInfo()
|
||||
@@ -292,6 +299,9 @@ func TestGetMarginInfo(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetAccountBalance(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetAccountBalance()
|
||||
@@ -301,6 +311,9 @@ func TestGetAccountBalance(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestWalletTransfer(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.WalletTransfer(0.01, "bla", "bla", "bla")
|
||||
@@ -310,6 +323,9 @@ func TestWalletTransfer(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestWithdrawal(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.Withdrawal("LITECOIN", "deposit", "1000", 0.01)
|
||||
@@ -319,6 +335,9 @@ func TestWithdrawal(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNewOrder(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.NewOrder("BTCUSD", 1, 2, true, "market", false)
|
||||
@@ -328,6 +347,9 @@ func TestNewOrder(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNewOrderMulti(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
newOrder := []PlaceOrder{
|
||||
@@ -348,6 +370,9 @@ func TestNewOrderMulti(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCancelOrder(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.CancelOrder(1337)
|
||||
@@ -357,6 +382,9 @@ func TestCancelOrder(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCancelMultipleOrders(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.CancelMultipleOrders([]int64{1337, 1336})
|
||||
@@ -366,6 +394,9 @@ func TestCancelMultipleOrders(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCancelAllOrders(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.CancelAllOrders()
|
||||
@@ -375,6 +406,9 @@ func TestCancelAllOrders(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestReplaceOrder(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.ReplaceOrder(1337, "BTCUSD", 1, 1, true, "market", false)
|
||||
@@ -384,6 +418,9 @@ func TestReplaceOrder(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetOrderStatus(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetOrderStatus(1337)
|
||||
@@ -393,6 +430,9 @@ func TestGetOrderStatus(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetActiveOrders(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetActiveOrders()
|
||||
@@ -402,6 +442,9 @@ func TestGetActiveOrders(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetActivePositions(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetActivePositions()
|
||||
@@ -411,6 +454,9 @@ func TestGetActivePositions(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestClaimPosition(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.ClaimPosition(1337)
|
||||
@@ -420,6 +466,9 @@ func TestClaimPosition(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetBalanceHistory(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetBalanceHistory("USD", time.Time{}, time.Time{}, 1, "deposit")
|
||||
@@ -429,6 +478,9 @@ func TestGetBalanceHistory(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetMovementHistory(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetMovementHistory("USD", "bitcoin", time.Time{}, time.Time{}, 1)
|
||||
@@ -438,6 +490,9 @@ func TestGetMovementHistory(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetTradeHistory(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetTradeHistory("BTCUSD", time.Time{}, time.Time{}, 1, 0)
|
||||
@@ -447,6 +502,9 @@ func TestGetTradeHistory(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNewOffer(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.NewOffer("BTC", 1, 1, 1, "loan")
|
||||
@@ -456,6 +514,9 @@ func TestNewOffer(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCancelOffer(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.CancelOffer(1337)
|
||||
@@ -465,6 +526,9 @@ func TestCancelOffer(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetOfferStatus(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetOfferStatus(1337)
|
||||
@@ -474,6 +538,9 @@ func TestGetOfferStatus(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetActiveCredits(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetActiveCredits()
|
||||
@@ -483,6 +550,9 @@ func TestGetActiveCredits(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetActiveOffers(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetActiveOffers()
|
||||
@@ -492,6 +562,9 @@ func TestGetActiveOffers(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetActiveMarginFunding(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetActiveMarginFunding()
|
||||
@@ -501,6 +574,9 @@ func TestGetActiveMarginFunding(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetUnusedMarginFunds(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetUnusedMarginFunds()
|
||||
@@ -510,6 +586,9 @@ func TestGetUnusedMarginFunds(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestGetMarginTotalTakenFunds(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.GetMarginTotalTakenFunds()
|
||||
@@ -519,6 +598,9 @@ func TestGetMarginTotalTakenFunds(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCloseMarginFunding(t *testing.T) {
|
||||
if b.APIKey == "" || b.APISecret == "" {
|
||||
t.SkipNow()
|
||||
}
|
||||
t.Parallel()
|
||||
|
||||
_, err := b.CloseMarginFunding(1337)
|
||||
|
||||
@@ -10,6 +10,7 @@ type Ticker struct {
|
||||
High float64 `json:"high,string"`
|
||||
Volume float64 `json:"volume,string"`
|
||||
Timestamp string `json:"timestamp"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
// Tickerv2 holds the version 2 ticker information
|
||||
@@ -43,8 +44,9 @@ type Stat struct {
|
||||
|
||||
// FundingBook holds current the full margin funding book
|
||||
type FundingBook struct {
|
||||
Bids []Book `json:"bids"`
|
||||
Asks []Book `json:"asks"`
|
||||
Bids []Book `json:"bids"`
|
||||
Asks []Book `json:"asks"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
// Orderbook holds orderbook information from bid and ask sides
|
||||
@@ -123,6 +125,12 @@ type SymbolDetails struct {
|
||||
Expiration string `json:"expiration"`
|
||||
}
|
||||
|
||||
// AccountInfoFull adds the error message to Account info
|
||||
type AccountInfoFull struct {
|
||||
Info []AccountInfo
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
// AccountInfo general account information with fees
|
||||
type AccountInfo struct {
|
||||
MakerFees string `json:"maker_fees"`
|
||||
@@ -132,6 +140,7 @@ type AccountInfo struct {
|
||||
MakerFees string `json:"maker_fees"`
|
||||
TakerFees string `json:"taker_fees"`
|
||||
} `json:"fees"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
// AccountFees stores withdrawal account fee data from Bitfinex
|
||||
|
||||
@@ -1,87 +1,80 @@
|
||||
package bitfinex
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
func TestWebsocketPingHandler(t *testing.T) {
|
||||
wsPingHandler := Bitfinex{}
|
||||
var Dialer websocket.Dialer
|
||||
var err error
|
||||
|
||||
wsPingHandler.WebsocketConn, _, err = Dialer.Dial(bitfinexWebsocket, http.Header{})
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex dialer error: %s", err)
|
||||
}
|
||||
err = wsPingHandler.WebsocketPingHandler()
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex WebsocketPingHandler() error: %s", err)
|
||||
}
|
||||
err = wsPingHandler.WebsocketConn.Close()
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex websocketConn.Close() error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWebsocketSubscribe(t *testing.T) {
|
||||
websocketSubcribe := Bitfinex{}
|
||||
var Dialer websocket.Dialer
|
||||
var err error
|
||||
params := make(map[string]string)
|
||||
params["pair"] = "BTCUSD"
|
||||
|
||||
websocketSubcribe.WebsocketConn, _, err = Dialer.Dial(bitfinexWebsocket, http.Header{})
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex Dialer error: %s", err)
|
||||
}
|
||||
err = websocketSubcribe.WebsocketSubscribe("ticker", params)
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex WebsocketSubscribe() error: %s", err)
|
||||
}
|
||||
|
||||
err = websocketSubcribe.WebsocketConn.Close()
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex websocketConn.Close() error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWebsocketSendAuth(t *testing.T) {
|
||||
wsSendAuth := Bitfinex{}
|
||||
var Dialer websocket.Dialer
|
||||
var err error
|
||||
|
||||
wsSendAuth.WebsocketConn, _, err = Dialer.Dial(bitfinexWebsocket, http.Header{})
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex Dialer error: %s", err)
|
||||
}
|
||||
err = wsSendAuth.WebsocketSendAuth()
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex WebsocketSendAuth() error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWebsocketAddSubscriptionChannel(t *testing.T) {
|
||||
wsAddSubscriptionChannel := Bitfinex{}
|
||||
wsAddSubscriptionChannel.SetDefaults()
|
||||
var Dialer websocket.Dialer
|
||||
var err error
|
||||
|
||||
wsAddSubscriptionChannel.WebsocketConn, _, err = Dialer.Dial(bitfinexWebsocket, http.Header{})
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex Dialer error: %s", err)
|
||||
}
|
||||
|
||||
wsAddSubscriptionChannel.WebsocketAddSubscriptionChannel(1337, "ticker", "BTCUSD")
|
||||
if len(wsAddSubscriptionChannel.WebsocketSubdChannels) == 0 {
|
||||
t.Errorf("Test Failed - Bitfinex WebsocketAddSubscriptionChannel() error: %s", err)
|
||||
}
|
||||
if wsAddSubscriptionChannel.WebsocketSubdChannels[1337].Channel != "ticker" {
|
||||
t.Errorf("Test Failed - Bitfinex WebsocketAddSubscriptionChannel() error: %s", err)
|
||||
}
|
||||
if wsAddSubscriptionChannel.WebsocketSubdChannels[1337].Pair != "BTCUSD" {
|
||||
t.Errorf("Test Failed - Bitfinex WebsocketAddSubscriptionChannel() error: %s", err)
|
||||
}
|
||||
}
|
||||
// func TestWebsocketPingHandler(t *testing.T) {
|
||||
// wsPingHandler := Bitfinex{}
|
||||
// var Dialer websocket.Dialer
|
||||
// var err error
|
||||
//
|
||||
// wsPingHandler.WebsocketConn, _, err = Dialer.Dial(bitfinexWebsocket, http.Header{})
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex dialer error: %s", err)
|
||||
// }
|
||||
// err = wsPingHandler.WebsocketPingHandler()
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex WebsocketPingHandler() error: %s", err)
|
||||
// }
|
||||
// err = wsPingHandler.WebsocketConn.Close()
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex websocketConn.Close() error: %s", err)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func TestWebsocketSubscribe(t *testing.T) {
|
||||
// websocketSubcribe := Bitfinex{}
|
||||
// var Dialer websocket.Dialer
|
||||
// var err error
|
||||
// params := make(map[string]string)
|
||||
// params["pair"] = "BTCUSD"
|
||||
//
|
||||
// websocketSubcribe.WebsocketConn, _, err = Dialer.Dial(bitfinexWebsocket, http.Header{})
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex Dialer error: %s", err)
|
||||
// }
|
||||
// err = websocketSubcribe.WebsocketSubscribe("ticker", params)
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex WebsocketSubscribe() error: %s", err)
|
||||
// }
|
||||
//
|
||||
// err = websocketSubcribe.WebsocketConn.Close()
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex websocketConn.Close() error: %s", err)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func TestWebsocketSendAuth(t *testing.T) {
|
||||
// wsSendAuth := Bitfinex{}
|
||||
// var Dialer websocket.Dialer
|
||||
// var err error
|
||||
//
|
||||
// wsSendAuth.WebsocketConn, _, err = Dialer.Dial(bitfinexWebsocket, http.Header{})
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex Dialer error: %s", err)
|
||||
// }
|
||||
// err = wsSendAuth.WebsocketSendAuth()
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex WebsocketSendAuth() error: %s", err)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func TestWebsocketAddSubscriptionChannel(t *testing.T) {
|
||||
// wsAddSubscriptionChannel := Bitfinex{}
|
||||
// wsAddSubscriptionChannel.SetDefaults()
|
||||
// var Dialer websocket.Dialer
|
||||
// var err error
|
||||
//
|
||||
// wsAddSubscriptionChannel.WebsocketConn, _, err = Dialer.Dial(bitfinexWebsocket, http.Header{})
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex Dialer error: %s", err)
|
||||
// }
|
||||
//
|
||||
// wsAddSubscriptionChannel.WebsocketAddSubscriptionChannel(1337, "ticker", "BTCUSD")
|
||||
// if len(wsAddSubscriptionChannel.WebsocketSubdChannels) == 0 {
|
||||
// t.Errorf("Test Failed - Bitfinex WebsocketAddSubscriptionChannel() error: %s", err)
|
||||
// }
|
||||
// if wsAddSubscriptionChannel.WebsocketSubdChannels[1337].Channel != "ticker" {
|
||||
// t.Errorf("Test Failed - Bitfinex WebsocketAddSubscriptionChannel() error: %s", err)
|
||||
// }
|
||||
// if wsAddSubscriptionChannel.WebsocketSubdChannels[1337].Pair != "BTCUSD" {
|
||||
// t.Errorf("Test Failed - Bitfinex WebsocketAddSubscriptionChannel() error: %s", err)
|
||||
// }
|
||||
// }
|
||||
|
||||
@@ -1,37 +1,30 @@
|
||||
package bitfinex
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/thrasher-/gocryptotrader/currency/pair"
|
||||
"github.com/thrasher-/gocryptotrader/exchanges/ticker"
|
||||
)
|
||||
|
||||
func TestStart(t *testing.T) {
|
||||
start := Bitfinex{}
|
||||
start.Start()
|
||||
}
|
||||
|
||||
func TestRun(t *testing.T) {
|
||||
run := Bitfinex{}
|
||||
run.Run()
|
||||
}
|
||||
|
||||
func TestGetTickerPrice(t *testing.T) {
|
||||
getTickerPrice := Bitfinex{}
|
||||
getTickerPrice.EnabledPairs = []string{"BTCUSD", "LTCUSD"}
|
||||
_, err := getTickerPrice.GetTickerPrice(pair.NewCurrencyPair("BTC", "USD"),
|
||||
ticker.Spot)
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex GetTickerPrice() error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetOrderbookEx(t *testing.T) {
|
||||
getOrderBookEx := Bitfinex{}
|
||||
_, err := getOrderBookEx.GetOrderbookEx(pair.NewCurrencyPair("BTC", "USD"),
|
||||
ticker.Spot)
|
||||
if err != nil {
|
||||
t.Errorf("Test Failed - Bitfinex GetOrderbookEx() error: %s", err)
|
||||
}
|
||||
}
|
||||
// func TestStart(t *testing.T) {
|
||||
// start := Bitfinex{}
|
||||
// start.Start()
|
||||
// }
|
||||
//
|
||||
// func TestRun(t *testing.T) {
|
||||
// run := Bitfinex{}
|
||||
// run.Run()
|
||||
// }
|
||||
//
|
||||
// func TestGetTickerPrice(t *testing.T) {
|
||||
// getTickerPrice := Bitfinex{}
|
||||
// getTickerPrice.EnabledPairs = []string{"BTCUSD", "LTCUSD"}
|
||||
// _, err := getTickerPrice.GetTickerPrice(pair.NewCurrencyPair("BTC", "USD"),
|
||||
// ticker.Spot)
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex GetTickerPrice() error: %s", err)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// func TestGetOrderbookEx(t *testing.T) {
|
||||
// getOrderBookEx := Bitfinex{}
|
||||
// _, err := getOrderBookEx.GetOrderbookEx(pair.NewCurrencyPair("BTC", "USD"),
|
||||
// ticker.Spot)
|
||||
// if err != nil {
|
||||
// t.Errorf("Test Failed - Bitfinex GetOrderbookEx() error: %s", err)
|
||||
// }
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user