Introduce request package and integrate with exchanges

This commit is contained in:
Ryan O'Hara-Reid
2018-03-27 14:05:15 +11:00
committed by Adrian Gallagher
parent 52dfddbb18
commit 7fc9d20fd7
52 changed files with 1990 additions and 1544 deletions

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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

View File

@@ -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)
// }
// }

View File

@@ -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)
// }
// }