Engine: Protocol Features, coverage, types, BTC markets websocket (#368)

* Attempts to update orderbook so it doesn't need to sort

* Reverts the ws ob stuff. Gets rid of sorting because it happens later. Adds some exchange features

* update existing feature lists. Expands list definition to match my emotions

* Adds bithumb bitmex and bitstamp. adds a couple more types

* Features for you, features for me, features for bittrex, btcmarkets, btse, coinbasepro, coinut, exmo, gateio and gemini

* Features for hitbtc, huobi, itbit, kraken, lakebtc, lbank, localbitcoins, okcoin, okex, poloniex, yobit, zb

* Who can forget good old alphapoint?

* Adds btcmarksets websocket :glitch_crab: fixes alphapoint features

* Adds extra data not in the documentation :/

* Replaces websocket features by using protocol features. However, it breaks it due to import cycles. I'm not sure what I'll do just yet

* Removes import cycle via duplicate structs.

* Increases coverage of config with `TestCheckCurrencyConfigValues`. Moves all currency pair package types into their own files or places it at the bottom of files if necessary

* Increase coverage in code.go

* One way of determining a test has failed, is when to it fails. Removed redundant explanation

* Increases code coverage of conversion

* Lint fixes

* Fixes orderbook tests

* Re-adds sorting because its important to still have the internal pre-processed orderbook to be representative of a real orderbook

* Secret lints that did not show up via Windows linting

* Adds protocol package to contain exchange features

* Fixes protocol implementation

* Fixes ws tests

* Addresses the following: Removes st-st-stutters in config types, changes GetAvailableForexProviders -> GetSupportedForexProviders, removes errors from tests where error is nil, removes orderbook setup when not necessary, removes import newlines, removes false bools from declaration, changes should of to should have

* imports and casing

* Fixes two more nil error checks
This commit is contained in:
Scott
2019-10-22 10:56:20 +11:00
committed by Adrian Gallagher
parent ec0ed1c1e5
commit ccfcdf26aa
156 changed files with 5228 additions and 4337 deletions

View File

@@ -21,10 +21,10 @@ func TestSetDefaults(t *testing.T) {
SetDefaults.SetDefaults()
if SetDefaults.API.Endpoints.URL != "https://sim3.alphapoint.com:8400" {
t.Error("Test Failed - SetDefaults: String Incorrect -", SetDefaults.API.Endpoints.URL)
t.Error("SetDefaults: String Incorrect -", SetDefaults.API.Endpoints.URL)
}
if SetDefaults.API.Endpoints.WebsocketURL != "wss://sim3.alphapoint.com:8401/v1/GetTicker/" {
t.Error("Test Failed - SetDefaults: String Incorrect -", SetDefaults.API.Endpoints.WebsocketURL)
t.Error("SetDefaults: String Incorrect -", SetDefaults.API.Endpoints.WebsocketURL)
}
}
@@ -50,12 +50,12 @@ func TestGetTicker(t *testing.T) {
if onlineTest {
ticker, err = alpha.GetTicker("BTCUSD")
if err != nil {
t.Fatal("Test Failed - Alphapoint GetTicker init error: ", err)
t.Fatal("Alphapoint GetTicker init error: ", err)
}
_, err = alpha.GetTicker("wigwham")
if err == nil {
t.Error("Test Failed - Alphapoint GetTicker error")
t.Error("Alphapoint GetTicker Expected error")
}
} else {
mockResp := []byte(
@@ -64,16 +64,16 @@ func TestGetTicker(t *testing.T) {
err = common.JSONDecode(mockResp, &ticker)
if err != nil {
t.Fatal("Test Failed - Alphapoint GetTicker unmarshalling error: ", err)
t.Fatal("Alphapoint GetTicker unmarshalling error: ", err)
}
if ticker.Last != 249.76 {
t.Error("Test failed - Alphapoint GetTicker expected last = 249.76")
t.Error("Alphapoint GetTicker expected last = 249.76")
}
}
if ticker.Last < 0 {
t.Error("Test failed - Alphapoint GetTicker last < 0")
t.Error("Alphapoint GetTicker last < 0")
}
}
@@ -87,12 +87,12 @@ func TestGetTrades(t *testing.T) {
if onlineTest {
trades, err = alpha.GetTrades("BTCUSD", 0, 10)
if err != nil {
t.Fatalf("Test Failed - Init error: %s", err)
t.Fatalf("Init error: %s", err)
}
_, err = alpha.GetTrades("wigwham", 0, 10)
if err == nil {
t.Fatal("Test Failed - GetTrades error")
t.Fatal("GetTrades Expected error")
}
} else {
mockResp := []byte(
@@ -101,20 +101,20 @@ func TestGetTrades(t *testing.T) {
err = common.JSONDecode(mockResp, &trades)
if err != nil {
t.Fatal("Test Failed - GetTrades unmarshalling error: ", err)
t.Fatal("GetTrades unmarshalling error: ", err)
}
}
if !trades.IsAccepted {
t.Error("Test Failed - GetTrades IsAccepted failed")
t.Error("GetTrades IsAccepted failed")
}
if trades.Count <= 0 {
t.Error("Test failed - GetTrades trades count is <= 0")
t.Error("GetTrades trades count is <= 0")
}
if trades.Instrument != "BTCUSD" {
t.Error("Test failed - GetTrades instrument is != BTCUSD")
t.Error("GetTrades instrument is != BTCUSD")
}
}
@@ -128,11 +128,11 @@ func TestGetTradesByDate(t *testing.T) {
if onlineTest {
trades, err = alpha.GetTradesByDate("BTCUSD", 1414799400, 1414800000)
if err != nil {
t.Errorf("Test Failed - Init error: %s", err)
t.Errorf("Init error: %s", err)
}
_, err = alpha.GetTradesByDate("wigwham", 1414799400, 1414800000)
if err == nil {
t.Error("Test Failed - GetTradesByDate error")
t.Error("GetTradesByDate Expected error")
}
} else {
mockResp := []byte(
@@ -141,27 +141,27 @@ func TestGetTradesByDate(t *testing.T) {
err = common.JSONDecode(mockResp, &trades)
if err != nil {
t.Fatal("Test Failed - GetTradesByDate unmarshalling error: ", err)
t.Fatal("GetTradesByDate unmarshalling error: ", err)
}
}
if trades.DateTimeUTC < 0 {
t.Error("Test Failed - Alphapoint trades.Count value is negative")
t.Error("Alphapoint trades.Count value is negative")
}
if trades.EndDate < 0 {
t.Error("Test Failed - Alphapoint trades.DateTimeUTC value is negative")
t.Error("Alphapoint trades.DateTimeUTC value is negative")
}
if trades.Instrument != "BTCUSD" {
t.Error("Test Failed - Alphapoint trades.Instrument value is incorrect")
t.Error("Alphapoint trades.Instrument value is incorrect")
}
if !trades.IsAccepted {
t.Error("Test Failed - Alphapoint trades.IsAccepted value is true")
t.Error("Alphapoint trades.IsAccepted value is true")
}
if len(trades.RejectReason) > 0 {
t.Error("Test Failed - Alphapoint trades.IsAccepted value has been returned")
t.Error("Alphapoint trades.IsAccepted value has been returned")
}
if trades.StartDate < 0 {
t.Error("Test Failed - Alphapoint trades.StartIndex value is negative")
t.Error("Alphapoint trades.StartIndex value is negative")
}
}
@@ -175,12 +175,12 @@ func TestGetOrderbook(t *testing.T) {
if onlineTest {
orderBook, err = alpha.GetOrderbook("BTCUSD")
if err != nil {
t.Errorf("Test Failed - Init error: %s", err)
t.Errorf("Init error: %s", err)
}
_, err = alpha.GetOrderbook("wigwham")
if err == nil {
t.Error("Test Failed - GetOrderbook() error")
t.Error("GetOrderbook() Expected error")
}
} else {
mockResp := []byte(
@@ -189,24 +189,24 @@ func TestGetOrderbook(t *testing.T) {
err = common.JSONDecode(mockResp, &orderBook)
if err != nil {
t.Fatal("Test Failed - TestGetOrderbook unmarshalling error: ", err)
t.Fatal("TestGetOrderbook unmarshalling error: ", err)
}
if orderBook.Bids[0].Quantity != 725 {
t.Error("Test Failed - TestGetOrderbook Bids[0].Quantity != 725")
t.Error("TestGetOrderbook Bids[0].Quantity != 725")
}
}
if !orderBook.IsAccepted {
t.Error("Test Failed - Alphapoint orderBook.IsAccepted value is negative")
t.Error("Alphapoint orderBook.IsAccepted value is negative")
}
if len(orderBook.Asks) == 0 {
t.Error("Test Failed - Alphapoint orderBook.Asks has len 0")
t.Error("Alphapoint orderBook.Asks has len 0")
}
if len(orderBook.Bids) == 0 {
t.Error("Test Failed - Alphapoint orderBook.Bids has len 0")
t.Error("Alphapoint orderBook.Bids has len 0")
}
}
@@ -220,7 +220,7 @@ func TestGetProductPairs(t *testing.T) {
if onlineTest {
products, err = alpha.GetProductPairs()
if err != nil {
t.Errorf("Test Failed - Init error: %s", err)
t.Errorf("Init error: %s", err)
}
} else {
mockResp := []byte(
@@ -229,24 +229,24 @@ func TestGetProductPairs(t *testing.T) {
err = common.JSONDecode(mockResp, &products)
if err != nil {
t.Fatal("Test Failed - TestGetProductPairs unmarshalling error: ", err)
t.Fatal("TestGetProductPairs unmarshalling error: ", err)
}
if products.ProductPairs[0].Name != "LTCUSD" {
t.Error("Test Failed - Alphapoint ProductPairs 0 != LTCUSD")
t.Error("Alphapoint ProductPairs 0 != LTCUSD")
}
if products.ProductPairs[1].Product1Label != "BTC" {
t.Error("Test Failed - Alphapoint ProductPairs 1 != BTC")
t.Error("Alphapoint ProductPairs 1 != BTC")
}
}
if !products.IsAccepted {
t.Error("Test Failed - Alphapoint ProductPairs.IsAccepted value is negative")
t.Error("Alphapoint ProductPairs.IsAccepted value is negative")
}
if len(products.ProductPairs) == 0 {
t.Error("Test Failed - Alphapoint ProductPairs len is 0")
t.Error("Alphapoint ProductPairs len is 0")
}
}
@@ -260,7 +260,7 @@ func TestGetProducts(t *testing.T) {
if onlineTest {
products, err = alpha.GetProducts()
if err != nil {
t.Errorf("Test Failed - Init error: %s", err)
t.Errorf("Init error: %s", err)
}
} else {
mockResp := []byte(
@@ -269,24 +269,24 @@ func TestGetProducts(t *testing.T) {
err = common.JSONDecode(mockResp, &products)
if err != nil {
t.Fatal("Test Failed - TestGetProducts unmarshalling error: ", err)
t.Fatal("TestGetProducts unmarshalling error: ", err)
}
if products.Products[0].Name != "USD" {
t.Error("Test Failed - Alphapoint Products 0 != USD")
t.Error("Alphapoint Products 0 != USD")
}
if products.Products[1].ProductCode != 1 {
t.Error("Test Failed - Alphapoint Products 1 product code != 1")
t.Error("Alphapoint Products 1 product code != 1")
}
}
if !products.IsAccepted {
t.Error("Test Failed - Alphapoint Products.IsAccepted value is negative")
t.Error("Alphapoint Products.IsAccepted value is negative")
}
if len(products.Products) == 0 {
t.Error("Test Failed - Alphapoint Products len is 0")
t.Error("Alphapoint Products len is 0")
}
}
@@ -301,15 +301,15 @@ func TestCreateAccount(t *testing.T) {
err := a.CreateAccount("test", "account", "something@something.com", "0292383745", "lolcat123")
if err != nil {
t.Errorf("Test Failed - Init error: %s", err)
t.Errorf("Init error: %s", err)
}
err = a.CreateAccount("test", "account", "something@something.com", "0292383745", "bla")
if err == nil {
t.Errorf("Test Failed - CreateAccount() error")
t.Errorf("CreateAccount() Expected error")
}
err = a.CreateAccount("", "", "", "", "lolcat123")
if err == nil {
t.Errorf("Test Failed - CreateAccount() error")
t.Errorf("CreateAccount() Expected error")
}
}
@@ -324,7 +324,7 @@ func TestGetUserInfo(t *testing.T) {
_, err := a.GetUserInfo()
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -339,7 +339,7 @@ func TestSetUserInfo(t *testing.T) {
_, err := a.SetUserInfo("bla", "bla", "1", "meh", true, true)
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -354,7 +354,7 @@ func TestGetAccountInfo(t *testing.T) {
_, err := a.GetAccountInfo()
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -369,7 +369,7 @@ func TestGetAccountTrades(t *testing.T) {
_, err := a.GetAccountTrades("", 1, 2)
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -384,7 +384,7 @@ func TestGetDepositAddresses(t *testing.T) {
_, err := a.GetDepositAddresses()
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -399,7 +399,7 @@ func TestWithdrawCoins(t *testing.T) {
err := a.WithdrawCoins("", "", "", 0.01)
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -414,7 +414,7 @@ func TestCreateOrder(t *testing.T) {
_, err := a.CreateOrder("", "", exchange.LimitOrderType.ToString(), 0.01, 0)
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -429,7 +429,7 @@ func TestModifyExistingOrder(t *testing.T) {
_, err := a.ModifyExistingOrder("", 1, 1)
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -444,7 +444,7 @@ func TestCancelAllExistingOrders(t *testing.T) {
err := a.CancelAllExistingOrders("")
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -459,7 +459,7 @@ func TestGetOrders(t *testing.T) {
_, err := a.GetOrders()
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -474,7 +474,7 @@ func TestGetOrderFee(t *testing.T) {
_, err := a.GetOrderFee("", "", 1, 1)
if err == nil {
t.Error("Test Failed - GetUserInfo() error")
t.Error("GetUserInfo() Expected error")
}
}
@@ -626,7 +626,7 @@ func TestModifyOrder(t *testing.T) {
_, err := a.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}

View File

@@ -12,6 +12,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -40,12 +41,24 @@ func (a *Alphapoint) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AccountInfo: true,
RESTCapabilities: protocol.Features{
AccountInfo: true,
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
GetOrders: true,
CancelOrder: true,
CancelOrders: true,
SubmitOrder: true,
ModifyOrder: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
},
WebsocketCapabilities: exchange.ProtocolFeatures{
TickerFetching: true,
WebsocketCapabilities: protocol.Features{
AccountInfo: true,
},
WithdrawPermissions: exchange.WithdrawCryptoWith2FA |

View File

@@ -19,11 +19,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatalf("Test Failed - ANX Setup() load config error: %s", err)
log.Fatalf("ANX Setup() load config error: %s", err)
}
anxConfig, err := cfg.GetExchangeConfig("ANX")
if err != nil {
log.Fatalf("Test Failed - ANX Setup() init error: %s", err)
log.Fatalf("ANX Setup() init error: %s", err)
}
anxConfig.API.AuthenticatedSupport = true
anxConfig.API.Credentials.Key = apiKey
@@ -31,7 +31,7 @@ func TestMain(m *testing.M) {
a.SetDefaults()
err = a.Setup(anxConfig)
if err != nil {
log.Fatal("Test Failed - ANX setup error", err)
log.Fatal("ANX setup error", err)
}
log.Printf(sharedtestvalues.LiveTesting, a.GetName(), a.API.Endpoints.URL)
os.Exit(m.Run())

View File

@@ -22,11 +22,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - ANX load config error", err)
log.Fatal("ANX load config error", err)
}
anxConfig, err := cfg.GetExchangeConfig("ANX")
if err != nil {
log.Fatal("Test Failed - Mock server error", err)
log.Fatal("Mock server error", err)
}
a.SkipAuthCheck = true
anxConfig.API.AuthenticatedSupport = true
@@ -35,12 +35,12 @@ func TestMain(m *testing.M) {
a.SetDefaults()
err = a.Setup(anxConfig)
if err != nil {
log.Fatal("Test Failed - ANX setup error", err)
log.Fatal("ANX setup error", err)
}
serverDetails, newClient, err := mock.NewVCRServer(mockFile)
if err != nil {
log.Fatalf("Test Failed - Mock server error %s", err)
log.Fatalf("Mock server error %s", err)
}
a.HTTPClient = newClient

View File

@@ -22,7 +22,7 @@ func TestGetCurrencies(t *testing.T) {
t.Parallel()
_, err := a.GetCurrencies()
if err != nil {
t.Fatalf("Test failed. TestGetCurrencies failed. Err: %s", err)
t.Fatalf("TestGetCurrencies failed. Err: %s", err)
}
}
@@ -30,7 +30,7 @@ func TestGetTradablePairs(t *testing.T) {
t.Parallel()
_, err := a.FetchTradablePairs(asset.Spot)
if err != nil {
t.Fatalf("Test failed. TestGetTradablePairs failed. Err: %s", err)
t.Fatalf("TestGetTradablePairs failed. Err: %s", err)
}
}
@@ -38,10 +38,10 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
ticker, err := a.GetTicker("BTCUSD")
if err != nil {
t.Errorf("Test Failed - ANX GetTicker() error: %s", err)
t.Errorf("ANX GetTicker() error: %s", err)
}
if ticker.Result != "success" {
t.Error("Test Failed - ANX GetTicker() unsuccessful")
t.Error("ANX GetTicker() unsuccessful")
}
}
@@ -49,10 +49,10 @@ func TestGetDepth(t *testing.T) {
t.Parallel()
depth, err := a.GetDepth("BTCUSD")
if err != nil {
t.Errorf("Test Failed - ANX GetDepth() error: %s", err)
t.Errorf("ANX GetDepth() error: %s", err)
}
if depth.Result != "success" {
t.Error("Test Failed - ANX GetDepth() unsuccessful")
t.Error("ANX GetDepth() unsuccessful")
}
}
@@ -60,13 +60,13 @@ func TestGetAPIKey(t *testing.T) {
t.Parallel()
apiKey, apiSecret, err := a.GetAPIKey("userName", "passWord", "", "1337")
if err == nil {
t.Error("Test Failed - ANX GetAPIKey() Incorrect")
t.Error("ANX GetAPIKey() Expected error")
}
if apiKey != "" {
t.Error("Test Failed - ANX GetAPIKey() Incorrect")
t.Error("ANX GetAPIKey() Expected error")
}
if apiSecret != "" {
t.Error("Test Failed - ANX GetAPIKey() Incorrect")
t.Error("ANX GetAPIKey() Expected error")
}
}
@@ -103,7 +103,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := a.GetFee(feeBuilder); resp != float64(0.02) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -111,7 +111,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := a.GetFee(feeBuilder); resp != float64(20000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(20000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(20000), resp)
t.Error(err)
}
@@ -119,7 +119,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := a.GetFee(feeBuilder); resp != float64(0.01) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.01), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.01), resp)
t.Error(err)
}
@@ -127,7 +127,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := a.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -135,7 +135,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := a.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -143,7 +143,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := a.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -152,7 +152,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := a.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -161,7 +161,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := a.GetFee(feeBuilder); resp != float64(250.01) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(250.01), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(250.01), resp)
t.Error(err)
}
}
@@ -208,7 +208,7 @@ func TestGetOrderHistory(t *testing.T) {
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - GetBalance() error", err)
t.Error("GetBalance() error", err)
}
}
@@ -307,11 +307,11 @@ func TestGetAccountInfo(t *testing.T) {
_, err := a.GetAccountInfo()
switch {
case areTestAPIKeysSet() && err != nil && !mockTests:
t.Error("test failed - GetAccountInfo() error:", err)
t.Error("GetAccountInfo() error:", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("test failed - GetAccountInfo() error")
t.Error("GetAccountInfo() error")
case mockTests && err != nil:
t.Error("test failed - GetAccountInfo() error:", err)
t.Error("GetAccountInfo() error:", err)
}
}
@@ -319,7 +319,7 @@ func TestModifyOrder(t *testing.T) {
t.Parallel()
_, err := a.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -373,9 +373,9 @@ func TestGetDepositAddress(t *testing.T) {
t.Parallel()
_, err := a.GetDepositAddress(currency.BTC, "")
if areTestAPIKeysSet() && err != nil && !mockTests {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
} else if !areTestAPIKeysSet() && err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}

View File

@@ -13,6 +13,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -80,9 +81,24 @@ func (a *ANX) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: false,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: false,
RESTCapabilities: protocol.Features{
TickerFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
TradeFee: true,
FiatWithdrawalFee: true,
CryptoWithdrawalFee: true,
},
WithdrawPermissions: exchange.WithdrawCryptoWithEmail |
exchange.AutoWithdrawCryptoWithSetup |

View File

@@ -9,7 +9,7 @@ import (
func TestString(t *testing.T) {
a := Spot
if a.String() != "spot" {
t.Fatal("Test failed - TestString returned an unexpected result")
t.Fatal("TestString returned an unexpected result")
}
}
@@ -18,7 +18,7 @@ func TestToStringArray(t *testing.T) {
result := a.Strings()
for x := range a {
if !common.StringDataCompare(result, a[x].String()) {
t.Fatal("Test failed - TestToStringArray returned an unexpected result")
t.Fatal("TestToStringArray returned an unexpected result")
}
}
}
@@ -26,60 +26,60 @@ func TestToStringArray(t *testing.T) {
func TestContains(t *testing.T) {
a := Items{Spot, Futures}
if a.Contains("meow") {
t.Fatal("Test failed - TestContains returned an unexpected result")
t.Fatal("TestContains returned an unexpected result")
}
if !a.Contains(Spot) {
t.Fatal("Test failed - TestContains returned an unexpected result")
t.Fatal("TestContains returned an unexpected result")
}
if a.Contains(Binary) {
t.Fatal("Test failed - TestContains returned an unexpected result")
t.Fatal("TestContains returned an unexpected result")
}
if !a.Contains("SpOt") {
t.Error("Test failed - TestContains returned an unexpected result")
t.Error("TestContains returned an unexpected result")
}
}
func TestJoinToString(t *testing.T) {
a := Items{Spot, Futures}
if a.JoinToString(",") != "spot,futures" {
t.Fatal("Test failed - TestJoinToString returned an unexpected result")
t.Fatal("TestJoinToString returned an unexpected result")
}
}
func TestIsValid(t *testing.T) {
if IsValid("rawr") {
t.Fatal("Test failed - TestIsValid returned an unexpected result")
t.Fatal("TestIsValid returned an unexpected result")
}
if !IsValid(Spot) {
t.Fatal("Test failed - TestIsValid returned an unexpected result")
t.Fatal("TestIsValid returned an unexpected result")
}
}
func TestNew(t *testing.T) {
a := New("Spota")
if a != nil {
t.Fatal("Test failed - TestNew returned an unexpected result")
t.Fatal("TestNew returned an unexpected result")
}
a = New("SpOt")
if a == nil {
t.Fatal("Test failed - TestNew returned an unexpected result")
t.Fatal("TestNew returned an unexpected result")
}
a = New("spot,futures")
if a.JoinToString(",") != "spot,futures" {
t.Fatal("Test failed - TestNew returned an unexpected result")
t.Fatal("TestNew returned an unexpected result")
}
if a := New("Spot_rawr"); a != nil {
t.Fatal("Test failed - TestNew returned an unexpected result")
t.Fatal("TestNew returned an unexpected result")
}
if a := New("Spot,Rawr"); a != nil {
t.Fatal("Test failed - TestNew returned an unexpected result")
t.Fatal("TestNew returned an unexpected result")
}
}

View File

@@ -19,11 +19,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Binance load config error", err)
log.Fatal("Binance load config error", err)
}
binanceConfig, err := cfg.GetExchangeConfig("Binance")
if err != nil {
log.Fatal("Test Failed - Binance Setup() init error", err)
log.Fatal("Binance Setup() init error", err)
}
binanceConfig.API.AuthenticatedSupport = true
binanceConfig.API.Credentials.Key = apiKey
@@ -31,7 +31,7 @@ func TestMain(m *testing.M) {
b.SetDefaults()
err = b.Setup(binanceConfig)
if err != nil {
log.Fatal("Test Failed - Binance setup error", err)
log.Fatal("Binance setup error", err)
}
log.Printf(sharedtestvalues.LiveTesting, b.GetName(), b.API.Endpoints.URL)
os.Exit(m.Run())

View File

@@ -22,11 +22,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Binance load config error", err)
log.Fatal("Binance load config error", err)
}
binanceConfig, err := cfg.GetExchangeConfig("Binance")
if err != nil {
log.Fatal("Test Failed - Binance Setup() init error", err)
log.Fatal("Binance Setup() init error", err)
}
b.SkipAuthCheck = true
binanceConfig.API.AuthenticatedSupport = true
@@ -35,12 +35,12 @@ func TestMain(m *testing.M) {
b.SetDefaults()
err = b.Setup(binanceConfig)
if err != nil {
log.Fatal("Test Failed - Binance setup error", err)
log.Fatal("Binance setup error", err)
}
serverDetails, newClient, err := mock.NewVCRServer(mockfile)
if err != nil {
log.Fatalf("Test Failed - Mock server error %s", err)
log.Fatalf("Mock server error %s", err)
}
b.HTTPClient = newClient

View File

@@ -36,7 +36,7 @@ func TestFetchTradablePairs(t *testing.T) {
_, err := b.FetchTradablePairs(asset.Spot)
if err != nil {
t.Error("Test Failed - Binance FetchTradablePairs(asset asets.AssetType) error", err)
t.Error("Binance FetchTradablePairs(asset asets.AssetType) error", err)
}
}
@@ -49,7 +49,7 @@ func TestGetOrderBook(t *testing.T) {
})
if err != nil {
t.Error("Test Failed - Binance GetOrderBook() error", err)
t.Error("Binance GetOrderBook() error", err)
}
}
@@ -62,7 +62,7 @@ func TestGetRecentTrades(t *testing.T) {
})
if err != nil {
t.Error("Test Failed - Binance GetRecentTrades() error", err)
t.Error("Binance GetRecentTrades() error", err)
}
}
@@ -71,10 +71,10 @@ func TestGetHistoricalTrades(t *testing.T) {
_, err := b.GetHistoricalTrades("BTCUSDT", 5, 0)
if !mockTests && err == nil {
t.Error("Test Failed - Binance GetHistoricalTrades() expecting error")
t.Error("Binance GetHistoricalTrades() expecting error")
}
if mockTests && err == nil {
t.Error("Test Failed - Binance GetHistoricalTrades() error", err)
t.Error("Binance GetHistoricalTrades() error", err)
}
}
@@ -83,7 +83,7 @@ func TestGetAggregatedTrades(t *testing.T) {
_, err := b.GetAggregatedTrades("BTCUSDT", 5)
if err != nil {
t.Error("Test Failed - Binance GetAggregatedTrades() error", err)
t.Error("Binance GetAggregatedTrades() error", err)
}
}
@@ -96,7 +96,7 @@ func TestGetSpotKline(t *testing.T) {
Limit: 24,
})
if err != nil {
t.Error("Test Failed - Binance GetSpotKline() error", err)
t.Error("Binance GetSpotKline() error", err)
}
}
@@ -105,7 +105,7 @@ func TestGetAveragePrice(t *testing.T) {
_, err := b.GetAveragePrice("BTCUSDT")
if err != nil {
t.Error("Test Failed - Binance GetAveragePrice() error", err)
t.Error("Binance GetAveragePrice() error", err)
}
}
@@ -114,7 +114,7 @@ func TestGetPriceChangeStats(t *testing.T) {
_, err := b.GetPriceChangeStats("BTCUSDT")
if err != nil {
t.Error("Test Failed - Binance GetPriceChangeStats() error", err)
t.Error("Binance GetPriceChangeStats() error", err)
}
}
@@ -123,7 +123,7 @@ func TestGetTickers(t *testing.T) {
_, err := b.GetTickers()
if err != nil {
t.Error("Test Failed - Binance TestGetTickers error", err)
t.Error("Binance TestGetTickers error", err)
}
}
@@ -132,7 +132,7 @@ func TestGetLatestSpotPrice(t *testing.T) {
_, err := b.GetLatestSpotPrice("BTCUSDT")
if err != nil {
t.Error("Test Failed - Binance GetLatestSpotPrice() error", err)
t.Error("Binance GetLatestSpotPrice() error", err)
}
}
@@ -141,7 +141,7 @@ func TestGetBestPrice(t *testing.T) {
_, err := b.GetBestPrice("BTCUSDT")
if err != nil {
t.Error("Test Failed - Binance GetBestPrice() error", err)
t.Error("Binance GetBestPrice() error", err)
}
}
@@ -151,11 +151,11 @@ func TestQueryOrder(t *testing.T) {
_, err := b.QueryOrder("BTCUSDT", "", 1337)
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - QueryOrder() error", err)
t.Error("QueryOrder() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - QueryOrder() expecting an error when no keys are set")
t.Error("QueryOrder() expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock QueryOrder() error", err)
t.Error("Mock QueryOrder() error", err)
}
}
@@ -165,11 +165,11 @@ func TestOpenOrders(t *testing.T) {
_, err := b.OpenOrders("BTCUSDT")
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - OpenOrders() error", err)
t.Error("OpenOrders() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - OpenOrders() expecting an error when no keys are set")
t.Error("OpenOrders() expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock OpenOrders() error", err)
t.Error("Mock OpenOrders() error", err)
}
}
@@ -179,11 +179,11 @@ func TestAllOrders(t *testing.T) {
_, err := b.AllOrders("BTCUSDT", "", "")
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - AllOrders() error", err)
t.Error("AllOrders() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - AllOrders() expecting an error when no keys are set")
t.Error("AllOrders() expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock AllOrders() error", err)
t.Error("Mock AllOrders() error", err)
}
}
@@ -213,7 +213,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := b.GetFee(feeBuilder); resp != float64(0.1) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -221,7 +221,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := b.GetFee(feeBuilder); resp != float64(100000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(100000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(100000), resp)
t.Error(err)
}
@@ -229,7 +229,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := b.GetFee(feeBuilder); resp != float64(0.1) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.1), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.1), resp)
t.Error(err)
}
@@ -237,7 +237,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -247,7 +247,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0.0005) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Error(err)
}
@@ -255,7 +255,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -264,7 +264,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -273,7 +273,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -307,11 +307,11 @@ func TestGetActiveOrders(t *testing.T) {
_, err = b.GetActiveOrders(&getOrdersRequest)
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - GetActiveOrders() error", err)
t.Error("GetActiveOrders() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - GetActiveOrders() expecting an error when no keys are set")
t.Error("GetActiveOrders() expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock GetActiveOrders() error", err)
t.Error("Mock GetActiveOrders() error", err)
}
}
@@ -334,11 +334,11 @@ func TestGetOrderHistory(t *testing.T) {
_, err = b.GetOrderHistory(&getOrdersRequest)
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - GetOrderHistory() error", err)
t.Error("GetOrderHistory() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - GetOrderHistory() expecting an error when no keys are set")
t.Error("GetOrderHistory() expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock GetOrderHistory() error", err)
t.Error("Mock GetOrderHistory() error", err)
}
}
@@ -368,11 +368,11 @@ func TestSubmitOrder(t *testing.T) {
_, err := b.SubmitOrder(orderSubmission)
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - SubmitOrder() error", err)
t.Error("SubmitOrder() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - SubmitOrder() expecting an error when no keys are set")
t.Error("SubmitOrder() expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock SubmitOrder() error", err)
t.Error("Mock SubmitOrder() error", err)
}
}
@@ -393,11 +393,11 @@ func TestCancelExchangeOrder(t *testing.T) {
err := b.CancelOrder(orderCancellation)
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - CancelExchangeOrder() error", err)
t.Error("CancelExchangeOrder() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - CancelExchangeOrder() expecting an error when no keys are set")
t.Error("CancelExchangeOrder() expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock CancelExchangeOrder() error", err)
t.Error("Mock CancelExchangeOrder() error", err)
}
}
@@ -418,11 +418,11 @@ func TestCancelAllExchangeOrders(t *testing.T) {
_, err := b.CancelAllOrders(orderCancellation)
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - CancelAllExchangeOrders() error", err)
t.Error("CancelAllExchangeOrders() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - CancelAllExchangeOrders() expecting an error when no keys are set")
t.Error("CancelAllExchangeOrders() expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock CancelAllExchangeOrders() error", err)
t.Error("Mock CancelAllExchangeOrders() error", err)
}
}
@@ -432,11 +432,11 @@ func TestGetAccountInfo(t *testing.T) {
_, err := b.GetAccountInfo()
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - GetAccountInfo() error", err)
t.Error("GetAccountInfo() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - GetAccountInfo() expecting an error when no keys are set")
t.Error("GetAccountInfo() expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock GetAccountInfo() error", err)
t.Error("Mock GetAccountInfo() error", err)
}
}
@@ -445,7 +445,7 @@ func TestModifyOrder(t *testing.T) {
_, err := b.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error cannot be nil")
t.Error("ModifyOrder() error cannot be nil")
}
}
@@ -468,11 +468,11 @@ func TestWithdraw(t *testing.T) {
_, err := b.WithdrawCryptocurrencyFunds(&withdrawCryptoRequest)
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - Withdraw() error", err)
t.Error("Withdraw() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - Withdraw() expecting an error when no keys are set")
t.Error("Withdraw() expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock Withdraw() error", err)
t.Error("Mock Withdraw() error", err)
}
}
@@ -502,10 +502,10 @@ func TestGetDepositAddress(t *testing.T) {
_, err := b.GetDepositAddress(currency.BTC, "")
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
case mockTests && err != nil:
t.Error("Test Failed - Mock GetDepositAddress() error", err)
t.Error("Mock GetDepositAddress() error", err)
}
}

View File

@@ -14,6 +14,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -71,9 +72,32 @@ func (b *Binance) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
TradeFetching: true,
UserTradeHistory: true,
TradeFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TradeFetching: true,
TickerFetching: true,
KlineFetching: true,
OrderbookFetching: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.NoFiatWithdrawals,
@@ -92,10 +116,6 @@ func (b *Binance) SetDefaults() {
b.API.Endpoints.URL = b.API.Endpoints.URLDefault
b.Websocket = wshandler.New()
b.API.Endpoints.WebsocketURL = binanceDefaultWebsocketURL
b.Websocket.Functionality = wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketTickerSupported |
wshandler.WebsocketKlineSupported |
wshandler.WebsocketOrderbookSupported
b.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
b.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
b.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -123,6 +143,7 @@ func (b *Binance) Setup(exch *config.ExchangeConfig) error {
ExchangeName: exch.Name,
RunningURL: exch.API.Endpoints.WebsocketURL,
Connector: b.WsConnect,
Features: &b.Features.Supports.WebsocketCapabilities,
})
if err != nil {

View File

@@ -30,21 +30,21 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - Bitfinex load config error", err)
t.Fatal("Bitfinex load config error", err)
}
bfxConfig, err := cfg.GetExchangeConfig("Bitfinex")
if err != nil {
t.Error("Test Failed - Bitfinex Setup() init error")
t.Error("Bitfinex Setup() init error")
}
err = b.Setup(bfxConfig)
if err != nil {
t.Fatal("Test Failed - Bitfinex setup error", err)
t.Fatal("Bitfinex setup error", err)
}
b.API.Credentials.Key = apiKey
b.API.Credentials.Secret = apiSecret
if !b.Enabled || b.API.AuthenticatedSupport ||
b.Verbose || b.Websocket.IsEnabled() || len(b.BaseCurrencies) < 1 {
t.Error("Test Failed - Bitfinex Setup values not set correctly")
t.Error("Bitfinex Setup values not set correctly")
}
b.API.AuthenticatedSupport = true
@@ -98,7 +98,7 @@ func TestGetTicker(t *testing.T) {
_, err = b.GetTicker("wigwham")
if err == nil {
t.Error("Test Failed - GetTicker() error")
t.Error("GetTicker() Expected error")
}
}
@@ -132,7 +132,7 @@ func TestGetStats(t *testing.T) {
_, err = b.GetStats("wigwham")
if err == nil {
t.Error("Test Failed - GetStats() error")
t.Error("GetStats() Expected error")
}
}
@@ -144,7 +144,7 @@ func TestGetFundingBook(t *testing.T) {
}
_, err = b.GetFundingBook("wigwham")
if err == nil {
t.Error("Testing Failed - GetFundingBook() error")
t.Error("Testing Failed - GetFundingBook() Expected error")
}
}
@@ -271,7 +271,7 @@ func TestGetAccountInfo(t *testing.T) {
_, err := b.GetAccountInfo()
if err != nil {
t.Error("Test Failed - GetAccountInfo error", err)
t.Error("GetAccountInfo error", err)
}
}
@@ -283,7 +283,7 @@ func TestGetAccountFees(t *testing.T) {
_, err := b.GetAccountFees()
if err == nil {
t.Error("Test Failed - GetAccountFees error")
t.Error("GetAccountFees Expected error")
}
}
@@ -295,7 +295,7 @@ func TestGetAccountSummary(t *testing.T) {
_, err := b.GetAccountSummary()
if err == nil {
t.Error("Test Failed - GetAccountSummary() error:")
t.Error("GetAccountSummary() Expected error")
}
}
@@ -307,7 +307,7 @@ func TestNewDeposit(t *testing.T) {
_, err := b.NewDeposit("blabla", "testwallet", 1)
if err == nil {
t.Error("Test Failed - NewDeposit() error:", err)
t.Error("NewDeposit() Expected error")
}
}
@@ -319,7 +319,7 @@ func TestGetKeyPermissions(t *testing.T) {
_, err := b.GetKeyPermissions()
if err == nil {
t.Error("Test Failed - GetKeyPermissions() error:")
t.Error("GetKeyPermissions() Expected error")
}
}
@@ -331,7 +331,7 @@ func TestGetMarginInfo(t *testing.T) {
_, err := b.GetMarginInfo()
if err == nil {
t.Error("Test Failed - GetMarginInfo() error")
t.Error("GetMarginInfo() Expected error")
}
}
@@ -343,7 +343,7 @@ func TestGetAccountBalance(t *testing.T) {
_, err := b.GetAccountBalance()
if err == nil {
t.Error("Test Failed - GetAccountBalance() error")
t.Error("GetAccountBalance() Expected error")
}
}
@@ -355,7 +355,7 @@ func TestWalletTransfer(t *testing.T) {
_, err := b.WalletTransfer(0.01, "bla", "bla", "bla")
if err == nil {
t.Error("Test Failed - WalletTransfer() error")
t.Error("WalletTransfer() Expected error")
}
}
@@ -368,7 +368,7 @@ func TestNewOrder(t *testing.T) {
_, err := b.NewOrder("BTCUSD", 1, 2, true,
exchange.LimitOrderType.ToLower().ToString(), false)
if err == nil {
t.Error("Test Failed - NewOrder() error")
t.Error("NewOrder() Expected error")
}
}
@@ -391,7 +391,7 @@ func TestNewOrderMulti(t *testing.T) {
_, err := b.NewOrderMulti(newOrder)
if err == nil {
t.Error("Test Failed - NewOrderMulti() error")
t.Error("NewOrderMulti() Expected error")
}
}
@@ -403,7 +403,7 @@ func TestCancelOrder(t *testing.T) {
_, err := b.CancelExistingOrder(1337)
if err == nil {
t.Error("Test Failed - CancelExistingOrder() error")
t.Error("CancelExistingOrder() Expected error")
}
}
@@ -415,7 +415,7 @@ func TestCancelMultipleOrders(t *testing.T) {
_, err := b.CancelMultipleOrders([]int64{1337, 1336})
if err == nil {
t.Error("Test Failed - CancelMultipleOrders() error")
t.Error("CancelMultipleOrders() Expected error")
}
}
@@ -427,7 +427,7 @@ func TestCancelAllOrders(t *testing.T) {
_, err := b.CancelAllExistingOrders()
if err == nil {
t.Error("Test Failed - CancelAllExistingOrders() error")
t.Error("CancelAllExistingOrders() Expected error")
}
}
@@ -440,7 +440,7 @@ func TestReplaceOrder(t *testing.T) {
_, err := b.ReplaceOrder(1337, "BTCUSD",
1, 1, true, exchange.LimitOrderType.ToLower().ToString(), false)
if err == nil {
t.Error("Test Failed - ReplaceOrder() error")
t.Error("ReplaceOrder() Expected error")
}
}
@@ -452,7 +452,7 @@ func TestGetOrderStatus(t *testing.T) {
_, err := b.GetOrderStatus(1337)
if err == nil {
t.Error("Test Failed - GetOrderStatus() error")
t.Error("GetOrderStatus() Expected error")
}
}
@@ -464,7 +464,7 @@ func TestGetOpenOrders(t *testing.T) {
_, err := b.GetOpenOrders()
if err == nil {
t.Error("Test Failed - GetOpenOrders() error")
t.Error("GetOpenOrders() Expectederror")
}
}
@@ -476,7 +476,7 @@ func TestGetActivePositions(t *testing.T) {
_, err := b.GetActivePositions()
if err == nil {
t.Error("Test Failed - GetActivePositions() error")
t.Error("GetActivePositions() Expected error")
}
}
@@ -488,7 +488,7 @@ func TestClaimPosition(t *testing.T) {
_, err := b.ClaimPosition(1337)
if err == nil {
t.Error("Test Failed - ClaimPosition() error")
t.Error("ClaimPosition() Expected error")
}
}
@@ -500,7 +500,7 @@ func TestGetBalanceHistory(t *testing.T) {
_, err := b.GetBalanceHistory("USD", time.Time{}, time.Time{}, 1, "deposit")
if err == nil {
t.Error("Test Failed - GetBalanceHistory() error")
t.Error("GetBalanceHistory() Expected error")
}
}
@@ -512,7 +512,7 @@ func TestGetMovementHistory(t *testing.T) {
_, err := b.GetMovementHistory("USD", "bitcoin", time.Time{}, time.Time{}, 1)
if err == nil {
t.Error("Test Failed - GetMovementHistory() error")
t.Error("GetMovementHistory() Expected error")
}
}
@@ -524,7 +524,7 @@ func TestGetTradeHistory(t *testing.T) {
_, err := b.GetTradeHistory("BTCUSD", time.Time{}, time.Time{}, 1, 0)
if err == nil {
t.Error("Test Failed - GetTradeHistory() error")
t.Error("GetTradeHistory() Expected error")
}
}
@@ -536,7 +536,7 @@ func TestNewOffer(t *testing.T) {
_, err := b.NewOffer("BTC", 1, 1, 1, "loan")
if err == nil {
t.Error("Test Failed - NewOffer() error")
t.Error("NewOffer() Expected error")
}
}
@@ -548,7 +548,7 @@ func TestCancelOffer(t *testing.T) {
_, err := b.CancelOffer(1337)
if err == nil {
t.Error("Test Failed - CancelOffer() error")
t.Error("CancelOffer() Expected error")
}
}
@@ -560,7 +560,7 @@ func TestGetOfferStatus(t *testing.T) {
_, err := b.GetOfferStatus(1337)
if err == nil {
t.Error("Test Failed - NewOffer() error")
t.Error("NewOffer() Expected error")
}
}
@@ -572,7 +572,7 @@ func TestGetActiveCredits(t *testing.T) {
_, err := b.GetActiveCredits()
if err == nil {
t.Error("Test Failed - GetActiveCredits() error", err)
t.Error("GetActiveCredits() Expected error")
}
}
@@ -584,7 +584,7 @@ func TestGetActiveOffers(t *testing.T) {
_, err := b.GetActiveOffers()
if err == nil {
t.Error("Test Failed - GetActiveOffers() error", err)
t.Error("GetActiveOffers() Expected error")
}
}
@@ -596,7 +596,7 @@ func TestGetActiveMarginFunding(t *testing.T) {
_, err := b.GetActiveMarginFunding()
if err == nil {
t.Error("Test Failed - GetActiveMarginFunding() error", err)
t.Error("GetActiveMarginFunding() Expected error")
}
}
@@ -608,7 +608,7 @@ func TestGetUnusedMarginFunds(t *testing.T) {
_, err := b.GetUnusedMarginFunds()
if err == nil {
t.Error("Test Failed - GetUnusedMarginFunds() error", err)
t.Error("GetUnusedMarginFunds() Expected error")
}
}
@@ -620,7 +620,7 @@ func TestGetMarginTotalTakenFunds(t *testing.T) {
_, err := b.GetMarginTotalTakenFunds()
if err == nil {
t.Error("Test Failed - GetMarginTotalTakenFunds() error", err)
t.Error("GetMarginTotalTakenFunds() Expected error")
}
}
@@ -632,7 +632,7 @@ func TestCloseMarginFunding(t *testing.T) {
_, err := b.CloseMarginFunding(1337)
if err == nil {
t.Error("Test Failed - CloseMarginFunding() error")
t.Error("CloseMarginFunding() Expected error")
}
}
@@ -669,7 +669,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := b.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -677,7 +677,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := b.GetFee(feeBuilder); resp != float64(2000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Error(err)
}
@@ -685,7 +685,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := b.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Error(err)
}
@@ -693,7 +693,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -701,7 +701,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0.0004) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0004), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0004), resp)
t.Error(err)
}
}
@@ -710,7 +710,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -719,7 +719,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Error(err)
}
@@ -728,7 +728,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Error(err)
}
}
@@ -869,7 +869,7 @@ func TestCancelAllExchangeOrdera(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := b.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -978,12 +978,12 @@ func TestGetDepositAddress(t *testing.T) {
if areTestAPIKeysSet() {
_, err := b.GetDepositAddress(currency.BTC, "deposit")
if err != nil {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
}
} else {
_, err := b.GetDepositAddress(currency.BTC, "deposit")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}
}

View File

@@ -15,6 +15,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -70,9 +71,39 @@ func (b *Bitfinex) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
FiatWithdraw: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
SubmitOrders: true,
ModifyOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
TradeFetching: true,
UserTradeHistory: true,
TradeFee: true,
FiatDepositFee: true,
FiatWithdrawalFee: true,
CryptoDepositFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
Subscribe: true,
Unsubscribe: true,
AuthenticatedEndpoints: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithAPIPermission |
exchange.AutoWithdrawFiatWithAPIPermission,
@@ -91,12 +122,6 @@ func (b *Bitfinex) SetDefaults() {
b.API.Endpoints.URL = b.API.Endpoints.URLDefault
b.API.Endpoints.WebsocketURL = bitfinexWebsocket
b.Websocket = wshandler.New()
b.Websocket.Functionality = wshandler.WebsocketTickerSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported
b.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
b.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
b.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -126,6 +151,7 @@ func (b *Bitfinex) Setup(exch *config.ExchangeConfig) error {
Connector: b.WsConnect,
Subscriber: b.Subscribe,
UnSubscriber: b.Unsubscribe,
Features: &b.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -28,11 +28,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - Bitflyer load config error", err)
t.Fatal("Bitflyer load config error", err)
}
bitflyerConfig, err := cfg.GetExchangeConfig("Bitflyer")
if err != nil {
t.Error("Test Failed - bitflyer Setup() init error")
t.Error("bitflyer Setup() init error")
}
bitflyerConfig.API.AuthenticatedSupport = true
@@ -41,7 +41,7 @@ func TestSetup(t *testing.T) {
err = b.Setup(bitflyerConfig)
if err != nil {
t.Fatal("Test Failed - Bitflyer setup error", err)
t.Fatal("Bitflyer setup error", err)
}
}
@@ -49,7 +49,7 @@ func TestGetLatestBlockCA(t *testing.T) {
t.Parallel()
_, err := b.GetLatestBlockCA()
if err != nil {
t.Error("test failed - Bitflyer - GetLatestBlockCA() error:", err)
t.Error("Bitflyer - GetLatestBlockCA() error:", err)
}
}
@@ -57,7 +57,7 @@ func TestGetBlockCA(t *testing.T) {
t.Parallel()
_, err := b.GetBlockCA("000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f")
if err != nil {
t.Error("test failed - Bitflyer - GetBlockCA() error:", err)
t.Error("Bitflyer - GetBlockCA() error:", err)
}
}
@@ -65,7 +65,7 @@ func TestGetBlockbyHeightCA(t *testing.T) {
t.Parallel()
_, err := b.GetBlockbyHeightCA(0)
if err != nil {
t.Error("test failed - Bitflyer - GetBlockbyHeightCA() error:", err)
t.Error("Bitflyer - GetBlockbyHeightCA() error:", err)
}
}
@@ -73,7 +73,7 @@ func TestGetTransactionByHashCA(t *testing.T) {
t.Parallel()
_, err := b.GetTransactionByHashCA("0562d1f063cd4127053d838b165630445af5e480ceb24e1fd9ecea52903cb772")
if err != nil {
t.Error("test failed - Bitflyer - GetTransactionByHashCA() error:", err)
t.Error("Bitflyer - GetTransactionByHashCA() error:", err)
}
}
@@ -81,7 +81,7 @@ func TestGetAddressInfoCA(t *testing.T) {
t.Parallel()
v, err := b.GetAddressInfoCA("1F5zVDgNjorJ51oGebSvNCrSAHpwGkUdDB")
if err != nil {
t.Error("test failed - Bitflyer - GetAddressInfoCA() error:", err)
t.Error("Bitflyer - GetAddressInfoCA() error:", err)
}
if v.UnconfirmedBalance == 0 || v.ConfirmedBalance == 0 {
log.Warn(log.ExchangeSys, "Donation wallet is empty :( - please consider donating")
@@ -92,7 +92,7 @@ func TestGetMarkets(t *testing.T) {
t.Parallel()
_, err := b.GetMarkets()
if err != nil {
t.Error("test failed - Bitflyer - GetMarkets() error:", err)
t.Error("Bitflyer - GetMarkets() error:", err)
}
}
@@ -100,7 +100,7 @@ func TestGetOrderBook(t *testing.T) {
t.Parallel()
_, err := b.GetOrderBook("BTC_JPY")
if err != nil {
t.Error("test failed - Bitflyer - GetOrderBook() error:", err)
t.Error("Bitflyer - GetOrderBook() error:", err)
}
}
@@ -108,7 +108,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := b.GetTicker("BTC_JPY")
if err != nil {
t.Error("test failed - Bitflyer - GetTicker() error:", err)
t.Error("Bitflyer - GetTicker() error:", err)
}
}
@@ -116,7 +116,7 @@ func TestGetExecutionHistory(t *testing.T) {
t.Parallel()
_, err := b.GetExecutionHistory("BTC_JPY")
if err != nil {
t.Error("test failed - Bitflyer - GetExecutionHistory() error:", err)
t.Error("Bitflyer - GetExecutionHistory() error:", err)
}
}
@@ -124,7 +124,7 @@ func TestGetExchangeStatus(t *testing.T) {
t.Parallel()
_, err := b.GetExchangeStatus()
if err != nil {
t.Error("test failed - Bitflyer - GetExchangeStatus() error:", err)
t.Error("Bitflyer - GetExchangeStatus() error:", err)
}
}
@@ -133,7 +133,7 @@ func TestCheckFXString(t *testing.T) {
p := currency.NewPairDelimiter("FXBTC_JPY", "_")
p = b.CheckFXString(p)
if p.Base.String() != "FX_BTC" {
t.Error("test failed - Bitflyer - CheckFXString() error")
t.Error("Bitflyer - CheckFXString() error")
}
}
@@ -151,7 +151,7 @@ func TestFetchTicker(t *testing.T) {
_, err := b.FetchTicker(p, asset.Spot)
if err != nil {
t.Error("test failed - Bitflyer - FetchTicker() error", err)
t.Error("Bitflyer - FetchTicker() error", err)
}
}
@@ -190,7 +190,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -198,7 +198,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -206,7 +206,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := b.GetFee(feeBuilder); resp != float64(0.1) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.1), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.1), resp)
t.Error(err)
}
@@ -214,7 +214,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -222,7 +222,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -231,7 +231,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -240,7 +240,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.JPY
if resp, err := b.GetFee(feeBuilder); resp != float64(324) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(324), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(324), resp)
t.Error(err)
}
@@ -249,7 +249,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.JPY
if resp, err := b.GetFee(feeBuilder); resp != float64(540) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(540), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(540), resp)
t.Error(err)
}
}
@@ -397,7 +397,7 @@ func TestWithdraw(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := b.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}

View File

@@ -11,6 +11,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -68,9 +69,13 @@ func (b *Bitflyer) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: false,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: false,
RESTCapabilities: protocol.Features{
TickerFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
TradeFee: true,
FiatDepositFee: true,
FiatWithdrawalFee: true,
},
WithdrawPermissions: exchange.WithdrawCryptoViaWebsiteOnly |
exchange.AutoWithdrawFiat,

View File

@@ -26,11 +26,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - Bithumb load config error", err)
t.Fatal("Bithumb load config error", err)
}
bitConfig, err := cfg.GetExchangeConfig("Bithumb")
if err != nil {
t.Error("Test Failed - Bithumb Setup() init error")
t.Error("Bithumb Setup() init error")
}
bitConfig.API.AuthenticatedSupport = true
@@ -39,7 +39,7 @@ func TestSetup(t *testing.T) {
err = b.Setup(bitConfig)
if err != nil {
t.Fatal("Test Failed - Bithumb setup error", err)
t.Fatal("Bithumb setup error", err)
}
}
@@ -47,7 +47,7 @@ func TestGetTradablePairs(t *testing.T) {
t.Parallel()
_, err := b.GetTradablePairs()
if err != nil {
t.Error("test failed - Bithumb GetTradablePairs() error", err)
t.Error("Bithumb GetTradablePairs() error", err)
}
}
@@ -55,7 +55,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := b.GetTicker("btc")
if err != nil {
t.Error("test failed - Bithumb GetTicker() error", err)
t.Error("Bithumb GetTicker() error", err)
}
}
@@ -63,7 +63,7 @@ func TestGetAllTickers(t *testing.T) {
t.Parallel()
_, err := b.GetAllTickers()
if err != nil {
t.Error("test failed - Bithumb GetAllTickers() error", err)
t.Error("Bithumb GetAllTickers() error", err)
}
}
@@ -71,7 +71,7 @@ func TestGetOrderBook(t *testing.T) {
t.Parallel()
_, err := b.GetOrderBook("btc")
if err != nil {
t.Error("test failed - Bithumb GetOrderBook() error", err)
t.Error("Bithumb GetOrderBook() error", err)
}
}
@@ -79,7 +79,7 @@ func TestGetTransactionHistory(t *testing.T) {
t.Parallel()
_, err := b.GetTransactionHistory("btc")
if err != nil {
t.Error("test failed - Bithumb GetTransactionHistory() error", err)
t.Error("Bithumb GetTransactionHistory() error", err)
}
}
@@ -91,7 +91,7 @@ func TestGetAccountBalance(t *testing.T) {
_, err := b.GetAccountBalance("BTC")
if err == nil {
t.Error("test failed - Bithumb GetAccountBalance() error", err)
t.Error("Bithumb GetAccountBalance() Expected error")
}
}
@@ -103,7 +103,7 @@ func TestGetWalletAddress(t *testing.T) {
t.Parallel()
_, err := b.GetWalletAddress("")
if err == nil {
t.Error("test failed - Bithumb GetWalletAddress() error", err)
t.Error("Bithumb GetWalletAddress() Expected error")
}
}
@@ -111,7 +111,7 @@ func TestGetLastTransaction(t *testing.T) {
t.Parallel()
_, err := b.GetLastTransaction()
if err == nil {
t.Error("test failed - Bithumb GetLastTransaction() error", err)
t.Error("Bithumb GetLastTransaction() Expected error")
}
}
@@ -119,7 +119,7 @@ func TestGetOrders(t *testing.T) {
t.Parallel()
_, err := b.GetOrders("1337", "bid", "100", "", "BTC")
if err == nil {
t.Error("test failed - Bithumb GetOrders() error", err)
t.Error("Bithumb GetOrders() Expected error")
}
}
@@ -127,7 +127,7 @@ func TestGetUserTransactions(t *testing.T) {
t.Parallel()
_, err := b.GetUserTransactions()
if err == nil {
t.Error("test failed - Bithumb GetUserTransactions() error", err)
t.Error("Bithumb GetUserTransactions() Expected error")
}
}
@@ -135,7 +135,7 @@ func TestPlaceTrade(t *testing.T) {
t.Parallel()
_, err := b.PlaceTrade("btc", "bid", 0, 0)
if err == nil {
t.Error("test failed - Bithumb PlaceTrade() error", err)
t.Error("Bithumb PlaceTrade() Expected error")
}
}
@@ -143,7 +143,7 @@ func TestGetOrderDetails(t *testing.T) {
t.Parallel()
_, err := b.GetOrderDetails("1337", "bid", "btc")
if err == nil {
t.Error("test failed - Bithumb GetOrderDetails() error", err)
t.Error("Bithumb GetOrderDetails() Expected error")
}
}
@@ -151,7 +151,7 @@ func TestCancelTrade(t *testing.T) {
t.Parallel()
_, err := b.CancelTrade("", "", "")
if err == nil {
t.Error("test failed - Bithumb CancelTrade() error", err)
t.Error("Bithumb CancelTrade() Expected error")
}
}
@@ -159,7 +159,7 @@ func TestWithdrawCrypto(t *testing.T) {
t.Parallel()
_, err := b.WithdrawCrypto("LQxiDhKU7idKiWQhx4ALKYkBx8xKEQVxJR", "", "ltc", 0)
if err == nil {
t.Error("test failed - Bithumb WithdrawCrypto() error", err)
t.Error("Bithumb WithdrawCrypto() Expected error")
}
}
@@ -170,7 +170,7 @@ func TestRequestKRWDepositDetails(t *testing.T) {
}
_, err := b.RequestKRWDepositDetails()
if err == nil {
t.Error("test failed - Bithumb RequestKRWDepositDetails() error", err)
t.Error("Bithumb RequestKRWDepositDetails() Expected error")
}
}
@@ -178,7 +178,7 @@ func TestRequestKRWWithdraw(t *testing.T) {
t.Parallel()
_, err := b.RequestKRWWithdraw("102_bank", "1337", 1000)
if err == nil {
t.Error("test failed - Bithumb RequestKRWWithdraw() error", err)
t.Error("Bithumb RequestKRWWithdraw() Expected error")
}
}
@@ -186,7 +186,7 @@ func TestMarketBuyOrder(t *testing.T) {
t.Parallel()
_, err := b.MarketBuyOrder("btc", 0)
if err == nil {
t.Error("test failed - Bithumb MarketBuyOrder() error", err)
t.Error("Bithumb MarketBuyOrder() Expected error")
}
}
@@ -194,7 +194,7 @@ func TestMarketSellOrder(t *testing.T) {
t.Parallel()
_, err := b.MarketSellOrder("btc", 0)
if err == nil {
t.Error("test failed - Bithumb MarketSellOrder() error", err)
t.Error("Bithumb MarketSellOrder() Expected error")
}
}
@@ -230,7 +230,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := b.GetFee(feeBuilder); resp != float64(0.0025) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0025), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0025), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -238,7 +238,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := b.GetFee(feeBuilder); resp != float64(2500) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2500), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2500), resp)
t.Error(err)
}
@@ -246,7 +246,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := b.GetFee(feeBuilder); resp != float64(0.0025) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0025), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0025), resp)
t.Error(err)
}
@@ -254,7 +254,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -262,7 +262,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Error(err)
}
@@ -270,7 +270,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -279,7 +279,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -288,7 +288,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -432,12 +432,12 @@ func TestGetAccountInfo(t *testing.T) {
if apiKey != "" || apiSecret != "" {
_, err := b.GetAccountInfo()
if err != nil {
t.Error("test failed - Bithumb GetAccountInfo() error", err)
t.Error("Bithumb GetAccountInfo() error", err)
}
} else {
_, err := b.GetAccountInfo()
if err == nil {
t.Error("test failed - Bithumb GetAccountInfo() error")
t.Error("Bithumb GetAccountInfo() Expected error")
}
}
}
@@ -450,7 +450,7 @@ func TestModifyOrder(t *testing.T) {
OrderSide: exchange.SellOrderSide,
CurrencyPair: curr})
if err == nil {
t.Error("Test Failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -534,12 +534,12 @@ func TestGetDepositAddress(t *testing.T) {
if apiKey != "" && apiSecret != "" {
_, err := b.GetDepositAddress(currency.BTC, "")
if err != nil {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
}
} else {
_, err := b.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}
}

View File

@@ -15,6 +15,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -70,9 +71,27 @@ func (b *Bithumb) SetDefaults() {
b.Features = exchange.Features{
Supports: exchange.FeaturesSupported{
REST: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
CryptoWithdrawal: true,
FiatDeposit: true,
FiatWithdraw: true,
GetOrder: true,
CancelOrder: true,
SubmitOrder: true,
ModifyOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
TradeFee: true,
FiatWithdrawalFee: true,
CryptoDepositFee: true,
CryptoWithdrawalFee: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.AutoWithdrawFiat,

View File

@@ -32,11 +32,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - Bitmex load config error", err)
t.Fatal("Bitmex load config error", err)
}
bitmexConfig, err := cfg.GetExchangeConfig("Bitmex")
if err != nil {
t.Error("Test Failed - Bitmex Setup() init error")
t.Error("Bitmex Setup() init error")
}
bitmexConfig.API.AuthenticatedSupport = true
@@ -46,7 +46,7 @@ func TestSetup(t *testing.T) {
err = b.Setup(bitmexConfig)
if err != nil {
t.Fatal("Test Failed - Bitmex setup error", err)
t.Fatal("Bitmex setup error", err)
}
}
@@ -59,42 +59,42 @@ func TestStart(t *testing.T) {
func TestGetUrgentAnnouncement(t *testing.T) {
_, err := b.GetUrgentAnnouncement()
if err == nil {
t.Error("test failed - GetUrgentAnnouncement() error", err)
t.Error("GetUrgentAnnouncement() Expected error")
}
}
func TestGetAPIKeys(t *testing.T) {
_, err := b.GetAPIKeys()
if err == nil {
t.Error("test failed - GetAPIKeys() error", err)
t.Error("GetAPIKeys() Expected error")
}
}
func TestRemoveAPIKey(t *testing.T) {
_, err := b.RemoveAPIKey(APIKeyParams{APIKeyID: "1337"})
if err == nil {
t.Error("test failed - RemoveAPIKey() error", err)
t.Error("RemoveAPIKey() Expected error")
}
}
func TestDisableAPIKey(t *testing.T) {
_, err := b.DisableAPIKey(APIKeyParams{APIKeyID: "1337"})
if err == nil {
t.Error("test failed - DisableAPIKey() error", err)
t.Error("DisableAPIKey() Expected error")
}
}
func TestEnableAPIKey(t *testing.T) {
_, err := b.EnableAPIKey(APIKeyParams{APIKeyID: "1337"})
if err == nil {
t.Error("test failed - EnableAPIKey() error", err)
t.Error("EnableAPIKey() Expected error")
}
}
func TestGetTrollboxMessages(t *testing.T) {
_, err := b.GetTrollboxMessages(ChatGetParams{Count: 5})
if err != nil {
t.Error("test failed - GetTrollboxMessages() error", err)
t.Error("GetTrollboxMessages() error", err)
}
}
@@ -103,126 +103,126 @@ func TestSendTrollboxMessage(t *testing.T) {
ChannelID: 1337,
Message: "Hello,World!"})
if err == nil {
t.Error("test failed - SendTrollboxMessage() error", err)
t.Error("SendTrollboxMessage() Expected error")
}
}
func TestGetTrollboxChannels(t *testing.T) {
_, err := b.GetTrollboxChannels()
if err != nil {
t.Error("test failed - GetTrollboxChannels() error", err)
t.Error("GetTrollboxChannels() error", err)
}
}
func TestGetTrollboxConnectedUsers(t *testing.T) {
_, err := b.GetTrollboxConnectedUsers()
if err == nil {
t.Error("test failed - GetTrollboxConnectedUsers() error", err)
t.Error("GetTrollboxConnectedUsers() Expected error")
}
}
func TestGetAccountExecutions(t *testing.T) {
_, err := b.GetAccountExecutions(&GenericRequestParams{})
if err == nil {
t.Error("test failed - GetAccountExecutions() error", err)
t.Error("GetAccountExecutions() Expected error")
}
}
func TestGetAccountExecutionTradeHistory(t *testing.T) {
_, err := b.GetAccountExecutionTradeHistory(&GenericRequestParams{})
if err == nil {
t.Error("test failed - GetAccountExecutionTradeHistory() error", err)
t.Error("GetAccountExecutionTradeHistory() Expected error")
}
}
func TestGetFundingHistory(t *testing.T) {
_, err := b.GetFundingHistory()
if err == nil {
t.Error("test failed - GetFundingHistory() error", err)
t.Error("GetFundingHistory() Expected error")
}
}
func TestGetInstruments(t *testing.T) {
_, err := b.GetInstruments(&GenericRequestParams{})
if err != nil {
t.Error("test failed - GetInstruments() error", err)
t.Error("GetInstruments() error", err)
}
}
func TestGetActiveInstruments(t *testing.T) {
_, err := b.GetActiveInstruments(&GenericRequestParams{})
if err != nil {
t.Error("test failed - GetActiveInstruments() error", err)
t.Error("GetActiveInstruments() error", err)
}
}
func TestGetActiveAndIndexInstruments(t *testing.T) {
_, err := b.GetActiveAndIndexInstruments()
if err != nil {
t.Error("test failed - GetActiveAndIndexInstruments() error", err)
t.Error("GetActiveAndIndexInstruments() error", err)
}
}
func TestGetActiveIntervals(t *testing.T) {
_, err := b.GetActiveIntervals()
if err == nil {
t.Error("test failed - GetActiveIntervals() error", err)
t.Error("GetActiveIntervals() Expected error")
}
}
func TestGetCompositeIndex(t *testing.T) {
_, err := b.GetCompositeIndex(&GenericRequestParams{})
if err == nil {
t.Error("test failed - GetCompositeIndex() error", err)
t.Error("GetCompositeIndex() Expected error")
}
}
func TestGetIndices(t *testing.T) {
_, err := b.GetIndices()
if err != nil {
t.Error("test failed - GetIndices() error", err)
t.Error("GetIndices() error", err)
}
}
func TestGetInsuranceFundHistory(t *testing.T) {
_, err := b.GetInsuranceFundHistory(&GenericRequestParams{})
if err != nil {
t.Error("test failed - GetInsuranceFundHistory() error", err)
t.Error("GetInsuranceFundHistory() error", err)
}
}
func TestGetLeaderboard(t *testing.T) {
_, err := b.GetLeaderboard(LeaderboardGetParams{})
if err != nil {
t.Error("test failed - GetLeaderboard() error", err)
t.Error("GetLeaderboard() error", err)
}
}
func TestGetAliasOnLeaderboard(t *testing.T) {
_, err := b.GetAliasOnLeaderboard()
if err == nil {
t.Error("test failed - GetAliasOnLeaderboard() error", err)
t.Error("GetAliasOnLeaderboard() Expected error")
}
}
func TestGetLiquidationOrders(t *testing.T) {
_, err := b.GetLiquidationOrders(&GenericRequestParams{})
if err != nil {
t.Error("test failed - GetLiquidationOrders() error", err)
t.Error("GetLiquidationOrders() error", err)
}
}
func TestGetCurrentNotifications(t *testing.T) {
_, err := b.GetCurrentNotifications()
if err == nil {
t.Error("test failed - GetCurrentNotifications() error", err)
t.Error("GetCurrentNotifications() Expected error")
}
}
func TestAmendOrder(t *testing.T) {
_, err := b.AmendOrder(&OrderAmendParams{})
if err == nil {
t.Error("test failed - AmendOrder() error", err)
t.Error("AmendOrder() Expected error")
}
}
@@ -232,126 +232,126 @@ func TestCreateOrder(t *testing.T) {
ClOrdID: "mm_bitmex_1a/oemUeQ4CAJZgP3fjHsA",
OrderQty: 98})
if err == nil {
t.Error("test failed - CreateOrder() error", err)
t.Error("CreateOrder() Expected error")
}
}
func TestCancelOrders(t *testing.T) {
_, err := b.CancelOrders(&OrderCancelParams{})
if err == nil {
t.Error("test failed - CancelOrders() error", err)
t.Error("CancelOrders() Expected error")
}
}
func TestCancelAllOrders(t *testing.T) {
_, err := b.CancelAllExistingOrders(OrderCancelAllParams{})
if err == nil {
t.Error("test failed - CancelAllOrders(orderCancellation *exchange.OrderCancellation) (exchange.CancelAllOrdersResponse, error)", err)
t.Error("CancelAllOrders(orderCancellation *exchange.OrderCancellation) (exchange.CancelAllOrdersResponse, error)", err)
}
}
func TestAmendBulkOrders(t *testing.T) {
_, err := b.AmendBulkOrders(OrderAmendBulkParams{})
if err == nil {
t.Error("test failed - AmendBulkOrders() error", err)
t.Error("AmendBulkOrders() Expected error")
}
}
func TestCreateBulkOrders(t *testing.T) {
_, err := b.CreateBulkOrders(OrderNewBulkParams{})
if err == nil {
t.Error("test failed - CreateBulkOrders() error", err)
t.Error("CreateBulkOrders() Expected error")
}
}
func TestCancelAllOrdersAfterTime(t *testing.T) {
_, err := b.CancelAllOrdersAfterTime(OrderCancelAllAfterParams{})
if err == nil {
t.Error("test failed - CancelAllOrdersAfterTime() error", err)
t.Error("CancelAllOrdersAfterTime() Expected error")
}
}
func TestClosePosition(t *testing.T) {
_, err := b.ClosePosition(OrderClosePositionParams{})
if err == nil {
t.Error("test failed - ClosePosition() error", err)
t.Error("ClosePosition() Expected error")
}
}
func TestGetOrderbook(t *testing.T) {
_, err := b.GetOrderbook(OrderBookGetL2Params{Symbol: "XBT"})
if err != nil {
t.Error("test failed - GetOrderbook() error", err)
t.Error("GetOrderbook() error", err)
}
}
func TestGetPositions(t *testing.T) {
_, err := b.GetPositions(PositionGetParams{})
if err == nil {
t.Error("test failed - GetPositions() error", err)
t.Error("GetPositions() Expected error")
}
}
func TestIsolatePosition(t *testing.T) {
_, err := b.IsolatePosition(PositionIsolateMarginParams{Symbol: "XBT"})
if err == nil {
t.Error("test failed - IsolatePosition() error", err)
t.Error("IsolatePosition() Expected error")
}
}
func TestLeveragePosition(t *testing.T) {
_, err := b.LeveragePosition(PositionUpdateLeverageParams{})
if err == nil {
t.Error("test failed - LeveragePosition() error", err)
t.Error("LeveragePosition() Expected error")
}
}
func TestUpdateRiskLimit(t *testing.T) {
_, err := b.UpdateRiskLimit(PositionUpdateRiskLimitParams{})
if err == nil {
t.Error("test failed - UpdateRiskLimit() error", err)
t.Error("UpdateRiskLimit() Expected error")
}
}
func TestTransferMargin(t *testing.T) {
_, err := b.TransferMargin(PositionTransferIsolatedMarginParams{})
if err == nil {
t.Error("test failed - TransferMargin() error", err)
t.Error("TransferMargin() Expected error")
}
}
func TestGetQuotesByBuckets(t *testing.T) {
_, err := b.GetQuotesByBuckets(&QuoteGetBucketedParams{})
if err == nil {
t.Error("test failed - GetQuotesByBuckets() error", err)
t.Error("GetQuotesByBuckets() Expected error")
}
}
func TestGetSettlementHistory(t *testing.T) {
_, err := b.GetSettlementHistory(&GenericRequestParams{})
if err != nil {
t.Error("test failed - GetSettlementHistory() error", err)
t.Error("GetSettlementHistory() error", err)
}
}
func TestGetStats(t *testing.T) {
_, err := b.GetStats()
if err != nil {
t.Error("test failed - GetStats() error", err)
t.Error("GetStats() error", err)
}
}
func TestGetStatsHistorical(t *testing.T) {
_, err := b.GetStatsHistorical()
if err != nil {
t.Error("test failed - GetStatsHistorical() error", err)
t.Error("GetStatsHistorical() error", err)
}
}
func TestGetStatSummary(t *testing.T) {
_, err := b.GetStatSummary()
if err != nil {
t.Error("test failed - GetStatSummary() error", err)
t.Error("GetStatSummary() error", err)
}
}
@@ -361,14 +361,14 @@ func TestGetTrade(t *testing.T) {
StartTime: time.Now().Format(time.RFC3339),
Reverse: true})
if err != nil {
t.Error("test failed - GetTrade() error", err)
t.Error("GetTrade() error", err)
}
}
func TestGetPreviousTrades(t *testing.T) {
_, err := b.GetPreviousTrades(&TradeGetBucketedParams{})
if err == nil {
t.Error("test failed - GetPreviousTrades() error", err)
t.Error("GetPreviousTrades() Expected error")
}
}
@@ -404,7 +404,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := b.GetFee(feeBuilder); resp != float64(0.00075) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.00075), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.00075), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -412,7 +412,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := b.GetFee(feeBuilder); resp != float64(750) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(750), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(750), resp)
t.Error(err)
}
@@ -420,7 +420,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := b.GetFee(feeBuilder); resp != float64(0.0005) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Error(err)
}
@@ -428,7 +428,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -436,7 +436,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -444,7 +444,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -453,7 +453,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -462,7 +462,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -607,12 +607,12 @@ func TestGetAccountInfo(t *testing.T) {
if apiKey != "" || apiSecret != "" {
_, err := b.GetAccountInfo()
if err != nil {
t.Error("Test Failed - GetAccountInfo() error", err)
t.Error("GetAccountInfo() error", err)
}
} else {
_, err := b.GetAccountInfo()
if err == nil {
t.Error("Test Failed - GetAccountInfo() error")
t.Error("GetAccountInfo() error")
}
}
}
@@ -620,7 +620,7 @@ func TestGetAccountInfo(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := b.ModifyOrder(&exchange.ModifyOrder{OrderID: "1337"})
if err == nil {
t.Error("Test Failed - ModifyOrder() error")
t.Error("ModifyOrder() error")
}
}
@@ -685,12 +685,12 @@ func TestGetDepositAddress(t *testing.T) {
if areTestAPIKeysSet() {
_, err := b.GetDepositAddress(currency.BTC, "")
if err != nil {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
}
} else {
_, err := b.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}
}

View File

@@ -13,6 +13,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -90,9 +91,36 @@ func (b *Bitmex) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
SubmitOrders: true,
ModifyOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TradeFetching: true,
OrderbookFetching: true,
Subscribe: true,
Unsubscribe: true,
AuthenticatedEndpoints: true,
AccountInfo: true,
DeadMansSwitch: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithAPIPermission |
exchange.WithdrawCryptoWithEmail |
@@ -113,13 +141,6 @@ func (b *Bitmex) SetDefaults() {
b.API.Endpoints.URL = b.API.Endpoints.URLDefault
b.API.Endpoints.WebsocketURL = bitmexWSURL
b.Websocket = wshandler.New()
b.Websocket.Functionality = wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported |
wshandler.WebsocketAccountDataSupported |
wshandler.WebsocketDeadMansSwitchSupported
b.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
b.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
b.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -149,6 +170,7 @@ func (b *Bitmex) Setup(exch *config.ExchangeConfig) error {
Connector: b.WsConnect,
Subscriber: b.Subscribe,
UnSubscriber: b.Unsubscribe,
Features: &b.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -19,11 +19,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Bitstamp load config error", err)
log.Fatal("Bitstamp load config error", err)
}
bitstampConfig, err := cfg.GetExchangeConfig("Bitstamp")
if err != nil {
log.Fatal("Test Failed - Bitstamp Setup() init error", err)
log.Fatal("Bitstamp Setup() init error", err)
}
bitstampConfig.API.AuthenticatedSupport = true
bitstampConfig.API.Credentials.Key = apiKey
@@ -32,7 +32,7 @@ func TestMain(m *testing.M) {
b.SetDefaults()
err = b.Setup(bitstampConfig)
if err != nil {
log.Fatal("Test Failed - Bitstamp setup error", err)
log.Fatal("Bitstamp setup error", err)
}
log.Printf(sharedtestvalues.LiveTesting, b.GetName(), b.API.Endpoints.URL)
os.Exit(m.Run())

View File

@@ -22,11 +22,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Bitstamp load config error", err)
log.Fatal("Bitstamp load config error", err)
}
bitstampConfig, err := cfg.GetExchangeConfig("Bitstamp")
if err != nil {
log.Fatal("Test Failed - Bitstamp Setup() init error", err)
log.Fatal("Bitstamp Setup() init error", err)
}
b.SkipAuthCheck = true
bitstampConfig.API.AuthenticatedSupport = true
@@ -36,12 +36,12 @@ func TestMain(m *testing.M) {
b.SetDefaults()
err = b.Setup(bitstampConfig)
if err != nil {
log.Fatal("Test Failed - Bitstamp setup error", err)
log.Fatal("Bitstamp setup error", err)
}
serverDetails, newClient, err := mock.NewVCRServer(mockfile)
if err != nil {
log.Fatalf("Test Failed - Mock server error %s", err)
log.Fatalf("Mock server error %s", err)
}
b.HTTPClient = newClient

View File

@@ -60,7 +60,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || (areTestAPIKeysSet() && err != nil) {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
}
@@ -70,7 +70,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || (areTestAPIKeysSet() && err != nil) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -80,7 +80,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || (areTestAPIKeysSet() && err != nil) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -90,7 +90,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || (areTestAPIKeysSet() && err != nil) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -100,7 +100,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -110,7 +110,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -121,7 +121,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(7.5) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(7.5),
resp)
t.Error(err)
@@ -132,7 +132,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(15) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(15),
resp)
t.Error(err)
@@ -147,18 +147,18 @@ func TestCalculateTradingFee(t *testing.T) {
newBalance.BTCEURFee = 0
if resp := b.CalculateTradingFee(currency.BTC, currency.USD, 0, 0, newBalance); resp != 0 {
t.Error("Test Failed - GetFee() error")
t.Error("GetFee() error")
}
if resp := b.CalculateTradingFee(currency.BTC, currency.USD, 2, 2, newBalance); resp != float64(4) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(4), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(4), resp)
}
if resp := b.CalculateTradingFee(currency.BTC, currency.EUR, 2, 2, newBalance); resp != float64(0) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
}
dummy1, dummy2 := currency.NewCode(""), currency.NewCode("")
if resp := b.CalculateTradingFee(dummy1, dummy2, 0, 0, newBalance); resp != 0 {
t.Error("Test Failed - GetFee() error")
t.Error("GetFee() error")
}
}
@@ -167,7 +167,7 @@ func TestGetTicker(t *testing.T) {
_, err := b.GetTicker(currency.BTC.String()+currency.USD.String(), false)
if err != nil {
t.Error("Test Failed - GetTicker() error", err)
t.Error("GetTicker() error", err)
}
}
@@ -176,7 +176,7 @@ func TestGetOrderbook(t *testing.T) {
_, err := b.GetOrderbook(currency.BTC.String() + currency.USD.String())
if err != nil {
t.Error("Test Failed - GetOrderbook() error", err)
t.Error("GetOrderbook() error", err)
}
}
@@ -185,7 +185,7 @@ func TestGetTradingPairs(t *testing.T) {
_, err := b.GetTradingPairs()
if err != nil {
t.Error("Test Failed - GetTradingPairs() error", err)
t.Error("GetTradingPairs() error", err)
}
}
@@ -197,7 +197,7 @@ func TestGetTransactions(t *testing.T) {
_, err := b.GetTransactions(currency.BTC.String()+currency.USD.String(), value)
if err != nil {
t.Error("Test Failed - GetTransactions() error", err)
t.Error("GetTransactions() error", err)
}
}
@@ -206,7 +206,7 @@ func TestGetEURUSDConversionRate(t *testing.T) {
_, err := b.GetEURUSDConversionRate()
if err != nil {
t.Error("Test Failed - GetEURUSDConversionRate() error", err)
t.Error("GetEURUSDConversionRate() error", err)
}
}
@@ -216,11 +216,11 @@ func TestGetBalance(t *testing.T) {
_, err := b.GetBalance()
switch {
case areTestAPIKeysSet() && err != nil && !mockTests:
t.Error("Test Failed - GetBalance() error", err)
t.Error("GetBalance() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - GetBalance() error", err)
t.Error("GetBalance() error", err)
}
}
@@ -230,11 +230,11 @@ func TestGetUserTransactions(t *testing.T) {
_, err := b.GetUserTransactions("btcusd")
switch {
case areTestAPIKeysSet() && err != nil && !mockTests:
t.Error("Test Failed - GetUserTransactions() error", err)
t.Error("GetUserTransactions() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - GetUserTransactions() error", err)
t.Error("GetUserTransactions() error", err)
}
}
@@ -244,11 +244,11 @@ func TestGetOpenOrders(t *testing.T) {
_, err := b.GetOpenOrders("btcusd")
switch {
case areTestAPIKeysSet() && err != nil && !mockTests:
t.Error("Test Failed - GetOpenOrders() error", err)
t.Error("GetOpenOrders() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - GetOpenOrders() error", err)
t.Error("GetOpenOrders() error", err)
}
}
@@ -258,7 +258,7 @@ func TestGetOrderStatus(t *testing.T) {
_, err := b.GetOrderStatus(1337)
switch {
case areTestAPIKeysSet() && err != nil && !mockTests:
t.Error("Test Failed - GetOrderStatus() error", err)
t.Error("GetOrderStatus() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Expecting an error when no keys are set")
case mockTests && err == nil:
@@ -272,11 +272,11 @@ func TestGetWithdrawalRequests(t *testing.T) {
_, err := b.GetWithdrawalRequests(0)
switch {
case areTestAPIKeysSet() && err != nil && !mockTests:
t.Error("Test Failed - GetWithdrawalRequests() error", err)
t.Error("GetWithdrawalRequests() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - GetWithdrawalRequests() error", err)
t.Error("GetWithdrawalRequests() error", err)
}
}
@@ -286,11 +286,11 @@ func TestGetUnconfirmedBitcoinDeposits(t *testing.T) {
_, err := b.GetUnconfirmedBitcoinDeposits()
switch {
case areTestAPIKeysSet() && err != nil && !mockTests:
t.Error("Test Failed - GetUnconfirmedBitcoinDeposits() error", err)
t.Error("GetUnconfirmedBitcoinDeposits() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - GetUnconfirmedBitcoinDeposits() error", err)
t.Error("GetUnconfirmedBitcoinDeposits() error", err)
}
}
@@ -303,7 +303,7 @@ func TestTransferAccountBalance(t *testing.T) {
err := b.TransferAccountBalance(0.01, "btc", "testAccount", true)
if !mockTests && err != nil {
t.Error("Test Failed - TransferAccountBalance() error", err)
t.Error("TransferAccountBalance() error", err)
}
if mockTests && err == nil {
t.Error("Expecting an error until a QA pass can be completed")
@@ -456,7 +456,7 @@ func TestModifyOrder(t *testing.T) {
_, err := b.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -575,10 +575,10 @@ func TestGetDepositAddress(t *testing.T) {
_, err := b.GetDepositAddress(currency.BTC, "")
switch {
case areTestAPIKeysSet() && customerID != "" && err != nil && !mockTests:
t.Error("Test Failed - GetDepositAddress error", err)
t.Error("GetDepositAddress error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - GetDepositAddress error cannot be nil")
t.Error("GetDepositAddress error cannot be nil")
case mockTests && err != nil:
t.Error("Test Failed - GetDepositAddress error", err)
t.Error("GetDepositAddress error", err)
}
}

View File

@@ -14,6 +14,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -69,8 +70,33 @@ func (b *Bitstamp) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
RESTCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
FiatDeposit: true,
FiatWithdraw: true,
TradeFee: true,
FiatDepositFee: true,
FiatWithdrawalFee: true,
CryptoDepositFee: true,
},
WebsocketCapabilities: protocol.Features{
TradeFetching: true,
OrderbookFetching: true,
Subscribe: true,
Unsubscribe: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.AutoWithdrawFiat,
@@ -89,10 +115,6 @@ func (b *Bitstamp) SetDefaults() {
b.API.Endpoints.URL = b.API.Endpoints.URLDefault
b.API.Endpoints.WebsocketURL = bitstampWSURL
b.Websocket = wshandler.New()
b.Websocket.Functionality = wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported
b.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
b.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
b.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -122,6 +144,7 @@ func (b *Bitstamp) Setup(exch *config.ExchangeConfig) error {
Connector: b.WsConnect,
Subscriber: b.Subscribe,
UnSubscriber: b.Unsubscribe,
Features: &b.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -21,7 +21,7 @@ var b Bittrex
func TestSetDefaults(t *testing.T) {
b.SetDefaults()
if b.GetName() != "Bittrex" {
t.Error("Test Failed - Bittrex - SetDefaults() error")
t.Error("Bittrex - SetDefaults() error")
}
}
@@ -29,11 +29,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - Bittrex load config error", err)
t.Fatal("Bittrex load config error", err)
}
bConfig, err := cfg.GetExchangeConfig("Bittrex")
if err != nil {
t.Error("Test Failed - Bittrex Setup() init error")
t.Error("Bittrex Setup() init error")
}
bConfig.API.Credentials.Key = apiKey
bConfig.API.Credentials.Secret = apiSecret
@@ -41,12 +41,12 @@ func TestSetup(t *testing.T) {
err = b.Setup(bConfig)
if err != nil {
t.Fatal("Test Failed - Bittrex setup error", err)
t.Fatal("Bittrex setup error", err)
}
if !b.IsEnabled() || !b.API.AuthenticatedSupport ||
b.Verbose || len(b.BaseCurrencies) < 1 {
t.Error("Test Failed - Bittrex Setup values not set correctly")
t.Error("Bittrex Setup values not set correctly")
}
}
@@ -54,7 +54,7 @@ func TestGetMarkets(t *testing.T) {
t.Parallel()
_, err := b.GetMarkets()
if err != nil {
t.Errorf("Test Failed - Bittrex - GetMarkets() error: %s", err)
t.Errorf("Bittrex - GetMarkets() error: %s", err)
}
}
@@ -62,7 +62,7 @@ func TestGetCurrencies(t *testing.T) {
t.Parallel()
_, err := b.GetCurrencies()
if err != nil {
t.Errorf("Test Failed - Bittrex - GetCurrencies() error: %s", err)
t.Errorf("Bittrex - GetCurrencies() error: %s", err)
}
}
@@ -72,7 +72,7 @@ func TestGetTicker(t *testing.T) {
_, err := b.GetTicker(btc)
if err != nil {
t.Errorf("Test Failed - Bittrex - GetTicker() error: %s", err)
t.Errorf("Bittrex - GetTicker() error: %s", err)
}
}
@@ -80,7 +80,7 @@ func TestGetMarketSummaries(t *testing.T) {
t.Parallel()
_, err := b.GetMarketSummaries()
if err != nil {
t.Errorf("Test Failed - Bittrex - GetMarketSummaries() error: %s", err)
t.Errorf("Bittrex - GetMarketSummaries() error: %s", err)
}
}
@@ -90,7 +90,7 @@ func TestGetMarketSummary(t *testing.T) {
_, err := b.GetMarketSummary(pairOne)
if err != nil {
t.Errorf("Test Failed - Bittrex - GetMarketSummary() error: %s", err)
t.Errorf("Bittrex - GetMarketSummary() error: %s", err)
}
}
@@ -99,7 +99,7 @@ func TestGetOrderbook(t *testing.T) {
_, err := b.GetOrderbook("btc-ltc")
if err != nil {
t.Errorf("Test Failed - Bittrex - GetOrderbook() error: %s", err)
t.Errorf("Bittrex - GetOrderbook() error: %s", err)
}
}
@@ -108,7 +108,7 @@ func TestGetMarketHistory(t *testing.T) {
_, err := b.GetMarketHistory("btc-ltc")
if err != nil {
t.Errorf("Test Failed - Bittrex - GetMarketHistory() error: %s", err)
t.Errorf("Bittrex - GetMarketHistory() error: %s", err)
}
}
@@ -117,7 +117,7 @@ func TestPlaceBuyLimit(t *testing.T) {
_, err := b.PlaceBuyLimit("btc-ltc", 1, 1)
if err == nil {
t.Error("Test Failed - Bittrex - PlaceBuyLimit() error")
t.Error("Bittrex - PlaceBuyLimit() Expected error")
}
}
@@ -126,7 +126,7 @@ func TestPlaceSellLimit(t *testing.T) {
_, err := b.PlaceSellLimit("btc-ltc", 1, 1)
if err == nil {
t.Error("Test Failed - Bittrex - PlaceSellLimit() error")
t.Error("Bittrex - PlaceSellLimit() Expected error")
}
}
@@ -135,11 +135,11 @@ func TestGetOpenOrders(t *testing.T) {
_, err := b.GetOpenOrders("")
if err == nil {
t.Error("Test Failed - Bittrex - GetOrder() error")
t.Error("Bittrex - GetOrder() Expected error")
}
_, err = b.GetOpenOrders("btc-ltc")
if err == nil {
t.Error("Test Failed - Bittrex - GetOrder() error")
t.Error("Bittrex - GetOrder() Expected error")
}
}
@@ -148,7 +148,7 @@ func TestCancelExistingOrder(t *testing.T) {
_, err := b.CancelExistingOrder("blaaaaaaa")
if err == nil {
t.Error("Test Failed - Bittrex - CancelExistingOrder() error")
t.Error("Bittrex - CancelExistingOrder() Expected error")
}
}
@@ -157,7 +157,7 @@ func TestGetAccountBalances(t *testing.T) {
_, err := b.GetAccountBalances()
if err == nil {
t.Error("Test Failed - Bittrex - GetAccountBalances() error")
t.Error("Bittrex - GetAccountBalances() Expected error")
}
}
@@ -166,7 +166,7 @@ func TestGetAccountBalanceByCurrency(t *testing.T) {
_, err := b.GetAccountBalanceByCurrency("btc")
if err == nil {
t.Error("Test Failed - Bittrex - GetAccountBalanceByCurrency() error")
t.Error("Bittrex - GetAccountBalanceByCurrency() Expected error")
}
}
@@ -175,11 +175,11 @@ func TestGetOrder(t *testing.T) {
_, err := b.GetOrder("0cb4c4e4-bdc7-4e13-8c13-430e587d2cc1")
if err == nil {
t.Error("Test Failed - Bittrex - GetOrder() error")
t.Error("Bittrex - GetOrder() Expected error")
}
_, err = b.GetOrder("")
if err == nil {
t.Error("Test Failed - Bittrex - GetOrder() error")
t.Error("Bittrex - GetOrder() Expected error")
}
}
@@ -188,11 +188,11 @@ func TestGetOrderHistoryForCurrency(t *testing.T) {
_, err := b.GetOrderHistoryForCurrency("")
if err == nil {
t.Error("Test Failed - Bittrex - GetOrderHistory() error")
t.Error("Bittrex - GetOrderHistory() Expected error")
}
_, err = b.GetOrderHistoryForCurrency("btc-ltc")
if err == nil {
t.Error("Test Failed - Bittrex - GetOrderHistory() error")
t.Error("Bittrex - GetOrderHistory() Expected error")
}
}
@@ -201,11 +201,11 @@ func TestGetwithdrawalHistory(t *testing.T) {
_, err := b.GetWithdrawalHistory("")
if err == nil {
t.Error("Test Failed - Bittrex - GetWithdrawalHistory() error")
t.Error("Bittrex - GetWithdrawalHistory() Expected error")
}
_, err = b.GetWithdrawalHistory("btc-ltc")
if err == nil {
t.Error("Test Failed - Bittrex - GetWithdrawalHistory() error")
t.Error("Bittrex - GetWithdrawalHistory() Expected error")
}
}
@@ -214,11 +214,11 @@ func TestGetDepositHistory(t *testing.T) {
_, err := b.GetDepositHistory("")
if err == nil {
t.Error("Test Failed - Bittrex - GetDepositHistory() error")
t.Error("Bittrex - GetDepositHistory() Expected error")
}
_, err = b.GetDepositHistory("btc-ltc")
if err == nil {
t.Error("Test Failed - Bittrex - GetDepositHistory() error")
t.Error("Bittrex - GetDepositHistory() Expected error")
}
}
@@ -255,7 +255,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := b.GetFee(feeBuilder); resp != float64(0.0025) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0025), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0025), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -263,7 +263,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := b.GetFee(feeBuilder); resp != float64(2500) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2500), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2500), resp)
t.Error(err)
}
@@ -271,7 +271,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := b.GetFee(feeBuilder); resp != float64(0.0025) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0025), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0025), resp)
t.Error(err)
}
@@ -279,7 +279,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -287,7 +287,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0.0005) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Error(err)
}
@@ -295,7 +295,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -304,7 +304,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -313,7 +313,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.HKD
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -459,7 +459,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := b.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -524,12 +524,12 @@ func TestGetDepositAddress(t *testing.T) {
if areTestAPIKeysSet() {
_, err := b.GetDepositAddress(currency.BTC, "")
if err != nil {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
}
} else {
_, err := b.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}
}

View File

@@ -13,6 +13,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -69,9 +70,23 @@ func (b *Bittrex) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: false,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
GetOrders: true,
CancelOrder: true,
SubmitOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
CryptoWithdrawalFee: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithAPIPermission |
exchange.NoFiatWithdrawals,

View File

@@ -12,6 +12,7 @@ import (
"github.com/thrasher-corp/gocryptotrader/common/crypto"
"github.com/thrasher-corp/gocryptotrader/currency"
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
log "github.com/thrasher-corp/gocryptotrader/logger"
)
@@ -46,6 +47,7 @@ const (
// BTCMarkets is the overarching type across the BTCMarkets package
type BTCMarkets struct {
exchange.Base
WebsocketConn *wshandler.WebsocketConnection
}
// GetMarkets returns the BTCMarkets instruments

View File

@@ -27,11 +27,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - BTC Markets load config error", err)
t.Fatal("BTC Markets load config error", err)
}
bConfig, err := cfg.GetExchangeConfig("BTC Markets")
if err != nil {
t.Error("Test Failed - BTC Markets Setup() init error")
t.Error("BTC Markets Setup() init error")
}
bConfig.API.Credentials.Key = apiKey
bConfig.API.Credentials.Secret = apiSecret
@@ -39,7 +39,7 @@ func TestSetup(t *testing.T) {
err = b.Setup(bConfig)
if err != nil {
t.Fatal("Test Failed - BTC Markets setup error", err)
t.Fatal("BTC Markets setup error", err)
}
}
@@ -47,7 +47,7 @@ func TestGetMarkets(t *testing.T) {
t.Parallel()
_, err := b.GetMarkets()
if err != nil {
t.Error("Test failed - GetMarkets() error", err)
t.Error("GetMarkets() error", err)
}
}
@@ -55,7 +55,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := b.GetTicker("BTC", "AUD")
if err != nil {
t.Error("Test failed - GetTicker() error", err)
t.Error("GetTicker() error", err)
}
}
@@ -63,7 +63,7 @@ func TestGetOrderbook(t *testing.T) {
t.Parallel()
_, err := b.GetOrderbook("BTC", "AUD")
if err != nil {
t.Error("Test failed - GetOrderbook() error", err)
t.Error("GetOrderbook() error", err)
}
}
@@ -71,14 +71,14 @@ func TestGetTrades(t *testing.T) {
t.Parallel()
_, err := b.GetTrades("BTC", "AUD", nil)
if err != nil {
t.Error("Test failed - GetTrades() error", err)
t.Error("GetTrades() error", err)
}
val := url.Values{}
val.Set("since", "0")
_, err = b.GetTrades("BTC", "AUD", val)
if err != nil {
t.Error("Test failed - GetTrades() error", err)
t.Error("GetTrades() error", err)
}
}
@@ -87,7 +87,7 @@ func TestNewOrder(t *testing.T) {
_, err := b.NewOrder("AUD", "BTC", 0, 0, "Bid",
exchange.LimitOrderType.ToLower().ToString(), "testTest")
if err == nil {
t.Error("Test failed - NewOrder() error", err)
t.Error("NewOrder() Expected error")
}
}
@@ -95,7 +95,7 @@ func TestCancelExistingOrder(t *testing.T) {
t.Parallel()
_, err := b.CancelExistingOrder([]int64{1337})
if err == nil {
t.Error("Test failed - CancelExistingOrder() error", err)
t.Error("CancelExistingOrder() Expected error")
}
}
@@ -103,11 +103,11 @@ func TestGetOrders(t *testing.T) {
t.Parallel()
_, err := b.GetOrders("AUD", "BTC", 10, 0, false)
if err == nil {
t.Error("Test failed - GetOrders() error", err)
t.Error("GetOrders() Expected error")
}
_, err = b.GetOrders("AUD", "BTC", 10, 0, true)
if err == nil {
t.Error("Test failed - GetOrders() error", err)
t.Error("GetOrders() Expected error")
}
}
@@ -115,7 +115,7 @@ func TestGetOrderDetail(t *testing.T) {
t.Parallel()
_, err := b.GetOrderDetail([]int64{1337})
if err == nil {
t.Error("Test failed - GetOrderDetail() error", err)
t.Error("GetOrderDetail() Expected error")
}
}
@@ -123,7 +123,7 @@ func TestGetAccountBalance(t *testing.T) {
t.Parallel()
_, err := b.GetAccountBalance()
if err == nil {
t.Error("Test failed - GetAccountBalance() error", err)
t.Error("GetAccountBalance() Expected error")
}
}
@@ -131,7 +131,7 @@ func TestWithdrawCrypto(t *testing.T) {
t.Parallel()
_, err := b.WithdrawCrypto(0, "BTC", "LOLOLOL")
if err == nil {
t.Error("Test failed - WithdrawCrypto() error", err)
t.Error("WithdrawCrypto() Expected error")
}
}
@@ -139,21 +139,21 @@ func TestWithdrawAUD(t *testing.T) {
t.Parallel()
_, err := b.WithdrawAUD("BLA", "1337", "blawest", "1336", 10000000)
if err == nil {
t.Error("Test failed - WithdrawAUD() error", err)
t.Error("WithdrawAUD() Expected error")
}
}
func TestGetAccountInfo(t *testing.T) {
_, err := b.GetAccountInfo()
if err == nil {
t.Error("Test failed - GetAccountInfo() error", err)
t.Error("GetAccountInfo() Expected error")
}
}
func TestGetFundingHistory(t *testing.T) {
_, err := b.GetFundingHistory()
if err == nil {
t.Error("Test failed - GetAccountInfo() error", err)
t.Error("GetAccountInfo() Expected error")
}
}
@@ -161,14 +161,14 @@ func TestCancelOrder(t *testing.T) {
_, err := b.CancelExistingOrder([]int64{1337})
if err == nil {
t.Error("Test failed - CancelgOrder() error", err)
t.Error("CancelgOrder() Expected error")
}
}
func TestGetOrderInfo(t *testing.T) {
_, err := b.GetOrderInfo("1337")
if err == nil {
t.Error("Test failed - GetOrderInfo() error", err)
t.Error("GetOrderInfo() Expected error")
}
}
@@ -208,14 +208,14 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Quote = currency.USD
if resp, err := b.GetFee(feeBuilder); resp != float64(0.00849999) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.00849999), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.00849999), resp)
}
// CryptocurrencyTradeFee Basic
feeBuilder = setFeeBuilder()
if resp, err := b.GetFee(feeBuilder); resp != float64(0.0022) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0022), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0022), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -223,7 +223,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := b.GetFee(feeBuilder); resp != float64(2200) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(22000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(22000), resp)
t.Error(err)
}
@@ -231,7 +231,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := b.GetFee(feeBuilder); resp != float64(0.0022) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0022), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0022), resp)
t.Error(err)
}
@@ -239,7 +239,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -248,7 +248,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Error(err)
}
@@ -256,7 +256,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -265,7 +265,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.AUD
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -274,7 +274,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.AUD
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -418,7 +418,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := b.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -500,6 +500,6 @@ func TestWithdrawInternationalBank(t *testing.T) {
func TestGetDepositAddress(t *testing.T) {
_, err := b.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}

View File

@@ -1,6 +1,10 @@
package btcmarkets
import "github.com/thrasher-corp/gocryptotrader/currency"
import (
"time"
"github.com/thrasher-corp/gocryptotrader/currency"
)
// Response is the genralized response type
type Response struct {
@@ -143,3 +147,54 @@ var WithdrawalFees = map[currency.Code]float64{
currency.OMG: 0.15,
currency.POWR: 5,
}
// WsSubscribe message sent via ws to subscribe
type WsSubscribe struct {
MarketIDs []string `json:"marketIds,omitempty"`
Channels []string `json:"channels"`
MessageType string `json:"messageType"`
}
// WsMessageType message sent via ws to determine type
type WsMessageType struct {
MessageType string `json:"messageType"`
}
// WsTick message received for ticker data
type WsTick struct {
Currency string `json:"marketId"`
Timestamp time.Time `json:"timestamp"`
Bid float64 `json:"bestBid,string"`
Ask float64 `json:"bestAsk,string"`
Last float64 `json:"lastPrice,string"`
Volume float64 `json:"volume24h,string"`
Price24h float64 `json:"price24h,string"`
Low24h float64 `json:"low24h,string"`
High24 float64 `json:"high24h,string"`
MessageType string `json:"messageType"`
}
// WsTrade message received for trade data
type WsTrade struct {
Currency string `json:"marketId"`
Timestamp time.Time `json:"timestamp"`
TradeID int64 `json:"tradeId"`
Price float64 `json:"price,string"`
Volume float64 `json:"volume,string"`
MessageType string `json:"messageType"`
}
// WsOrderbook message received for orderbook data
type WsOrderbook struct {
Currency string `json:"marketId"`
Timestamp time.Time `json:"timestamp"`
Bids [][]string `json:"bids"`
Asks [][]string `json:"asks"`
MessageType string `json:"messageType"`
}
type WsError struct {
MessageType string `json:"messageType"`
Code int64 `json:"code"`
Message string `json:"message"`
}

View File

@@ -0,0 +1,207 @@
package btcmarkets
import (
"errors"
"fmt"
"net/http"
"strconv"
"github.com/gorilla/websocket"
"github.com/thrasher-corp/gocryptotrader/common"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
log "github.com/thrasher-corp/gocryptotrader/logger"
)
const (
btcMarketsWSURL = "wss://socket.btcmarkets.net/v2"
)
// WsConnect connects to a websocket feed
func (b *BTCMarkets) WsConnect() error {
if !b.Websocket.IsEnabled() || !b.IsEnabled() {
return errors.New(wshandler.WebsocketNotEnabled)
}
var dialer websocket.Dialer
err := b.WebsocketConn.Dial(&dialer, http.Header{})
if err != nil {
return err
}
if b.Verbose {
log.Debugf(log.ExchangeSys, "%s Connected to Websocket.\n", b.GetName())
}
b.generateDefaultSubscriptions()
go b.WsHandleData()
return nil
}
// WsHandleData handles websocket data from WsReadData
func (b *BTCMarkets) WsHandleData() {
b.Websocket.Wg.Add(1)
defer func() {
b.Websocket.Wg.Done()
}()
for {
select {
case <-b.Websocket.ShutdownC:
return
default:
resp, err := b.WebsocketConn.ReadMessage()
if err != nil {
b.Websocket.ReadMessageErrors <- err
return
}
b.Websocket.TrafficAlert <- struct{}{}
var wsResponse WsMessageType
err = common.JSONDecode(resp.Raw, &wsResponse)
if err != nil {
b.Websocket.DataHandler <- err
continue
}
switch wsResponse.MessageType {
case "heartbeat":
if b.Verbose {
log.Debugf(log.ExchangeSys, "%v - Websocket heartbeat received %s", b.GetName(), resp.Raw)
}
case "orderbook":
var ob WsOrderbook
err := common.JSONDecode(resp.Raw, &ob)
if err != nil {
b.Websocket.DataHandler <- err
continue
}
p := currency.NewPairFromString(ob.Currency)
var bids, asks []orderbook.Item
for x := range ob.Bids {
var price, amount float64
price, err = strconv.ParseFloat(ob.Bids[x][0], 64)
if err != nil {
b.Websocket.DataHandler <- err
continue
}
amount, err = strconv.ParseFloat(ob.Bids[x][1], 64)
if err != nil {
b.Websocket.DataHandler <- err
continue
}
bids = append(bids, orderbook.Item{
Amount: amount,
Price: price,
})
}
for x := range ob.Asks {
var price, amount float64
price, err = strconv.ParseFloat(ob.Asks[x][0], 64)
if err != nil {
b.Websocket.DataHandler <- err
continue
}
amount, err = strconv.ParseFloat(ob.Asks[x][1], 64)
if err != nil {
b.Websocket.DataHandler <- err
continue
}
asks = append(asks, orderbook.Item{
Amount: amount,
Price: price,
})
}
err = b.Websocket.Orderbook.LoadSnapshot(&orderbook.Base{
Pair: p,
Bids: bids,
Asks: asks,
LastUpdated: ob.Timestamp,
AssetType: asset.Spot,
ExchangeName: b.Name,
})
if err != nil {
b.Websocket.DataHandler <- err
continue
}
b.Websocket.DataHandler <- wshandler.WebsocketOrderbookUpdate{
Pair: p,
Asset: asset.Spot,
Exchange: b.GetName(),
}
case "trade":
var trade WsTrade
err := common.JSONDecode(resp.Raw, &trade)
if err != nil {
b.Websocket.DataHandler <- err
continue
}
p := currency.NewPairFromString(trade.Currency)
b.Websocket.DataHandler <- wshandler.TradeData{
Timestamp: trade.Timestamp,
CurrencyPair: p,
AssetType: asset.Spot,
Exchange: b.GetName(),
Price: trade.Price,
Amount: trade.Volume,
}
case "tick":
var tick WsTick
err := common.JSONDecode(resp.Raw, &tick)
if err != nil {
b.Websocket.DataHandler <- err
continue
}
p := currency.NewPairFromString(tick.Currency)
b.Websocket.DataHandler <- wshandler.TickerData{
Exchange: b.GetName(),
Volume: tick.Volume,
High: tick.High24,
Low: tick.Low24h,
Bid: tick.Bid,
Ask: tick.Ask,
Last: tick.Last,
Timestamp: tick.Timestamp,
AssetType: asset.Spot,
Pair: p,
}
case "error":
var wsErr WsError
err := common.JSONDecode(resp.Raw, &wsErr)
if err != nil {
b.Websocket.DataHandler <- err
continue
}
b.Websocket.DataHandler <- fmt.Errorf("%v websocket error. Code: %v Message: %v", b.Name, wsErr.Code, wsErr.Message)
default:
b.Websocket.DataHandler <- fmt.Errorf("%v Unhandled websocket message %s", b.Name, resp.Raw)
}
}
}
}
func (b *BTCMarkets) generateDefaultSubscriptions() {
var channels = []string{"tick", "trade", "orderbook"}
enabledCurrencies := b.GetEnabledPairs(asset.Spot)
var subscriptions []wshandler.WebsocketChannelSubscription
for i := range channels {
for j := range enabledCurrencies {
subscriptions = append(subscriptions, wshandler.WebsocketChannelSubscription{
Channel: channels[i],
Currency: enabledCurrencies[j],
})
}
}
b.Websocket.SubscribeToChannels(subscriptions)
}
// Subscribe sends a websocket message to receive data from the channel
func (b *BTCMarkets) Subscribe(channelToSubscribe wshandler.WebsocketChannelSubscription) error {
req := WsSubscribe{
MarketIDs: []string{channelToSubscribe.Currency.String()},
Channels: []string{channelToSubscribe.Channel},
MessageType: "subscribe",
}
return b.WebsocketConn.SendMessage(req)
}

View File

@@ -14,6 +14,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -71,10 +72,31 @@ func (b *BTCMarkets) SetDefaults() {
b.Features = exchange.Features{
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: false,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: false,
Websocket: true,
RESTCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrder: true,
SubmitOrder: true,
UserTradeHistory: true,
CryptoWithdrawal: true,
FiatWithdraw: true,
TradeFee: true,
FiatWithdrawalFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AccountInfo: true,
Subscribe: true,
AuthenticatedEndpoints: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.AutoWithdrawFiat,
@@ -88,6 +110,12 @@ func (b *BTCMarkets) SetDefaults() {
request.NewRateLimit(time.Second*10, btcmarketsAuthLimit),
request.NewRateLimit(time.Second*10, btcmarketsUnauthLimit),
common.NewHTTPClientWithTimeout(exchange.DefaultHTTPTimeout))
b.API.Endpoints.WebsocketURL = btcMarketsWSURL
b.Websocket = wshandler.New()
b.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
b.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
b.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
}
// Setup takes in an exchange configuration and sets all parameters
@@ -97,7 +125,38 @@ func (b *BTCMarkets) Setup(exch *config.ExchangeConfig) error {
return nil
}
return b.SetupDefaults(exch)
err := b.SetupDefaults(exch)
if err != nil {
return err
}
err = b.Websocket.Setup(
&wshandler.WebsocketSetup{
Enabled: exch.Features.Enabled.Websocket,
Verbose: exch.Verbose,
AuthenticatedWebsocketAPISupport: exch.API.AuthenticatedWebsocketSupport,
WebsocketTimeout: exch.WebsocketTrafficTimeout,
DefaultURL: btcMarketsWSURL,
ExchangeName: exch.Name,
RunningURL: exch.API.Endpoints.WebsocketURL,
Connector: b.WsConnect,
Subscriber: b.Subscribe,
Features: &b.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err
}
b.WebsocketConn = &wshandler.WebsocketConnection{
ExchangeName: b.Name,
URL: b.Websocket.GetWebsocketURL(),
ProxyURL: b.Websocket.GetProxyAddress(),
Verbose: b.Verbose,
ResponseCheckTimeout: exch.WebsocketResponseCheckTimeout,
ResponseMaxLimit: exch.WebsocketResponseMaxLimit,
}
return nil
}
// Start starts the BTC Markets go routine
@@ -440,7 +499,7 @@ func (b *BTCMarkets) WithdrawFiatFundsToInternationalBank(withdrawRequest *excha
// GetWebsocket returns a pointer to the exchange websocket
func (b *BTCMarkets) GetWebsocket() (*wshandler.Websocket, error) {
return nil, common.ErrNotYetImplemented
return b.Websocket, nil
}
// GetFeeByType returns an estimate of fee based on type of transaction

View File

@@ -27,11 +27,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - BTSE load config error", err)
log.Fatal("BTSE load config error", err)
}
btseConfig, err := cfg.GetExchangeConfig("BTSE")
if err != nil {
t.Error("Test Failed - BTSE Setup() init error")
t.Error("BTSE Setup() init error")
}
btseConfig.API.AuthenticatedSupport = true
@@ -40,7 +40,7 @@ func TestSetup(t *testing.T) {
err = b.Setup(btseConfig)
if err != nil {
t.Fatal("Test Failed - BTSE setup error", err)
t.Fatal("BTSE setup error", err)
}
}
@@ -48,7 +48,7 @@ func TestGetMarkets(t *testing.T) {
b.SetDefaults()
_, err := b.GetMarkets()
if err != nil {
t.Fatalf("Test failed. Err: %s", err)
t.Fatalf("Err: %s", err)
}
}
@@ -56,7 +56,7 @@ func TestGetTrades(t *testing.T) {
b.SetDefaults()
_, err := b.GetTrades("BTC-USD")
if err != nil {
t.Fatalf("Test failed. Err: %s", err)
t.Fatalf("Err: %s", err)
}
}
@@ -64,7 +64,7 @@ func TestGetTicker(t *testing.T) {
b.SetDefaults()
_, err := b.GetTicker("BTC-USD")
if err != nil {
t.Fatalf("Test failed. Err: %s", err)
t.Fatalf("Err: %s", err)
}
}
@@ -72,7 +72,7 @@ func TestGetOrderbook(t *testing.T) {
b.SetDefaults()
_, err := b.GetOrderbook("BTC-USD", 0, 0, 0)
if err != nil {
t.Fatalf("Test failed. Err: %s", err)
t.Fatalf("Err: %s", err)
}
}
@@ -80,7 +80,7 @@ func TestGetMarketStatistics(t *testing.T) {
b.SetDefaults()
_, err := b.GetMarketStatistics("BTC-USD")
if err != nil {
t.Fatalf("Test failed. Err: %s", err)
t.Fatalf("Err: %s", err)
}
}
@@ -88,7 +88,7 @@ func TestGetServerTime(t *testing.T) {
b.SetDefaults()
_, err := b.GetServerTime()
if err != nil {
t.Fatalf("Test failed. Err: %s", err)
t.Fatalf("Err: %s", err)
}
}
@@ -142,7 +142,7 @@ func TestGetOrderHistory(t *testing.T) {
_, err := b.GetOrderHistory(&getOrdersRequest)
if err != common.ErrFunctionNotSupported {
t.Fatal("Test failed. Expected different result")
t.Fatal("Expected different result")
}
}
@@ -188,49 +188,49 @@ func TestGetFee(t *testing.T) {
}
if resp, err := b.GetFee(feeBuilder); resp != 0.00050 || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", 0.00050, resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", 0.00050, resp)
t.Error(err)
}
feeBuilder.IsMaker = false
if resp, err := b.GetFee(feeBuilder); resp != 0.0015 || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", 0.0015, resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", 0.0015, resp)
t.Error(err)
}
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := b.GetFee(feeBuilder); resp != 0.0005 || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", 0.0005, resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", 0.0005, resp)
t.Error(err)
}
feeBuilder.Pair.Base = currency.USDT
if resp, err := b.GetFee(feeBuilder); resp != float64(5) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(5), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(5), resp)
t.Error(err)
}
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := b.GetFee(feeBuilder); resp != float64(3) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(3), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(3), resp)
t.Error(err)
}
feeBuilder.Amount = 1000000
if resp, err := b.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
if resp, err := b.GetFee(feeBuilder); resp != float64(1000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(1000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(1000), resp)
t.Error(err)
}
feeBuilder.Amount = 1000
if resp, err := b.GetFee(feeBuilder); resp != float64(25) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(25), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(25), resp)
t.Error(err)
}
}
@@ -239,7 +239,7 @@ func TestParseOrderTime(t *testing.T) {
expected := int64(1534794360)
actual := parseOrderTime("2018-08-20 19:20:46").Unix()
if expected != actual {
t.Errorf("Test Failed. TestParseOrderTime expected: %d, got %d", expected, actual)
t.Errorf("TestParseOrderTime expected: %d, got %d", expected, actual)
}
}

View File

@@ -13,6 +13,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -69,8 +70,28 @@ func (b *BTSE) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
RESTCapabilities: protocol.Features{
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
TradeFee: true,
FiatDepositFee: true,
FiatWithdrawalFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
OrderbookFetching: true,
Subscribe: true,
Unsubscribe: true,
},
WithdrawPermissions: exchange.NoAPIWithdrawalMethods,
},
@@ -87,10 +108,6 @@ func (b *BTSE) SetDefaults() {
b.API.Endpoints.URLDefault = btseAPIURL
b.API.Endpoints.URL = b.API.Endpoints.URLDefault
b.Websocket = wshandler.New()
b.Websocket.Functionality = wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketTickerSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported
b.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
b.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
b.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -121,6 +138,7 @@ func (b *BTSE) Setup(exch *config.ExchangeConfig) error {
Connector: b.WsConnect,
Subscriber: b.Subscribe,
UnSubscriber: b.Unsubscribe,
Features: &b.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -32,11 +32,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - coinbasepro load config error", err)
t.Fatal("coinbasepro load config error", err)
}
gdxConfig, err := cfg.GetExchangeConfig("CoinbasePro")
if err != nil {
t.Error("Test Failed - coinbasepro Setup() init error")
t.Error("coinbasepro Setup() init error")
}
gdxConfig.API.Credentials.Key = apiKey
gdxConfig.API.Credentials.Secret = apiSecret
@@ -45,56 +45,56 @@ func TestSetup(t *testing.T) {
gdxConfig.API.AuthenticatedWebsocketSupport = true
err = c.Setup(gdxConfig)
if err != nil {
t.Fatal("Test Failed - CoinbasePro setup error", err)
t.Fatal("CoinbasePro setup error", err)
}
}
func TestGetProducts(t *testing.T) {
_, err := c.GetProducts()
if err != nil {
t.Errorf("Test failed - Coinbase, GetProducts() Error: %s", err)
t.Errorf("Coinbase, GetProducts() Error: %s", err)
}
}
func TestGetTicker(t *testing.T) {
_, err := c.GetTicker("BTC-USD")
if err != nil {
t.Error("Test failed - GetTicker() error", err)
t.Error("GetTicker() error", err)
}
}
func TestGetTrades(t *testing.T) {
_, err := c.GetTrades("BTC-USD")
if err != nil {
t.Error("Test failed - GetTrades() error", err)
t.Error("GetTrades() error", err)
}
}
func TestGetHistoricRates(t *testing.T) {
_, err := c.GetHistoricRates("BTC-USD", 0, 0, 0)
if err != nil {
t.Error("Test failed - GetHistoricRates() error", err)
t.Error("GetHistoricRates() error", err)
}
}
func TestGetStats(t *testing.T) {
_, err := c.GetStats("BTC-USD")
if err != nil {
t.Error("Test failed - GetStats() error", err)
t.Error("GetStats() error", err)
}
}
func TestGetCurrencies(t *testing.T) {
_, err := c.GetCurrencies()
if err != nil {
t.Error("Test failed - GetCurrencies() error", err)
t.Error("GetCurrencies() error", err)
}
}
func TestGetServerTime(t *testing.T) {
_, err := c.GetServerTime()
if err != nil {
t.Error("Test failed - GetServerTime() error", err)
t.Error("GetServerTime() error", err)
}
}
@@ -104,7 +104,7 @@ func TestAuthRequests(t *testing.T) {
}
_, err := c.GetAccounts()
if err != nil {
t.Error("Test failed - GetAccounts() error", err)
t.Error("GetAccounts() error", err)
}
accountResponse, err := c.GetAccount("13371337-1337-1337-1337-133713371337")
if accountResponse.ID != "" {
@@ -173,11 +173,11 @@ func TestAuthRequests(t *testing.T) {
}
_, err = c.GetPayMethods()
if err != nil {
t.Error("Test failed - GetPayMethods() error", err)
t.Error("GetPayMethods() error", err)
}
_, err = c.GetCoinbaseAccounts()
if err != nil {
t.Error("Test failed - GetCoinbaseAccounts() error", err)
t.Error("GetCoinbaseAccounts() error", err)
}
}
@@ -215,7 +215,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := c.GetFee(feeBuilder); resp != float64(0.003) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.003), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.003), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -223,7 +223,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := c.GetFee(feeBuilder); resp != float64(3000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(3000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(3000), resp)
t.Error(err)
}
@@ -231,7 +231,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := c.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.01), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.01), resp)
t.Error(err)
}
@@ -239,7 +239,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := c.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -248,7 +248,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := c.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -256,7 +256,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := c.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -265,7 +265,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.EUR
if resp, err := c.GetFee(feeBuilder); resp != float64(0.15) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -274,7 +274,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := c.GetFee(feeBuilder); resp != float64(25) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -290,7 +290,7 @@ func TestCalculateTradingFee(t *testing.T) {
}
if resp := c.calculateTradingFee(volume, currency.BTC, currency.USD, "_", 1, 1, false); resp != float64(0.003) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.003), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.003), resp)
}
// lowercase
@@ -302,7 +302,7 @@ func TestCalculateTradingFee(t *testing.T) {
}
if resp := c.calculateTradingFee(volume, currency.BTC, currency.USD, "_", 1, 1, false); resp != float64(0.003) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.003), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.003), resp)
}
// mixedCase
@@ -314,7 +314,7 @@ func TestCalculateTradingFee(t *testing.T) {
}
if resp := c.calculateTradingFee(volume, currency.BTC, currency.USD, "_", 1, 1, false); resp != float64(0.003) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.003), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.003), resp)
}
// medium volume
@@ -326,7 +326,7 @@ func TestCalculateTradingFee(t *testing.T) {
}
if resp := c.calculateTradingFee(volume, currency.BTC, currency.USD, "_", 1, 1, false); resp != float64(0.002) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
}
// high volume
@@ -338,7 +338,7 @@ func TestCalculateTradingFee(t *testing.T) {
}
if resp := c.calculateTradingFee(volume, currency.BTC, currency.USD, "_", 1, 1, false); resp != float64(0.001) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
}
// no match
@@ -350,7 +350,7 @@ func TestCalculateTradingFee(t *testing.T) {
}
if resp := c.calculateTradingFee(volume, currency.BTC, currency.USD, "_", 1, 1, false); resp != float64(0) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
}
// taker
@@ -362,7 +362,7 @@ func TestCalculateTradingFee(t *testing.T) {
}
if resp := c.calculateTradingFee(volume, currency.BTC, currency.USD, "_", 1, 1, true); resp != float64(0) {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
}
}
@@ -510,7 +510,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := c.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -592,7 +592,7 @@ func TestWithdrawInternationalBank(t *testing.T) {
func TestGetDepositAddress(t *testing.T) {
_, err := c.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
}
}

View File

@@ -13,6 +13,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -71,9 +72,36 @@ func (c *CoinbasePro) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: false,
RESTCapabilities: protocol.Features{
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
FiatDeposit: true,
FiatWithdraw: true,
TradeFee: true,
FiatDepositFee: true,
FiatWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
OrderbookFetching: true,
Subscribe: true,
Unsubscribe: true,
AuthenticatedEndpoints: true,
MessageSequenceNumbers: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithAPIPermission |
exchange.AutoWithdrawFiatWithAPIPermission,
@@ -92,12 +120,6 @@ func (c *CoinbasePro) SetDefaults() {
c.API.Endpoints.URL = c.API.Endpoints.URLDefault
c.API.Endpoints.WebsocketURL = coinbaseproWebsocketURL
c.Websocket = wshandler.New()
c.Websocket.Functionality = wshandler.WebsocketTickerSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported |
wshandler.WebsocketSequenceNumberSupported
c.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
c.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
c.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -127,6 +149,7 @@ func (c *CoinbasePro) Setup(exch *config.ExchangeConfig) error {
Connector: c.WsConnect,
Subscriber: c.Subscribe,
UnSubscriber: c.Unsubscribe,
Features: &c.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -31,11 +31,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - Coinut load config error", err)
t.Fatal("Coinut load config error", err)
}
bConfig, err := cfg.GetExchangeConfig("COINUT")
if err != nil {
t.Error("Test Failed - Coinut Setup() init error")
t.Error("Coinut Setup() init error")
}
bConfig.API.AuthenticatedSupport = true
bConfig.API.AuthenticatedWebsocketSupport = true
@@ -44,12 +44,12 @@ func TestSetup(t *testing.T) {
bConfig.Verbose = true
err = c.Setup(bConfig)
if err != nil {
t.Fatal("Test Failed - Coinut setup error", err)
t.Fatal("Coinut setup error", err)
}
if !c.IsEnabled() || !c.Verbose ||
c.Websocket.IsEnabled() || len(c.BaseCurrencies) < 1 {
t.Error("Test Failed - Coinut Setup values not set correctly")
t.Error("Coinut Setup values not set correctly")
}
}
@@ -88,7 +88,7 @@ func setupWSTestAuth(t *testing.T) {
func TestGetInstruments(t *testing.T) {
_, err := c.GetInstruments()
if err != nil {
t.Error("Test failed - GetInstruments() error", err)
t.Error("GetInstruments() error", err)
}
}
@@ -138,7 +138,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := c.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0010), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0010), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -146,7 +146,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := c.GetFee(feeBuilder); resp != float64(1000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(1000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(1000), resp)
t.Error(err)
}
@@ -154,7 +154,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := c.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -162,7 +162,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := c.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -170,7 +170,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := c.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -178,7 +178,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := c.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -187,7 +187,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.EUR
if resp, err := c.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -196,7 +196,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := c.GetFee(feeBuilder); resp != float64(10) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(10), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(10), resp)
t.Error(err)
}
@@ -205,7 +205,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.SGD
if resp, err := c.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -214,7 +214,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := c.GetFee(feeBuilder); resp != float64(10) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(10), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(10), resp)
t.Error(err)
}
@@ -223,7 +223,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.CAD
if resp, err := c.GetFee(feeBuilder); resp != float64(2) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2), resp)
t.Error(err)
}
@@ -232,7 +232,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.SGD
if resp, err := c.GetFee(feeBuilder); resp != float64(10) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(10), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(10), resp)
t.Error(err)
}
@@ -241,7 +241,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.CAD
if resp, err := c.GetFee(feeBuilder); resp != float64(2) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2), resp)
t.Error(err)
}
}
@@ -384,12 +384,12 @@ func TestGetAccountInfo(t *testing.T) {
if apiKey != "" || clientID != "" {
_, err := c.GetAccountInfo()
if err != nil {
t.Error("Test Failed - GetAccountInfo() error", err)
t.Error("GetAccountInfo() error", err)
}
} else {
_, err := c.GetAccountInfo()
if err == nil {
t.Error("Test Failed - GetAccountInfo() error")
t.Error("GetAccountInfo() Expected error")
}
}
}
@@ -397,7 +397,7 @@ func TestGetAccountInfo(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := c.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -456,7 +456,7 @@ func TestWithdrawInternationalBank(t *testing.T) {
func TestGetDepositAddress(t *testing.T) {
_, err := c.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() function unsupported cannot be nil")
t.Error("GetDepositAddress() function unsupported cannot be nil")
}
}

View File

@@ -14,6 +14,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -69,9 +70,33 @@ func (c *COINUT) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: false,
RESTCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
SubmitOrders: true,
UserTradeHistory: true,
TradeFee: true,
FiatDepositFee: true,
FiatWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
OrderbookFetching: true,
TradeFetching: true,
Subscribe: true,
Unsubscribe: true,
AuthenticatedEndpoints: true,
SubmitOrder: true,
SubmitOrders: true,
CancelOrder: true,
MessageCorrelation: true,
},
WithdrawPermissions: exchange.WithdrawCryptoViaWebsiteOnly |
exchange.WithdrawFiatViaWebsiteOnly,
@@ -90,15 +115,6 @@ func (c *COINUT) SetDefaults() {
c.API.Endpoints.URL = c.API.Endpoints.URLDefault
c.API.Endpoints.WebsocketURL = coinutWebsocketURL
c.Websocket = wshandler.New()
c.Websocket.Functionality = wshandler.WebsocketTickerSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported |
wshandler.WebsocketSubmitOrderSupported |
wshandler.WebsocketCancelOrderSupported |
wshandler.WebsocketMessageCorrelationSupported
c.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
c.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
c.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -128,6 +144,7 @@ func (c *COINUT) Setup(exch *config.ExchangeConfig) error {
Connector: c.WsConnect,
Subscriber: c.Subscribe,
UnSubscriber: c.Unsubscribe,
Features: &c.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -12,6 +12,7 @@ import (
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
log "github.com/thrasher-corp/gocryptotrader/logger"
)
@@ -101,7 +102,7 @@ func (e *Base) SetFeatureDefaults() {
Supports: config.FeaturesSupportedConfig{
Websocket: e.Features.Supports.Websocket,
REST: e.Features.Supports.REST,
RESTCapabilities: config.ProtocolFeaturesConfig{
RESTCapabilities: protocol.Features{
AutoPairUpdates: e.Features.Supports.RESTCapabilities.AutoPairUpdates,
},
},

View File

@@ -10,6 +10,7 @@ import (
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
)
@@ -27,7 +28,7 @@ func TestSupportsRESTTickerBatchUpdates(t *testing.T) {
Features: Features{
Supports: FeaturesSupported{
REST: true,
RESTCapabilities: ProtocolFeatures{
RESTCapabilities: protocol.Features{
TickerBatching: true,
},
},
@@ -35,7 +36,7 @@ func TestSupportsRESTTickerBatchUpdates(t *testing.T) {
}
if !b.SupportsRESTTickerBatchUpdates() {
t.Fatal("Test failed. TestSupportsRESTTickerBatchUpdates returned false")
t.Fatal("TestSupportsRESTTickerBatchUpdates returned false")
}
}
@@ -46,7 +47,7 @@ func TestHTTPClient(t *testing.T) {
r.SetHTTPClientTimeout(time.Second * 5)
if r.GetHTTPClient().Timeout != time.Second*5 {
t.Fatalf("Test failed. TestHTTPClient unexpected value")
t.Fatalf("TestHTTPClient unexpected value")
}
r.Requester = nil
@@ -55,12 +56,12 @@ func TestHTTPClient(t *testing.T) {
r.SetHTTPClient(newClient)
if r.GetHTTPClient().Timeout != time.Second*10 {
t.Fatalf("Test failed. TestHTTPClient unexpected value")
t.Fatalf("TestHTTPClient unexpected value")
}
r.Requester = nil
if r.GetHTTPClient() == nil {
t.Fatalf("Test failed. TestHTTPClient unexpected value")
t.Fatalf("TestHTTPClient unexpected value")
}
b := Base{Name: "RAWR"}
@@ -71,7 +72,7 @@ func TestHTTPClient(t *testing.T) {
b.SetHTTPClientTimeout(time.Second * 5)
if b.GetHTTPClient().Timeout != time.Second*5 {
t.Fatalf("Test failed. TestHTTPClient unexpected value")
t.Fatalf("TestHTTPClient unexpected value")
}
newClient = new(http.Client)
@@ -79,7 +80,7 @@ func TestHTTPClient(t *testing.T) {
b.SetHTTPClient(newClient)
if b.GetHTTPClient().Timeout != time.Second*10 {
t.Fatalf("Test failed. TestHTTPClient unexpected value")
t.Fatalf("TestHTTPClient unexpected value")
}
b.SetHTTPClientUserAgent("epicUserAgent")
@@ -103,16 +104,16 @@ func TestSetClientProxyAddress(t *testing.T) {
newBase.Websocket = wshandler.New()
err := newBase.SetClientProxyAddress(":invalid")
if err == nil {
t.Error("Test failed. SetClientProxyAddress parsed invalid URL")
t.Error("SetClientProxyAddress parsed invalid URL")
}
if newBase.Websocket.GetProxyAddress() != "" {
t.Error("Test failed. SetClientProxyAddress error", err)
t.Error("SetClientProxyAddress error", err)
}
err = newBase.SetClientProxyAddress("www.valid.com")
if err != nil {
t.Error("Test failed. SetClientProxyAddress error", err)
t.Error("SetClientProxyAddress error", err)
}
// calling this again will cause the ws check to fail
@@ -122,7 +123,7 @@ func TestSetClientProxyAddress(t *testing.T) {
}
if newBase.Websocket.GetProxyAddress() != "www.valid.com" {
t.Error("Test failed. SetClientProxyAddress error", err)
t.Error("SetClientProxyAddress error", err)
}
}
@@ -137,7 +138,7 @@ func TestSetFeatureDefaults(t *testing.T) {
Features: Features{
Supports: FeaturesSupported{
REST: true,
RESTCapabilities: ProtocolFeatures{
RESTCapabilities: protocol.Features{
TickerBatching: true,
},
Websocket: true,
@@ -233,22 +234,22 @@ func TestSetHTTPRateLimiter(t *testing.T) {
func TestSetAutoPairDefaults(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig(config.ConfigTestFile, true)
err := cfg.LoadConfig(config.TestFile, true)
if err != nil {
t.Fatalf("Test failed. TestSetAutoPairDefaults failed to load config file. Error: %s", err)
t.Fatalf("TestSetAutoPairDefaults failed to load config file. Error: %s", err)
}
exch, err := cfg.GetExchangeConfig("Bitstamp")
if err != nil {
t.Fatalf("Test failed. TestSetAutoPairDefaults load config failed. Error %s", err)
t.Fatalf("TestSetAutoPairDefaults load config failed. Error %s", err)
}
if !exch.Features.Supports.RESTCapabilities.AutoPairUpdates {
t.Fatalf("Test failed. TestSetAutoPairDefaults Incorrect value")
t.Fatalf("TestSetAutoPairDefaults Incorrect value")
}
if exch.CurrencyPairs.LastUpdated != 0 {
t.Fatalf("Test failed. TestSetAutoPairDefaults Incorrect value")
t.Fatalf("TestSetAutoPairDefaults Incorrect value")
}
exch.Features.Supports.RESTCapabilities.AutoPairUpdates = false
@@ -256,11 +257,11 @@ func TestSetAutoPairDefaults(t *testing.T) {
exch, err = cfg.GetExchangeConfig("Bitstamp")
if err != nil {
t.Fatalf("Test failed. TestSetAutoPairDefaults load config failed. Error %s", err)
t.Fatalf("TestSetAutoPairDefaults load config failed. Error %s", err)
}
if exch.Features.Supports.RESTCapabilities.AutoPairUpdates {
t.Fatal("Test failed. TestSetAutoPairDefaults Incorrect value")
t.Fatal("TestSetAutoPairDefaults Incorrect value")
}
}
@@ -289,7 +290,7 @@ func TestGetLastPairsUpdateTime(t *testing.T) {
b.CurrencyPairs.LastUpdated = testTime
if b.GetLastPairsUpdateTime() != testTime {
t.Fatal("Test failed. TestGetLastPairsUpdateTim Incorrect value")
t.Fatal("TestGetLastPairsUpdateTim Incorrect value")
}
}
@@ -339,13 +340,13 @@ func TestGetAssetTypes(t *testing.T) {
aT := testExchange.GetAssetTypes()
if len(aT) != 3 {
t.Error("Test failed. TestGetAssetTypes failed")
t.Error("TestGetAssetTypes failed")
}
}
func TestGetClientBankAccounts(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig(config.ConfigTestFile, true)
err := cfg.LoadConfig(config.TestFile, true)
if err != nil {
t.Fatal(err)
}
@@ -363,13 +364,13 @@ func TestGetClientBankAccounts(t *testing.T) {
r, err = b.GetClientBankAccounts("MEOW", "USD")
if err == nil {
t.Error("an error should of been thrown for a non-existent exchange")
t.Error("an error should have been thrown for a non-existent exchange")
}
}
func TestGetExchangeBankAccounts(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig(config.ConfigTestFile, true)
err := cfg.LoadConfig(config.TestFile, true)
if err != nil {
t.Fatal(err)
}
@@ -387,7 +388,7 @@ func TestGetExchangeBankAccounts(t *testing.T) {
_, err = b.GetExchangeBankAccounts("MEOW", "USD")
if err == nil {
t.Error("an error should of been thrown for a non-existent exchange")
t.Error("an error should have been thrown for a non-existent exchange")
}
}
@@ -451,17 +452,17 @@ func TestGetAuthenticatedAPISupport(t *testing.T) {
}
if !base.GetAuthenticatedAPISupport(RestAuthentication) {
t.Fatal("Test failed. Expected RestAuthentication to return true")
t.Fatal("Expected RestAuthentication to return true")
}
if base.GetAuthenticatedAPISupport(WebsocketAuthentication) {
t.Fatal("Test failed. Expected WebsocketAuthentication to return false")
t.Fatal("Expected WebsocketAuthentication to return false")
}
base.API.AuthenticatedWebsocketSupport = true
if !base.GetAuthenticatedAPISupport(WebsocketAuthentication) {
t.Fatal("Test failed. Expected WebsocketAuthentication to return true")
t.Fatal("Expected WebsocketAuthentication to return true")
}
if base.GetAuthenticatedAPISupport(2) {
t.Fatal("Test failed. Expected default case of 'false' to be returned")
t.Fatal("Expected default case of 'false' to be returned")
}
}
@@ -474,7 +475,7 @@ func TestGetName(t *testing.T) {
name := b.GetName()
if name != "TESTNAME" {
t.Error("Test Failed - Exchange GetName() returned incorrect name")
t.Error("Exchange GetName() returned incorrect name")
}
}
@@ -563,21 +564,21 @@ func TestGetEnabledPairs(t *testing.T) {
c := b.GetEnabledPairs(assetType)
if c[0].String() != defaultTestCurrencyPair {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
format.Delimiter = "~"
b.CurrencyPairs.RequestFormat = &format
c = b.GetEnabledPairs(assetType)
if c[0].String() != "BTC~USD" {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
format.Delimiter = ""
b.CurrencyPairs.ConfigFormat = &format
c = b.GetEnabledPairs(assetType)
if c[0].String() != "BTCUSD" {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
b.CurrencyPairs.StorePairs(asset.Spot,
@@ -586,7 +587,7 @@ func TestGetEnabledPairs(t *testing.T) {
b.CurrencyPairs.ConfigFormat = &format
c = b.GetEnabledPairs(assetType)
if c[0].Base != currency.BTC && c[0].Quote != currency.DOGE {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
b.CurrencyPairs.StorePairs(asset.Spot,
@@ -595,7 +596,7 @@ func TestGetEnabledPairs(t *testing.T) {
b.CurrencyPairs.ConfigFormat.Delimiter = "_"
c = b.GetEnabledPairs(assetType)
if c[0].Base != currency.BTC && c[0].Quote != currency.USD {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
b.CurrencyPairs.StorePairs(asset.Spot,
@@ -605,7 +606,7 @@ func TestGetEnabledPairs(t *testing.T) {
b.CurrencyPairs.ConfigFormat.Index = currency.BTC.String()
c = b.GetEnabledPairs(assetType)
if c[0].Base != currency.BTC && c[0].Quote != currency.DOGE {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
b.CurrencyPairs.StorePairs(asset.Spot,
@@ -613,7 +614,7 @@ func TestGetEnabledPairs(t *testing.T) {
b.CurrencyPairs.ConfigFormat.Index = ""
c = b.GetEnabledPairs(assetType)
if c[0].Base != currency.BTC && c[0].Quote != currency.USD {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
}
@@ -639,21 +640,21 @@ func TestGetAvailablePairs(t *testing.T) {
c := b.GetAvailablePairs(assetType)
if c[0].String() != defaultTestCurrencyPair {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
format.Delimiter = "~"
b.CurrencyPairs.RequestFormat = &format
c = b.GetAvailablePairs(assetType)
if c[0].String() != "BTC~USD" {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
format.Delimiter = ""
b.CurrencyPairs.ConfigFormat = &format
c = b.GetAvailablePairs(assetType)
if c[0].String() != "BTCUSD" {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
b.CurrencyPairs.StorePairs(asset.Spot,
@@ -662,7 +663,7 @@ func TestGetAvailablePairs(t *testing.T) {
b.CurrencyPairs.ConfigFormat = &format
c = b.GetAvailablePairs(assetType)
if c[0].Base != currency.BTC && c[0].Quote != currency.DOGE {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
b.CurrencyPairs.StorePairs(asset.Spot,
@@ -671,7 +672,7 @@ func TestGetAvailablePairs(t *testing.T) {
b.CurrencyPairs.ConfigFormat.Delimiter = "_"
c = b.GetAvailablePairs(assetType)
if c[0].Base != currency.BTC && c[0].Quote != currency.USD {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
b.CurrencyPairs.StorePairs(asset.Spot,
@@ -681,7 +682,7 @@ func TestGetAvailablePairs(t *testing.T) {
b.CurrencyPairs.ConfigFormat.Index = currency.BTC.String()
c = b.GetAvailablePairs(assetType)
if c[0].Base != currency.BTC && c[0].Quote != currency.DOGE {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
b.CurrencyPairs.StorePairs(asset.Spot,
@@ -689,7 +690,7 @@ func TestGetAvailablePairs(t *testing.T) {
b.CurrencyPairs.ConfigFormat.Index = ""
c = b.GetAvailablePairs(assetType)
if c[0].Base != currency.BTC && c[0].Quote != currency.USD {
t.Error("Test Failed - Exchange GetAvailablePairs() incorrect string")
t.Error("Exchange GetAvailablePairs() incorrect string")
}
}
@@ -717,15 +718,15 @@ func TestSupportsPair(t *testing.T) {
assetType := asset.Spot
if !b.SupportsPair(currency.NewPair(currency.BTC, currency.USD), true, assetType) {
t.Error("Test Failed - Exchange SupportsPair() incorrect value")
t.Error("Exchange SupportsPair() incorrect value")
}
if !b.SupportsPair(currency.NewPair(currency.ETH, currency.USD), false, assetType) {
t.Error("Test Failed - Exchange SupportsPair() incorrect value")
t.Error("Exchange SupportsPair() incorrect value")
}
if b.SupportsPair(currency.NewPairFromStrings("ASD", "ASDF"), true, assetType) {
t.Error("Test Failed - Exchange SupportsPair() incorrect value")
t.Error("Exchange SupportsPair() incorrect value")
}
}
@@ -756,11 +757,11 @@ func TestFormatExchangeCurrencies(t *testing.T) {
actual, err := e.FormatExchangeCurrencies(pairs, asset.Spot)
if err != nil {
t.Errorf("Test failed - Exchange TestFormatExchangeCurrencies error %s", err)
t.Errorf("Exchange TestFormatExchangeCurrencies error %s", err)
}
expected := "btc~usd^ltc~btc"
if actual != expected {
t.Errorf("Test failed - Exchange TestFormatExchangeCurrencies %s != %s",
t.Errorf("Exchange TestFormatExchangeCurrencies %s != %s",
actual, expected)
}
@@ -785,7 +786,7 @@ func TestFormatExchangeCurrency(t *testing.T) {
actual := b.FormatExchangeCurrency(p, asset.Spot)
if actual.String() != expected {
t.Errorf("Test failed - Exchange TestFormatExchangeCurrency %s != %s",
t.Errorf("Exchange TestFormatExchangeCurrency %s != %s",
actual, expected)
}
}
@@ -800,7 +801,7 @@ func TestSetEnabled(t *testing.T) {
SetEnabled.SetEnabled(true)
if !SetEnabled.Enabled {
t.Error("Test Failed - Exchange SetEnabled(true) did not set boolean")
t.Error("Exchange SetEnabled(true) did not set boolean")
}
}
@@ -813,7 +814,7 @@ func TestIsEnabled(t *testing.T) {
}
if IsEnabled.IsEnabled() {
t.Error("Test Failed - Exchange IsEnabled() did not return correct boolean")
t.Error("Exchange IsEnabled() did not return correct boolean")
}
}
@@ -1048,14 +1049,14 @@ func TestSetPairs(t *testing.T) {
func TestUpdatePairs(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig(config.ConfigTestFile, true)
err := cfg.LoadConfig(config.TestFile, true)
if err != nil {
t.Fatal("Test failed. TestUpdatePairs failed to load config")
t.Fatal("TestUpdatePairs failed to load config")
}
anxCfg, err := cfg.GetExchangeConfig(defaultTestExchange)
if err != nil {
t.Fatal("Test failed. TestUpdatePairs failed to load config")
t.Fatal("TestUpdatePairs failed to load config")
}
UAC := Base{Name: defaultTestExchange}
@@ -1063,20 +1064,20 @@ func TestUpdatePairs(t *testing.T) {
exchangeProducts := currency.NewPairsFromStrings([]string{"ltc", "btc", "usd", "aud", ""})
err = UAC.UpdatePairs(exchangeProducts, asset.Spot, true, false)
if err != nil {
t.Errorf("Test Failed - TestUpdatePairs error: %s", err)
t.Errorf("TestUpdatePairs error: %s", err)
}
// Test updating the same new products, diff should be 0
err = UAC.UpdatePairs(exchangeProducts, asset.Spot, true, false)
if err != nil {
t.Errorf("Test Failed - TestUpdatePairs error: %s", err)
t.Errorf("TestUpdatePairs error: %s", err)
}
// Test force updating to only one product
exchangeProducts = currency.NewPairsFromStrings([]string{"btc"})
err = UAC.UpdatePairs(exchangeProducts, asset.Spot, true, true)
if err != nil {
t.Errorf("Test Failed - TestUpdatePairs error: %s", err)
t.Errorf("TestUpdatePairs error: %s", err)
}
// Test updating exchange products
@@ -1084,34 +1085,34 @@ func TestUpdatePairs(t *testing.T) {
UAC.Name = defaultTestExchange
err = UAC.UpdatePairs(exchangeProducts, asset.Spot, false, false)
if err != nil {
t.Errorf("Test Failed - Exchange UpdatePairs() error: %s", err)
t.Errorf("Exchange UpdatePairs() error: %s", err)
}
// Test updating the same new products, diff should be 0
err = UAC.UpdatePairs(exchangeProducts, asset.Spot, false, false)
if err != nil {
t.Errorf("Test Failed - Exchange UpdatePairs() error: %s", err)
t.Errorf("Exchange UpdatePairs() error: %s", err)
}
// Test force updating to only one product
exchangeProducts = currency.NewPairsFromStrings([]string{"btc"})
err = UAC.UpdatePairs(exchangeProducts, asset.Spot, false, true)
if err != nil {
t.Errorf("Test Failed - Forced Exchange UpdatePairs() error: %s", err)
t.Errorf("Forced Exchange UpdatePairs() error: %s", err)
}
// Test update currency pairs with btc excluded
exchangeProducts = currency.NewPairsFromStrings([]string{"ltc", "eth"})
err = UAC.UpdatePairs(exchangeProducts, asset.Spot, false, false)
if err != nil {
t.Errorf("Test Failed - Forced Exchange UpdatePairs() error: %s", err)
t.Errorf("Forced Exchange UpdatePairs() error: %s", err)
}
// Test that empty exchange products should return an error
exchangeProducts = nil
err = UAC.UpdatePairs(exchangeProducts, asset.Spot, false, false)
if err == nil {
t.Errorf("Test failed - empty available pairs should return an error")
t.Errorf("empty available pairs should return an error")
}
// Test empty pair
@@ -1122,7 +1123,7 @@ func TestUpdatePairs(t *testing.T) {
}
err = UAC.UpdatePairs(pairs, asset.Spot, true, true)
if err != nil {
t.Errorf("Test Failed - Forced Exchange UpdatePairs() error: %s", err)
t.Errorf("Forced Exchange UpdatePairs() error: %s", err)
}
UAC.CurrencyPairs.UseGlobalFormat = true
UAC.CurrencyPairs.ConfigFormat = &currency.PairFormat{
@@ -1146,7 +1147,7 @@ func TestSetAPIURL(t *testing.T) {
err := tester.SetAPIURL()
if err == nil {
t.Error("test failed - setting zero value config")
t.Error("setting zero value config")
}
tester.Config.API.Endpoints.URL = testURL
@@ -1157,23 +1158,23 @@ func TestSetAPIURL(t *testing.T) {
err = tester.SetAPIURL()
if err != nil {
t.Error("test failed", err)
t.Error(err)
}
if tester.GetAPIURL() != testURL {
t.Error("test failed - incorrect return URL")
t.Error("incorrect return URL")
}
if tester.GetSecondaryAPIURL() != testURLSecondary {
t.Error("test failed - incorrect return URL")
t.Error("incorrect return URL")
}
if tester.GetAPIURLDefault() != testURLDefault {
t.Error("test failed - incorrect return URL")
t.Error("incorrect return URL")
}
if tester.GetAPIURLSecondaryDefault() != testURLSecondaryDefault {
t.Error("test failed - incorrect return URL")
t.Error("incorrect return URL")
}
}
@@ -1318,11 +1319,11 @@ func TestOrderSides(t *testing.T) {
var os = BuyOrderSide
if os.ToString() != "BUY" {
t.Errorf("test failed - unexpected string %s", os.ToString())
t.Errorf("unexpected string %s", os.ToString())
}
if os.ToLower() != "buy" {
t.Errorf("test failed - unexpected string %s", os.ToString())
t.Errorf("unexpected string %s", os.ToString())
}
}
@@ -1332,11 +1333,11 @@ func TestOrderTypes(t *testing.T) {
var ot OrderType = "Mo'Money"
if ot.ToString() != "Mo'Money" {
t.Errorf("test failed - unexpected string %s", ot.ToString())
t.Errorf("unexpected string %s", ot.ToString())
}
if ot.ToLower() != "mo'money" {
t.Errorf("test failed - unexpected string %s", ot.ToString())
t.Errorf("unexpected string %s", ot.ToString())
}
}
@@ -1491,12 +1492,12 @@ func TestSortOrdersByPrice(t *testing.T) {
SortOrdersByPrice(&orders, false)
if orders[0].Price != 0 {
t.Errorf("Test failed. Expected: '%v', received: '%v'", 0, orders[0].Price)
t.Errorf("Expected: '%v', received: '%v'", 0, orders[0].Price)
}
SortOrdersByPrice(&orders, true)
if orders[0].Price != 100 {
t.Errorf("Test failed. Expected: '%v', received: '%v'", 100, orders[0].Price)
t.Errorf("Expected: '%v', received: '%v'", 100, orders[0].Price)
}
}
@@ -1515,14 +1516,14 @@ func TestSortOrdersByDate(t *testing.T) {
SortOrdersByDate(&orders, false)
if orders[0].OrderDate.Unix() != time.Unix(0, 0).Unix() {
t.Errorf("Test failed. Expected: '%v', received: '%v'",
t.Errorf("Expected: '%v', received: '%v'",
time.Unix(0, 0).Unix(),
orders[0].OrderDate.Unix())
}
SortOrdersByDate(&orders, true)
if orders[0].OrderDate.Unix() != time.Unix(2, 0).Unix() {
t.Errorf("Test failed. Expected: '%v', received: '%v'",
t.Errorf("Expected: '%v', received: '%v'",
time.Unix(2, 0).Unix(),
orders[0].OrderDate.Unix())
}
@@ -1557,14 +1558,14 @@ func TestSortOrdersByCurrency(t *testing.T) {
SortOrdersByCurrency(&orders, false)
if orders[0].CurrencyPair.String() != currency.BTC.String()+"-"+currency.RUB.String() {
t.Errorf("Test failed. Expected: '%v', received: '%v'",
t.Errorf("Expected: '%v', received: '%v'",
currency.BTC.String()+"-"+currency.RUB.String(),
orders[0].CurrencyPair.String())
}
SortOrdersByCurrency(&orders, true)
if orders[0].CurrencyPair.String() != currency.LTC.String()+"-"+currency.EUR.String() {
t.Errorf("Test failed. Expected: '%v', received: '%v'",
t.Errorf("Expected: '%v', received: '%v'",
currency.LTC.String()+"-"+currency.EUR.String(),
orders[0].CurrencyPair.String())
}
@@ -1587,14 +1588,14 @@ func TestSortOrdersByOrderSide(t *testing.T) {
SortOrdersBySide(&orders, false)
if !strings.EqualFold(orders[0].OrderSide.ToString(), BuyOrderSide.ToString()) {
t.Errorf("Test failed. Expected: '%v', received: '%v'",
t.Errorf("Expected: '%v', received: '%v'",
BuyOrderSide,
orders[0].OrderSide)
}
SortOrdersBySide(&orders, true)
if !strings.EqualFold(orders[0].OrderSide.ToString(), SellOrderSide.ToString()) {
t.Errorf("Test failed. Expected: '%v', received: '%v'",
t.Errorf("Expected: '%v', received: '%v'",
SellOrderSide,
orders[0].OrderSide)
}
@@ -1617,12 +1618,12 @@ func TestSortOrdersByOrderType(t *testing.T) {
SortOrdersByType(&orders, false)
if !strings.EqualFold(orders[0].OrderType.ToString(), ImmediateOrCancelOrderType.ToString()) {
t.Errorf("Test failed. Expected: '%v', received: '%v'", ImmediateOrCancelOrderType, orders[0].OrderType)
t.Errorf("Expected: '%v', received: '%v'", ImmediateOrCancelOrderType, orders[0].OrderType)
}
SortOrdersByType(&orders, true)
if !strings.EqualFold(orders[0].OrderType.ToString(), TrailingStopOrderType.ToString()) {
t.Errorf("Test failed. Expected: '%v', received: '%v'", TrailingStopOrderType, orders[0].OrderType)
t.Errorf("Expected: '%v', received: '%v'", TrailingStopOrderType, orders[0].OrderType)
}
}

View File

@@ -5,6 +5,7 @@ import (
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
)
@@ -228,41 +229,12 @@ type FeaturesEnabled struct {
AutoPairUpdates bool
}
// ProtocolFeatures holds all variables for the exchanges supported features
// for a protocol (e.g REST or Websocket)
type ProtocolFeatures struct {
TickerBatching bool
TickerFetching bool
OrderbookFetching bool
AutoPairUpdates bool
AccountInfo bool
CryptoDeposit bool
CryptoWithdrawal uint32
FiatWithdraw bool
GetOrder bool
GetOrders bool
CancelOrders bool
CancelOrder bool
SubmitOrder bool
SubmitOrders bool
ModifyOrder bool
DepositHistory bool
WithdrawalHistory bool
TradeHistory bool
UserTradeHistory bool
TradeFee bool
FiatDepositFee bool
FiatWithdrawalFee bool
CryptoDepositFee bool
CryptoWithdrawalFee bool
}
// FeaturesSupported stores the exchanges supported features
type FeaturesSupported struct {
REST bool
RESTCapabilities ProtocolFeatures
RESTCapabilities protocol.Features
Websocket bool
WebsocketCapabilities ProtocolFeatures
WebsocketCapabilities protocol.Features
WithdrawPermissions uint32
}

View File

@@ -28,16 +28,16 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Exmo load config error", err)
log.Fatal("Exmo load config error", err)
}
exmoConf, err := cfg.GetExchangeConfig("EXMO")
if err != nil {
t.Error("Test Failed - Exmo Setup() init error")
t.Error("Exmo Setup() init error")
}
err = e.Setup(exmoConf)
if err != nil {
t.Fatal("Test Failed - Exmo setup error", err)
t.Fatal("Exmo setup error", err)
}
e.API.AuthenticatedSupport = true
@@ -49,7 +49,7 @@ func TestGetTrades(t *testing.T) {
t.Parallel()
_, err := e.GetTrades("BTC_USD")
if err != nil {
t.Errorf("Test failed. Err: %s", err)
t.Errorf("Err: %s", err)
}
}
@@ -57,7 +57,7 @@ func TestGetOrderbook(t *testing.T) {
t.Parallel()
_, err := e.GetOrderbook("BTC_USD")
if err != nil {
t.Errorf("Test failed. Err: %s", err)
t.Errorf("Err: %s", err)
}
}
@@ -65,7 +65,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := e.GetTicker()
if err != nil {
t.Errorf("Test failed. Err: %s", err)
t.Errorf("Err: %s", err)
}
}
@@ -73,7 +73,7 @@ func TestGetPairSettings(t *testing.T) {
t.Parallel()
_, err := e.GetPairSettings()
if err != nil {
t.Errorf("Test failed. Err: %s", err)
t.Errorf("Err: %s", err)
}
}
@@ -81,7 +81,7 @@ func TestGetCurrency(t *testing.T) {
t.Parallel()
_, err := e.GetCurrency()
if err != nil {
t.Errorf("Test failed. Err: %s", err)
t.Errorf("Err: %s", err)
}
}
@@ -93,7 +93,7 @@ func TestGetUserInfo(t *testing.T) {
TestSetup(t)
_, err := e.GetUserInfo()
if err != nil {
t.Errorf("Test failed. Err: %s", err)
t.Errorf("Err: %s", err)
}
}
@@ -105,7 +105,7 @@ func TestGetRequiredAmount(t *testing.T) {
TestSetup(t)
_, err := e.GetRequiredAmount("BTC_USD", 100)
if err != nil {
t.Errorf("Test failed. Err: %s", err)
t.Errorf("Err: %s", err)
}
}
@@ -145,7 +145,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := e.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -153,7 +153,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := e.GetFee(feeBuilder); resp != float64(2000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Error(err)
}
@@ -161,7 +161,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := e.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Error(err)
}
@@ -169,7 +169,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := e.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -177,7 +177,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := e.GetFee(feeBuilder); resp != float64(0.0005) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Error(err)
}
@@ -186,7 +186,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := e.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -194,7 +194,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := e.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -203,7 +203,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.RUB
if resp, err := e.GetFee(feeBuilder); resp != float64(1600) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(1600), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(1600), resp)
t.Error(err)
}
@@ -212,7 +212,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.PLN
if resp, err := e.GetFee(feeBuilder); resp != float64(30) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(30), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(30), resp)
t.Error(err)
}
@@ -221,7 +221,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.PLN
if resp, err := e.GetFee(feeBuilder); resp != float64(125) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(125), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(125), resp)
t.Error(err)
}
@@ -230,7 +230,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.TRY
if resp, err := e.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -239,7 +239,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.EUR
if resp, err := e.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -248,7 +248,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.RUB
if resp, err := e.GetFee(feeBuilder); resp != float64(3200) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(3200), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(3200), resp)
t.Error(err)
}
}
@@ -393,7 +393,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := e.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -456,12 +456,12 @@ func TestGetDepositAddress(t *testing.T) {
if areTestAPIKeysSet() {
_, err := e.GetDepositAddress(currency.LTC, "")
if err != nil {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
}
} else {
_, err := e.GetDepositAddress(currency.LTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}
}

View File

@@ -14,6 +14,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -71,9 +72,27 @@ func (e *EXMO) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: false,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrder: true,
SubmitOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
FiatDepositFee: true,
FiatWithdrawalFee: true,
CryptoDepositFee: true,
CryptoWithdrawalFee: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithSetup |
exchange.NoFiatWithdrawals,

View File

@@ -32,11 +32,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - GateIO load config error", err)
t.Fatal("GateIO load config error", err)
}
gateioConfig, err := cfg.GetExchangeConfig("GateIO")
if err != nil {
t.Error("Test Failed - GateIO Setup() init error")
t.Error("GateIO Setup() init error")
}
gateioConfig.API.AuthenticatedSupport = true
gateioConfig.API.AuthenticatedWebsocketSupport = true
@@ -45,7 +45,7 @@ func TestSetup(t *testing.T) {
err = g.Setup(gateioConfig)
if err != nil {
t.Fatal("Test Failed - GateIO setup error", err)
t.Fatal("GateIO setup error", err)
}
}
@@ -53,7 +53,7 @@ func TestGetSymbols(t *testing.T) {
t.Parallel()
_, err := g.GetSymbols()
if err != nil {
t.Errorf("Test failed - Gateio TestGetSymbols: %s", err)
t.Errorf("Gateio TestGetSymbols: %s", err)
}
}
@@ -61,7 +61,7 @@ func TestGetMarketInfo(t *testing.T) {
t.Parallel()
_, err := g.GetMarketInfo()
if err != nil {
t.Errorf("Test failed - Gateio GetMarketInfo: %s", err)
t.Errorf("Gateio GetMarketInfo: %s", err)
}
}
@@ -79,7 +79,7 @@ func TestSpotNewOrder(t *testing.T) {
Type: exchange.SellOrderSide.ToLower().ToString(),
})
if err != nil {
t.Errorf("Test failed - Gateio SpotNewOrder: %s", err)
t.Errorf("Gateio SpotNewOrder: %s", err)
}
}
@@ -92,7 +92,7 @@ func TestCancelExistingOrder(t *testing.T) {
_, err := g.CancelExistingOrder(917591554, "btc_usdt")
if err != nil {
t.Errorf("Test failed - Gateio CancelExistingOrder: %s", err)
t.Errorf("Gateio CancelExistingOrder: %s", err)
}
}
@@ -105,7 +105,7 @@ func TestGetBalances(t *testing.T) {
_, err := g.GetBalances()
if err != nil {
t.Errorf("Test failed - Gateio GetBalances: %s", err)
t.Errorf("Gateio GetBalances: %s", err)
}
}
@@ -113,7 +113,7 @@ func TestGetLatestSpotPrice(t *testing.T) {
t.Parallel()
_, err := g.GetLatestSpotPrice("btc_usdt")
if err != nil {
t.Errorf("Test failed - Gateio GetLatestSpotPrice: %s", err)
t.Errorf("Gateio GetLatestSpotPrice: %s", err)
}
}
@@ -121,7 +121,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := g.GetTicker("btc_usdt")
if err != nil {
t.Errorf("Test failed - Gateio GetTicker: %s", err)
t.Errorf("Gateio GetTicker: %s", err)
}
}
@@ -129,7 +129,7 @@ func TestGetTickers(t *testing.T) {
t.Parallel()
_, err := g.GetTickers()
if err != nil {
t.Errorf("Test failed - Gateio GetTicker: %s", err)
t.Errorf("Gateio GetTicker: %s", err)
}
}
@@ -137,7 +137,7 @@ func TestGetOrderbook(t *testing.T) {
t.Parallel()
_, err := g.GetOrderbook("btc_usdt")
if err != nil {
t.Errorf("Test failed - Gateio GetTicker: %s", err)
t.Errorf("Gateio GetTicker: %s", err)
}
}
@@ -151,7 +151,7 @@ func TestGetSpotKline(t *testing.T) {
})
if err != nil {
t.Errorf("Test failed - Gateio GetSpotKline: %s", err)
t.Errorf("Gateio GetSpotKline: %s", err)
}
}
@@ -192,7 +192,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := g.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -200,7 +200,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := g.GetFee(feeBuilder); resp != float64(2000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Error(err)
}
@@ -208,7 +208,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := g.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Error(err)
}
@@ -216,7 +216,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -224,7 +224,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := g.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Error(err)
}
@@ -233,7 +233,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -241,7 +241,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -249,7 +249,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -258,7 +258,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -405,12 +405,12 @@ func TestGetAccountInfo(t *testing.T) {
if apiSecret == "" || apiKey == "" {
_, err := g.GetAccountInfo()
if err == nil {
t.Error("Test Failed - GetAccountInfo() error")
t.Error("GetAccountInfo() Expected error")
}
} else {
_, err := g.GetAccountInfo()
if err != nil {
t.Error("Test Failed - GetAccountInfo() error", err)
t.Error("GetAccountInfo() error", err)
}
}
}
@@ -418,7 +418,7 @@ func TestGetAccountInfo(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := g.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}

View File

@@ -14,6 +14,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -69,9 +70,34 @@ func (g *Gateio) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
OrderbookFetching: true,
TradeFetching: true,
KlineFetching: true,
Subscribe: true,
Unsubscribe: true,
AuthenticatedEndpoints: true,
MessageCorrelation: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.NoFiatWithdrawals,
@@ -92,14 +118,6 @@ func (g *Gateio) SetDefaults() {
g.API.Endpoints.URLSecondary = g.API.Endpoints.URLSecondaryDefault
g.API.Endpoints.WebsocketURL = gateioWebsocketEndpoint
g.Websocket = wshandler.New()
g.Websocket.Functionality = wshandler.WebsocketTickerSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketKlineSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported |
wshandler.WebsocketMessageCorrelationSupported
g.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
g.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
g.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -129,6 +147,7 @@ func (g *Gateio) Setup(exch *config.ExchangeConfig) error {
Connector: g.WsConnect,
Subscriber: g.Subscribe,
UnSubscriber: g.Unsubscribe,
Features: &g.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -19,11 +19,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Gemini load config error", err)
log.Fatal("Gemini load config error", err)
}
geminiConfig, err := cfg.GetExchangeConfig("Gemini")
if err != nil {
log.Fatal("Test Failed - Gemini Setup() init error", err)
log.Fatal("Gemini Setup() init error", err)
}
geminiConfig.API.AuthenticatedSupport = true
geminiConfig.API.Credentials.Key = apiKey
@@ -31,7 +31,7 @@ func TestMain(m *testing.M) {
g.SetDefaults()
err = g.Setup(geminiConfig)
if err != nil {
log.Fatal("Test Failed - Gemini setup error", err)
log.Fatal("Gemini setup error", err)
}
g.API.Endpoints.URL = geminiSandboxAPIURL
log.Printf(sharedtestvalues.LiveTesting, g.GetName(), g.API.Endpoints.URL)

View File

@@ -22,11 +22,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Gemini load config error", err)
log.Fatal("Gemini load config error", err)
}
geminiConfig, err := cfg.GetExchangeConfig("Gemini")
if err != nil {
log.Fatal("Test Failed - Mock server error", err)
log.Fatal("Mock server error", err)
}
g.SkipAuthCheck = true
geminiConfig.API.AuthenticatedSupport = true
@@ -35,12 +35,12 @@ func TestMain(m *testing.M) {
g.SetDefaults()
err = g.Setup(geminiConfig)
if err != nil {
log.Fatal("Test Failed - Gemini setup error", err)
log.Fatal("Gemini setup error", err)
}
serverDetails, newClient, err := mock.NewVCRServer(mockFile)
if err != nil {
log.Fatalf("Test Failed - Mock server error %s", err)
log.Fatalf("Mock server error %s", err)
}
g.HTTPClient = newClient

View File

@@ -30,7 +30,7 @@ func TestGetSymbols(t *testing.T) {
t.Parallel()
_, err := g.GetSymbols()
if err != nil {
t.Error("Test Failed - GetSymbols() error", err)
t.Error("GetSymbols() error", err)
}
}
@@ -38,11 +38,11 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := g.GetTicker("BTCUSD")
if err != nil {
t.Error("Test Failed - GetTicker() error", err)
t.Error("GetTicker() error", err)
}
_, err = g.GetTicker("bla")
if err == nil {
t.Error("Test Failed - GetTicker() error", err)
t.Error("GetTicker() Expected error")
}
}
@@ -50,7 +50,7 @@ func TestGetOrderbook(t *testing.T) {
t.Parallel()
_, err := g.GetOrderbook(testCurrency, url.Values{})
if err != nil {
t.Error("Test Failed - GetOrderbook() error", err)
t.Error("GetOrderbook() error", err)
}
}
@@ -58,7 +58,7 @@ func TestGetTrades(t *testing.T) {
t.Parallel()
_, err := g.GetTrades(testCurrency, url.Values{})
if err != nil {
t.Error("Test Failed - GetTrades() error", err)
t.Error("GetTrades() error", err)
}
}
@@ -66,9 +66,9 @@ func TestGetNotionalVolume(t *testing.T) {
t.Parallel()
_, err := g.GetNotionalVolume()
if err != nil && mockTests {
t.Error("Test Failed - GetNotionalVolume() error", err)
t.Error("GetNotionalVolume() error", err)
} else if err == nil && !mockTests {
t.Error("Test Failed - GetNotionalVolume() error cannot be nil")
t.Error("GetNotionalVolume() error cannot be nil")
}
}
@@ -76,7 +76,7 @@ func TestGetAuction(t *testing.T) {
t.Parallel()
_, err := g.GetAuction(testCurrency)
if err != nil {
t.Error("Test Failed - GetAuction() error", err)
t.Error("GetAuction() error", err)
}
}
@@ -84,7 +84,7 @@ func TestGetAuctionHistory(t *testing.T) {
t.Parallel()
_, err := g.GetAuctionHistory(testCurrency, url.Values{})
if err != nil {
t.Error("Test Failed - GetAuctionHistory() error", err)
t.Error("GetAuctionHistory() error", err)
}
}
@@ -92,9 +92,9 @@ func TestNewOrder(t *testing.T) {
t.Parallel()
_, err := g.NewOrder(testCurrency, 1, 9000, "buy", "exchange limit")
if err != nil && mockTests {
t.Error("Test Failed - NewOrder() error", err)
t.Error("NewOrder() error", err)
} else if err == nil && !mockTests {
t.Error("Test Failed - NewOrder() error cannot be nil")
t.Error("NewOrder() error cannot be nil")
}
}
@@ -102,9 +102,9 @@ func TestCancelExistingOrder(t *testing.T) {
t.Parallel()
_, err := g.CancelExistingOrder(265555413)
if err != nil && mockTests {
t.Error("Test Failed - CancelExistingOrder() error", err)
t.Error("CancelExistingOrder() error", err)
} else if err == nil && !mockTests {
t.Error("Test Failed - CancelExistingOrder() error cannot be nil")
t.Error("CancelExistingOrder() error cannot be nil")
}
}
@@ -112,9 +112,9 @@ func TestCancelExistingOrders(t *testing.T) {
t.Parallel()
_, err := g.CancelExistingOrders(false)
if err != nil && mockTests {
t.Error("Test Failed - CancelExistingOrders() error", err)
t.Error("CancelExistingOrders() error", err)
} else if err == nil && !mockTests {
t.Error("Test Failed - CancelExistingOrders() error cannot be nil")
t.Error("CancelExistingOrders() error cannot be nil")
}
}
@@ -122,9 +122,9 @@ func TestGetOrderStatus(t *testing.T) {
t.Parallel()
_, err := g.GetOrderStatus(265563260)
if err != nil && mockTests {
t.Error("Test Failed - GetOrderStatus() error", err)
t.Error("GetOrderStatus() error", err)
} else if err == nil && !mockTests {
t.Error("Test Failed - GetOrderStatus() error cannot be nil")
t.Error("GetOrderStatus() error cannot be nil")
}
}
@@ -132,9 +132,9 @@ func TestGetOrders(t *testing.T) {
t.Parallel()
_, err := g.GetOrders()
if err != nil && mockTests {
t.Error("Test Failed - GetOrders() error", err)
t.Error("GetOrders() error", err)
} else if err == nil && !mockTests {
t.Error("Test Failed - GetOrders() error cannot be nil")
t.Error("GetOrders() error cannot be nil")
}
}
@@ -142,9 +142,9 @@ func TestGetTradeHistory(t *testing.T) {
t.Parallel()
_, err := g.GetTradeHistory(testCurrency, 0)
if err != nil && mockTests {
t.Error("Test Failed - GetTradeHistory() error", err)
t.Error("GetTradeHistory() error", err)
} else if err == nil && !mockTests {
t.Error("Test Failed - GetTradeHistory() error cannot be nil")
t.Error("GetTradeHistory() error cannot be nil")
}
}
@@ -152,9 +152,9 @@ func TestGetTradeVolume(t *testing.T) {
t.Parallel()
_, err := g.GetTradeVolume()
if err != nil && mockTests {
t.Error("Test Failed - GetTradeVolume() error", err)
t.Error("GetTradeVolume() error", err)
} else if err == nil && !mockTests {
t.Error("Test Failed - GetTradeVolume() error cannot be nil")
t.Error("GetTradeVolume() error cannot be nil")
}
}
@@ -162,9 +162,9 @@ func TestGetBalances(t *testing.T) {
t.Parallel()
_, err := g.GetBalances()
if err != nil && mockTests {
t.Error("Test Failed - GetBalances() error", err)
t.Error("GetBalances() error", err)
} else if err == nil && !mockTests {
t.Error("Test Failed - GetBalances() error cannot be nil")
t.Error("GetBalances() error cannot be nil")
}
}
@@ -172,7 +172,7 @@ func TestGetCryptoDepositAddress(t *testing.T) {
t.Parallel()
_, err := g.GetCryptoDepositAddress("LOL123", "btc")
if err == nil {
t.Error("Test Failed - GetCryptoDepositAddress() error", err)
t.Error("GetCryptoDepositAddress() Expected error")
}
}
@@ -180,7 +180,7 @@ func TestWithdrawCrypto(t *testing.T) {
t.Parallel()
_, err := g.WithdrawCrypto("LOL123", "btc", 1)
if err == nil {
t.Error("Test Failed - WithdrawCrypto() error", err)
t.Error("WithdrawCrypto() Expected error")
}
}
@@ -188,9 +188,9 @@ func TestPostHeartbeat(t *testing.T) {
t.Parallel()
_, err := g.PostHeartbeat()
if err != nil && mockTests {
t.Error("Test Failed - PostHeartbeat() error", err)
t.Error("PostHeartbeat() error", err)
} else if err == nil && !mockTests {
t.Error("Test Failed - PostHeartbeat() error cannot be nil")
t.Error("PostHeartbeat() error cannot be nil")
}
}
@@ -234,7 +234,7 @@ func TestGetFee(t *testing.T) {
if areTestAPIKeysSet() || mockTests {
// CryptocurrencyTradeFee Basic
if resp, err := g.GetFee(feeBuilder); resp != float64(0.0035) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0.0035),
resp)
t.Error(err)
@@ -245,7 +245,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := g.GetFee(feeBuilder); resp != float64(3500) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(3500),
resp)
t.Error(err)
@@ -255,7 +255,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := g.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0.001),
resp)
t.Error(err)
@@ -265,7 +265,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -275,7 +275,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -286,7 +286,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -296,7 +296,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -306,7 +306,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -317,7 +317,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := g.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0),
resp)
t.Error(err)
@@ -470,7 +470,7 @@ func TestModifyOrder(t *testing.T) {
t.Parallel()
_, err := g.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -535,7 +535,7 @@ func TestGetDepositAddress(t *testing.T) {
t.Parallel()
_, err := g.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress error cannot be nil")
t.Error("GetDepositAddress error cannot be nil")
}
}

View File

@@ -15,6 +15,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -69,9 +70,28 @@ func (g *Gemini) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: false,
RESTCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
FiatWithdrawalFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
OrderbookFetching: true,
TradeFetching: true,
AuthenticatedEndpoints: true,
MessageSequenceNumbers: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithAPIPermission |
exchange.AutoWithdrawCryptoWithSetup |
@@ -91,10 +111,6 @@ func (g *Gemini) SetDefaults() {
g.API.Endpoints.URL = g.API.Endpoints.URLDefault
g.API.Endpoints.WebsocketURL = geminiWebsocketEndpoint
g.Websocket = wshandler.New()
g.Websocket.Functionality = wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported |
wshandler.WebsocketSequenceNumberSupported
g.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
g.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
g.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -126,6 +142,7 @@ func (g *Gemini) Setup(exch *config.ExchangeConfig) error {
ExchangeName: exch.Name,
RunningURL: exch.API.Endpoints.WebsocketURL,
Connector: g.WsConnect,
Features: &g.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -33,11 +33,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - HitBTC load config error", err)
t.Fatal("HitBTC load config error", err)
}
hitbtcConfig, err := cfg.GetExchangeConfig("HitBTC")
if err != nil {
t.Error("Test Failed - HitBTC Setup() init error")
t.Error("HitBTC Setup() init error")
}
hitbtcConfig.API.AuthenticatedSupport = true
hitbtcConfig.API.AuthenticatedWebsocketSupport = true
@@ -46,7 +46,7 @@ func TestSetup(t *testing.T) {
err = h.Setup(hitbtcConfig)
if err != nil {
t.Fatal("Test Failed - HitBTC setup error", err)
t.Fatal("HitBTC setup error", err)
}
}
@@ -143,7 +143,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := h.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -151,7 +151,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := h.GetFee(feeBuilder); resp != float64(2000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Error(err)
}
@@ -159,7 +159,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := h.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Error(err)
}
@@ -167,7 +167,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := h.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -175,7 +175,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := h.GetFee(feeBuilder); resp != float64(0.042800) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.042800), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.042800), resp)
t.Error(err)
}
@@ -184,7 +184,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := h.GetFee(feeBuilder); resp != float64(0) || err == nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -195,7 +195,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.BTC
feeBuilder.Pair.Quote = currency.LTC
if resp, err := h.GetFee(feeBuilder); resp != float64(0.0006) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0006), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0006), resp)
t.Error(err)
}
@@ -203,7 +203,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := h.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -212,7 +212,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := h.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -355,7 +355,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := h.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -418,12 +418,12 @@ func TestGetDepositAddress(t *testing.T) {
if areTestAPIKeysSet() {
_, err := h.GetDepositAddress(currency.BTC, "")
if err != nil {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
}
} else {
_, err := h.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}
}

View File

@@ -14,6 +14,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -69,9 +70,36 @@ func (h *HitBTC) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
ModifyOrder: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
CryptoDepositFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
OrderbookFetching: true,
Subscribe: true,
Unsubscribe: true,
AuthenticatedEndpoints: true,
SubmitOrder: true,
CancelOrder: true,
MessageSequenceNumbers: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.NoFiatWithdrawals,
@@ -90,14 +118,6 @@ func (h *HitBTC) SetDefaults() {
h.API.Endpoints.URL = h.API.Endpoints.URLDefault
h.API.Endpoints.WebsocketURL = hitbtcWebsocketAddress
h.Websocket = wshandler.New()
h.Websocket.Functionality = wshandler.WebsocketTickerSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported |
wshandler.WebsocketSubmitOrderSupported |
wshandler.WebsocketCancelOrderSupported |
wshandler.WebsocketMessageCorrelationSupported
h.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
h.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
h.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -127,6 +147,7 @@ func (h *HitBTC) Setup(exch *config.ExchangeConfig) error {
Connector: h.WsConnect,
Subscriber: h.Subscribe,
UnSubscriber: h.Unsubscribe,
Features: &h.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -40,11 +40,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Huobi load config error", err)
log.Fatal("Huobi load config error", err)
}
hConfig, err := cfg.GetExchangeConfig("Huobi")
if err != nil {
t.Error("Test Failed - Huobi Setup() init error")
t.Error("Huobi Setup() init error")
}
hConfig.API.AuthenticatedSupport = true
hConfig.API.AuthenticatedWebsocketSupport = true
@@ -53,7 +53,7 @@ func TestSetup(t *testing.T) {
err = h.Setup(hConfig)
if err != nil {
t.Fatal("Test Failed - Huobi setup error", err)
t.Fatal("Huobi setup error", err)
}
}
@@ -105,7 +105,7 @@ func TestGetSpotKline(t *testing.T) {
Size: 0,
})
if err != nil {
t.Errorf("Test failed - Huobi TestGetSpotKline: %s", err)
t.Errorf("Huobi TestGetSpotKline: %s", err)
}
}
@@ -113,7 +113,7 @@ func TestGetMarketDetailMerged(t *testing.T) {
t.Parallel()
_, err := h.GetMarketDetailMerged(testSymbol)
if err != nil {
t.Errorf("Test failed - Huobi TestGetMarketDetailMerged: %s", err)
t.Errorf("Huobi TestGetMarketDetailMerged: %s", err)
}
}
@@ -125,7 +125,7 @@ func TestGetDepth(t *testing.T) {
})
if err != nil {
t.Errorf("Test failed - Huobi TestGetDepth: %s", err)
t.Errorf("Huobi TestGetDepth: %s", err)
}
}
@@ -133,7 +133,7 @@ func TestGetTrades(t *testing.T) {
t.Parallel()
_, err := h.GetTrades(testSymbol)
if err != nil {
t.Errorf("Test failed - Huobi TestGetTrades: %s", err)
t.Errorf("Huobi TestGetTrades: %s", err)
}
}
@@ -141,7 +141,7 @@ func TestGetLatestSpotPrice(t *testing.T) {
t.Parallel()
_, err := h.GetLatestSpotPrice(testSymbol)
if err != nil {
t.Errorf("Test failed - Huobi GetLatestSpotPrice: %s", err)
t.Errorf("Huobi GetLatestSpotPrice: %s", err)
}
}
@@ -149,7 +149,7 @@ func TestGetTradeHistory(t *testing.T) {
t.Parallel()
_, err := h.GetTradeHistory(testSymbol, "50")
if err != nil {
t.Errorf("Test failed - Huobi TestGetTradeHistory: %s", err)
t.Errorf("Huobi TestGetTradeHistory: %s", err)
}
}
@@ -157,7 +157,7 @@ func TestGetMarketDetail(t *testing.T) {
t.Parallel()
_, err := h.GetMarketDetail(testSymbol)
if err != nil {
t.Errorf("Test failed - Huobi TestGetTradeHistory: %s", err)
t.Errorf("Huobi TestGetTradeHistory: %s", err)
}
}
@@ -165,7 +165,7 @@ func TestGetSymbols(t *testing.T) {
t.Parallel()
_, err := h.GetSymbols()
if err != nil {
t.Errorf("Test failed - Huobi TestGetSymbols: %s", err)
t.Errorf("Huobi TestGetSymbols: %s", err)
}
}
@@ -173,7 +173,7 @@ func TestGetCurrencies(t *testing.T) {
t.Parallel()
_, err := h.GetCurrencies()
if err != nil {
t.Errorf("Test failed - Huobi TestGetCurrencies: %s", err)
t.Errorf("Huobi TestGetCurrencies: %s", err)
}
}
@@ -188,7 +188,7 @@ func TestGetTimestamp(t *testing.T) {
t.Parallel()
_, err := h.GetTimestamp()
if err != nil {
t.Errorf("Test failed - Huobi TestGetTimestamp: %s", err)
t.Errorf("Huobi TestGetTimestamp: %s", err)
}
}
@@ -201,7 +201,7 @@ func TestGetAccounts(t *testing.T) {
_, err := h.GetAccounts()
if err != nil {
t.Errorf("Test failed - Huobi GetAccounts: %s", err)
t.Errorf("Huobi GetAccounts: %s", err)
}
}
@@ -214,13 +214,13 @@ func TestGetAccountBalance(t *testing.T) {
result, err := h.GetAccounts()
if err != nil {
t.Errorf("Test failed - Huobi GetAccounts: %s", err)
t.Errorf("Huobi GetAccounts: %s", err)
}
userID := strconv.FormatInt(result[0].ID, 10)
_, err = h.GetAccountBalance(userID)
if err != nil {
t.Errorf("Test failed - Huobi GetAccountBalance: %s", err)
t.Errorf("Huobi GetAccountBalance: %s", err)
}
}
@@ -233,7 +233,7 @@ func TestGetAggregatedBalance(t *testing.T) {
_, err := h.GetAggregatedBalance()
if err != nil {
t.Errorf("Test failed - Huobi GetAggregatedBalance: %s", err)
t.Errorf("Huobi GetAggregatedBalance: %s", err)
}
}
@@ -254,7 +254,7 @@ func TestSpotNewOrder(t *testing.T) {
_, err := h.SpotNewOrder(arg)
if err != nil {
t.Errorf("Test failed - Huobi SpotNewOrder: %s", err)
t.Errorf("Huobi SpotNewOrder: %s", err)
}
}
@@ -263,7 +263,7 @@ func TestCancelExistingOrder(t *testing.T) {
_, err := h.CancelExistingOrder(1337)
if err == nil {
t.Error("Test failed - Huobi TestCancelExistingOrder: Invalid orderID returned true")
t.Error("Huobi TestCancelExistingOrder Expected error")
}
}
@@ -272,7 +272,7 @@ func TestGetOrder(t *testing.T) {
_, err := h.GetOrder(1337)
if err == nil {
t.Error("Test failed - Huobi TestCancelOrder: Invalid orderID returned true")
t.Error("Huobi TestCancelOrder Expected error")
}
}
@@ -285,7 +285,7 @@ func TestGetMarginLoanOrders(t *testing.T) {
_, err := h.GetMarginLoanOrders(testSymbol, "", "", "", "", "", "", "")
if err != nil {
t.Errorf("Test failed - Huobi TestGetMarginLoanOrders: %s", err)
t.Errorf("Huobi TestGetMarginLoanOrders: %s", err)
}
}
@@ -298,7 +298,7 @@ func TestGetMarginAccountBalance(t *testing.T) {
_, err := h.GetMarginAccountBalance(testSymbol)
if err != nil {
t.Errorf("Test failed - Huobi TestGetMarginAccountBalance: %s", err)
t.Errorf("Huobi TestGetMarginAccountBalance: %s", err)
}
}
@@ -307,7 +307,7 @@ func TestCancelWithdraw(t *testing.T) {
_, err := h.CancelWithdraw(1337)
if err == nil {
t.Error("Test failed - Huobi TestCancelWithdraw: Invalid withdraw-ID was valid")
t.Error("Huobi TestCancelWithdraw Expected error")
}
}
@@ -317,23 +317,23 @@ func TestPEMLoadAndSign(t *testing.T) {
pemKey := strings.NewReader(h.API.Credentials.PEMKey)
pemBytes, err := ioutil.ReadAll(pemKey)
if err != nil {
t.Fatalf("Test Failed. TestPEMLoadAndSign Unable to ioutil.ReadAll PEM key: %s", err)
t.Fatalf("TestPEMLoadAndSign Unable to ioutil.ReadAll PEM key: %s", err)
}
block, _ := pem.Decode(pemBytes)
if block == nil {
t.Fatalf("Test Failed. TestPEMLoadAndSign Block is nil")
t.Fatalf("TestPEMLoadAndSign Block is nil")
}
x509Encoded := block.Bytes
privKey, err := x509.ParseECPrivateKey(x509Encoded)
if err != nil {
t.Fatalf("Test Failed. TestPEMLoadAndSign Unable to ParseECPrivKey: %s", err)
t.Fatalf("TestPEMLoadAndSign Unable to ParseECPrivKey: %s", err)
}
_, _, err = ecdsa.Sign(rand.Reader, privKey, crypto.GetSHA256([]byte("test")))
if err != nil {
t.Fatalf("Test Failed. TestPEMLoadAndSign Unable to sign: %s", err)
t.Fatalf("TestPEMLoadAndSign Unable to sign: %s", err)
}
}
@@ -371,7 +371,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := h.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -379,7 +379,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := h.GetFee(feeBuilder); resp != float64(2000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Error(err)
}
@@ -387,7 +387,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := h.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Error(err)
}
@@ -395,14 +395,14 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := h.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
// CryptocurrencyWithdrawalFee Basic
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := h.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -411,7 +411,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := h.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -419,7 +419,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := h.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -427,7 +427,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := h.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -436,7 +436,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := h.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -586,12 +586,12 @@ func TestGetAccountInfo(t *testing.T) {
if apiKey == "" || apiSecret == "" {
_, err := h.GetAccountInfo()
if err == nil {
t.Error("Test Failed - GetAccountInfo() error")
t.Error("GetAccountInfo() Expected error")
}
} else {
_, err := h.GetAccountInfo()
if err != nil {
t.Error("Test Failed - GetAccountInfo() error", err)
t.Error("GetAccountInfo() error", err)
}
}
}
@@ -599,7 +599,7 @@ func TestGetAccountInfo(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := h.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -661,7 +661,7 @@ func TestWithdrawInternationalBank(t *testing.T) {
func TestGetDepositAddress(t *testing.T) {
_, err := h.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}

View File

@@ -14,6 +14,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -70,9 +71,31 @@ func (h *HUOBI) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
CryptoWithdrawal: true,
TradeFee: true,
},
WebsocketCapabilities: protocol.Features{
KlineFetching: true,
OrderbookFetching: true,
TradeFetching: true,
Subscribe: true,
Unsubscribe: true,
AuthenticatedEndpoints: true,
AccountInfo: true,
MessageCorrelation: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithSetup |
exchange.NoFiatWithdrawals,
@@ -91,14 +114,6 @@ func (h *HUOBI) SetDefaults() {
h.API.Endpoints.URL = h.API.Endpoints.URLDefault
h.API.Endpoints.WebsocketURL = wsMarketURL
h.Websocket = wshandler.New()
h.Websocket.Functionality = wshandler.WebsocketKlineSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported |
wshandler.WebsocketAccountDataSupported |
wshandler.WebsocketMessageCorrelationSupported
h.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
h.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
h.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -131,6 +146,7 @@ func (h *HUOBI) Setup(exch *config.ExchangeConfig) error {
Connector: h.WsConnect,
Subscriber: h.Subscribe,
UnSubscriber: h.Unsubscribe,
Features: &h.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -28,11 +28,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - Itbit load config error", err)
t.Fatal("Itbit load config error", err)
}
itbitConfig, err := cfg.GetExchangeConfig("ITBIT")
if err != nil {
t.Error("Test Failed - Itbit Setup() init error")
t.Error("Itbit Setup() init error")
}
itbitConfig.API.AuthenticatedSupport = true
itbitConfig.API.Credentials.Key = apiKey
@@ -41,7 +41,7 @@ func TestSetup(t *testing.T) {
err = i.Setup(itbitConfig)
if err != nil {
t.Fatal("Test Failed - Itbit setup error", err)
t.Fatal("Itbit setup error", err)
}
}
@@ -49,7 +49,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := i.GetTicker("XBTUSD")
if err != nil {
t.Error("Test Failed - GetTicker() error", err)
t.Error("GetTicker() error", err)
}
}
@@ -57,7 +57,7 @@ func TestGetOrderbook(t *testing.T) {
t.Parallel()
_, err := i.GetOrderbook("XBTSGD")
if err != nil {
t.Error("Test Failed - GetOrderbook() error", err)
t.Error("GetOrderbook() error", err)
}
}
@@ -65,49 +65,49 @@ func TestGetTradeHistory(t *testing.T) {
t.Parallel()
_, err := i.GetTradeHistory("XBTUSD", "0")
if err != nil {
t.Error("Test Failed - GetTradeHistory() error", err)
t.Error("GetTradeHistory() error", err)
}
}
func TestGetWallets(t *testing.T) {
_, err := i.GetWallets(url.Values{})
if err == nil {
t.Error("Test Failed - GetWallets() error", err)
t.Error("GetWallets() Expected error")
}
}
func TestCreateWallet(t *testing.T) {
_, err := i.CreateWallet("test")
if err == nil {
t.Error("Test Failed - CreateWallet() error", err)
t.Error("CreateWallet() Expected error")
}
}
func TestGetWallet(t *testing.T) {
_, err := i.GetWallet("1337")
if err == nil {
t.Error("Test Failed - GetWallet() error", err)
t.Error("GetWallet() Expected error")
}
}
func TestGetWalletBalance(t *testing.T) {
_, err := i.GetWalletBalance("1337", "XRT")
if err == nil {
t.Error("Test Failed - GetWalletBalance() error", err)
t.Error("GetWalletBalance() Expected error")
}
}
func TestGetWalletTrades(t *testing.T) {
_, err := i.GetWalletTrades("1337", url.Values{})
if err == nil {
t.Error("Test Failed - GetWalletTrades() error", err)
t.Error("GetWalletTrades() Expected error")
}
}
func TestGetFundingHistory(t *testing.T) {
_, err := i.GetFundingHistoryForWallet("1337", url.Values{})
if err == nil {
t.Error("Test Failed - GetFundingHistory() error", err)
t.Error("GetFundingHistory() Expected error")
}
}
@@ -116,14 +116,14 @@ func TestPlaceOrder(t *testing.T) {
exchange.LimitOrderType.ToLower().ToString(), "USD", 1, 0.2, "banjo",
"sauce")
if err == nil {
t.Error("Test Failed - PlaceOrder() error", err)
t.Error("PlaceOrder() Expected error")
}
}
func TestGetOrder(t *testing.T) {
_, err := i.GetOrder("1337", url.Values{})
if err == nil {
t.Error("Test Failed - GetOrder() error", err)
t.Error("GetOrder() Expected error")
}
}
@@ -131,21 +131,21 @@ func TestCancelExistingOrder(t *testing.T) {
t.Skip()
err := i.CancelExistingOrder("1337", "1337order")
if err == nil {
t.Error("Test Failed - CancelOrder() error", err)
t.Error("CancelOrder() Expected error")
}
}
func TestGetCryptoDepositAddress(t *testing.T) {
_, err := i.GetCryptoDepositAddress("1337", "AUD")
if err == nil {
t.Error("Test Failed - GetCryptoDepositAddress() error", err)
t.Error("GetCryptoDepositAddress() Expected error")
}
}
func TestWalletTransfer(t *testing.T) {
_, err := i.WalletTransfer("1337", "mywallet", "anotherwallet", 200, "USD")
if err == nil {
t.Error("Test Failed - WalletTransfer() error", err)
t.Error("WalletTransfer() Expected error")
}
}
@@ -183,7 +183,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := i.GetFee(feeBuilder); resp != float64(0.0035) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0035), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0035), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -191,7 +191,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := i.GetFee(feeBuilder); resp != float64(3500) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(3500), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(3500), resp)
t.Error(err)
}
@@ -199,7 +199,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := i.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -207,14 +207,14 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := i.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
// CryptocurrencyWithdrawalFee Basic
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := i.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -223,7 +223,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := i.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -231,7 +231,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := i.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -239,7 +239,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := i.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -248,7 +248,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := i.GetFee(feeBuilder); resp != float64(40) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(40), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(40), resp)
t.Error(err)
}
}
@@ -390,7 +390,7 @@ func TestGetAccountInfo(t *testing.T) {
if apiKey != "" || apiSecret != "" || clientID != "" {
_, err := i.GetAccountInfo()
if err == nil {
t.Error("Test Failed - GetAccountInfo() error")
t.Error("GetAccountInfo() Expected error")
}
}
}
@@ -398,7 +398,7 @@ func TestGetAccountInfo(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := i.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -457,6 +457,6 @@ func TestWithdrawInternationalBank(t *testing.T) {
func TestGetDepositAddress(t *testing.T) {
_, err := i.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}

View File

@@ -14,6 +14,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -68,9 +69,21 @@ func (i *ItBit) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: false,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: false,
TickerBatching: false,
RESTCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrder: true,
SubmitOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoDeposit: true,
TradeFee: true,
FiatWithdrawalFee: true,
},
WithdrawPermissions: exchange.WithdrawCryptoViaWebsiteOnly |
exchange.WithdrawFiatViaWebsiteOnly,

View File

@@ -34,11 +34,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Kraken load config error", err)
log.Fatal("Kraken load config error", err)
}
krakenConfig, err := cfg.GetExchangeConfig("Kraken")
if err != nil {
t.Error("Test Failed - kraken Setup() init error", err)
t.Error("kraken Setup() init error", err)
}
krakenConfig.API.AuthenticatedSupport = true
krakenConfig.API.Credentials.Key = apiKey
@@ -49,7 +49,7 @@ func TestSetup(t *testing.T) {
err = k.Setup(krakenConfig)
if err != nil {
t.Fatal("Test Failed - Kraken setup error", err)
t.Fatal("Kraken setup error", err)
}
}
@@ -58,7 +58,7 @@ func TestGetServerTime(t *testing.T) {
t.Parallel()
_, err := k.GetServerTime()
if err != nil {
t.Error("Test Failed - GetServerTime() error", err)
t.Error("GetServerTime() error", err)
}
}
@@ -67,7 +67,7 @@ func TestGetAssets(t *testing.T) {
t.Parallel()
_, err := k.GetAssets()
if err != nil {
t.Error("Test Failed - GetAssets() error", err)
t.Error("GetAssets() error", err)
}
}
@@ -76,7 +76,7 @@ func TestGetAssetPairs(t *testing.T) {
t.Parallel()
_, err := k.GetAssetPairs()
if err != nil {
t.Error("Test Failed - GetAssetPairs() error", err)
t.Error("GetAssetPairs() error", err)
}
}
@@ -85,7 +85,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := k.GetTicker("BCHEUR")
if err != nil {
t.Error("Test Failed - GetTicker() error", err)
t.Error("GetTicker() error", err)
}
}
@@ -94,7 +94,7 @@ func TestGetTickers(t *testing.T) {
t.Parallel()
_, err := k.GetTickers("LTCUSD,ETCUSD")
if err != nil {
t.Error("Test failed - GetTickers() error", err)
t.Error("GetTickers() error", err)
}
}
@@ -103,7 +103,7 @@ func TestGetOHLC(t *testing.T) {
t.Parallel()
_, err := k.GetOHLC("BCHEUR")
if err != nil {
t.Error("Test Failed - GetOHLC() error", err)
t.Error("GetOHLC() error", err)
}
}
@@ -112,7 +112,7 @@ func TestGetDepth(t *testing.T) {
t.Parallel()
_, err := k.GetDepth("BCHEUR")
if err != nil {
t.Error("Test Failed - GetDepth() error", err)
t.Error("GetDepth() error", err)
}
}
@@ -121,7 +121,7 @@ func TestGetTrades(t *testing.T) {
t.Parallel()
_, err := k.GetTrades("BCHEUR")
if err != nil {
t.Error("Test Failed - GetTrades() error", err)
t.Error("GetTrades() error", err)
}
}
@@ -130,7 +130,7 @@ func TestGetSpread(t *testing.T) {
t.Parallel()
_, err := k.GetSpread("BCHEUR")
if err != nil {
t.Error("Test Failed - GetSpread() error", err)
t.Error("GetSpread() error", err)
}
}
@@ -139,7 +139,7 @@ func TestGetBalance(t *testing.T) {
t.Parallel()
_, err := k.GetBalance()
if err == nil {
t.Error("Test Failed - GetBalance() error", err)
t.Error("GetBalance() Expected error")
}
}
@@ -149,7 +149,7 @@ func TestGetTradeBalance(t *testing.T) {
args := TradeBalanceOptions{Asset: "ZEUR"}
_, err := k.GetTradeBalance(args)
if err == nil {
t.Error("Test Failed - GetTradeBalance() error", err)
t.Error("GetTradeBalance() Expected error")
}
}
@@ -159,7 +159,7 @@ func TestGetOpenOrders(t *testing.T) {
args := OrderInfoOptions{Trades: true}
_, err := k.GetOpenOrders(args)
if err == nil {
t.Error("Test Failed - GetOpenOrders() error", err)
t.Error("GetOpenOrders() Expected error")
}
}
@@ -169,7 +169,7 @@ func TestGetClosedOrders(t *testing.T) {
args := GetClosedOrdersOptions{Trades: true, Start: "OE4KV4-4FVQ5-V7XGPU"}
_, err := k.GetClosedOrders(args)
if err == nil {
t.Error("Test Failed - GetClosedOrders() error", err)
t.Error("GetClosedOrders() Expected error")
}
}
@@ -179,7 +179,7 @@ func TestQueryOrdersInfo(t *testing.T) {
args := OrderInfoOptions{Trades: true}
_, err := k.QueryOrdersInfo(args, "OR6ZFV-AA6TT-CKFFIW", "OAMUAJ-HLVKG-D3QJ5F")
if err == nil {
t.Error("Test Failed - QueryOrdersInfo() error", err)
t.Error("QueryOrdersInfo() Expected error")
}
}
@@ -189,7 +189,7 @@ func TestGetTradesHistory(t *testing.T) {
args := GetTradesHistoryOptions{Trades: true, Start: "TMZEDR-VBJN2-NGY6DX", End: "TVRXG2-R62VE-RWP3UW"}
_, err := k.GetTradesHistory(args)
if err == nil {
t.Error("Test Failed - GetTradesHistory() error", err)
t.Error("GetTradesHistory() Expected error")
}
}
@@ -198,7 +198,7 @@ func TestQueryTrades(t *testing.T) {
t.Parallel()
_, err := k.QueryTrades(true, "TMZEDR-VBJN2-NGY6DX", "TFLWIB-KTT7L-4TWR3L", "TDVRAH-2H6OS-SLSXRX")
if err == nil {
t.Error("Test Failed - QueryTrades() error", err)
t.Error("QueryTrades() Expected error")
}
}
@@ -207,7 +207,7 @@ func TestOpenPositions(t *testing.T) {
t.Parallel()
_, err := k.OpenPositions(false)
if err == nil {
t.Error("Test Failed - OpenPositions() error", err)
t.Error("OpenPositions() Expected error")
}
}
@@ -217,7 +217,7 @@ func TestGetLedgers(t *testing.T) {
args := GetLedgersOptions{Start: "LRUHXI-IWECY-K4JYGO", End: "L5NIY7-JZQJD-3J4M2V", Ofs: 15}
_, err := k.GetLedgers(args)
if err == nil {
t.Error("Test Failed - GetLedgers() error", err)
t.Error("GetLedgers() Expected error")
}
}
@@ -226,7 +226,7 @@ func TestQueryLedgers(t *testing.T) {
t.Parallel()
_, err := k.QueryLedgers("LVTSFS-NHZVM-EXNZ5M")
if err == nil {
t.Error("Test Failed - QueryLedgers() error", err)
t.Error("QueryLedgers() Expected error")
}
}
@@ -235,7 +235,7 @@ func TestGetTradeVolume(t *testing.T) {
t.Parallel()
_, err := k.GetTradeVolume(true, "OAVY7T-MV5VK-KHDF5X")
if err == nil {
t.Error("Test Failed - GetTradeVolume() error", err)
t.Error("GetTradeVolume() Expected error")
}
}
@@ -247,7 +247,7 @@ func TestAddOrder(t *testing.T) {
exchange.SellOrderSide.ToLower().ToString(), exchange.LimitOrderType.ToLower().ToString(),
0.00000001, 0, 0, 0, &args)
if err == nil {
t.Error("Test Failed - AddOrder() error", err)
t.Error("AddOrder() Expected error")
}
}
@@ -256,7 +256,7 @@ func TestCancelExistingOrder(t *testing.T) {
t.Parallel()
_, err := k.CancelExistingOrder("OAVY7T-MV5VK-KHDF5X")
if err == nil {
t.Error("Test Failed - CancelExistingOrder() error", err)
t.Error("CancelExistingOrder() Expected error")
}
}
@@ -297,7 +297,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := k.GetFee(feeBuilder); resp != float64(0.0026) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0026), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0026), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -305,7 +305,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := k.GetFee(feeBuilder); resp != float64(2600) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2600), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2600), resp)
t.Error(err)
}
@@ -313,7 +313,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := k.GetFee(feeBuilder); resp != float64(0.0016) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0016), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0016), resp)
t.Error(err)
}
@@ -321,7 +321,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := k.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -329,7 +329,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := k.GetFee(feeBuilder); resp != float64(5) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(5), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(5), resp)
t.Error(err)
}
}
@@ -339,7 +339,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
feeBuilder.Pair.Base = currency.XXBT
if resp, err := k.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(5), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(5), resp)
t.Error(err)
}
@@ -347,7 +347,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := k.GetFee(feeBuilder); resp != float64(0.0005) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Error(err)
}
@@ -356,7 +356,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := k.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -365,7 +365,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := k.GetFee(feeBuilder); resp != float64(5) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(5), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(5), resp)
t.Error(err)
}
}
@@ -514,12 +514,12 @@ func TestGetAccountInfo(t *testing.T) {
if apiKey != "" || apiSecret != "" || clientID != "" {
_, err := k.GetAccountInfo()
if err != nil {
t.Error("Test Failed - GetAccountInfo() error", err)
t.Error("GetAccountInfo() error", err)
}
} else {
_, err := k.GetAccountInfo()
if err == nil {
t.Error("Test Failed - GetAccountInfo() error")
t.Error("GetAccountInfo() Expected error")
}
}
}
@@ -528,7 +528,7 @@ func TestGetAccountInfo(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := k.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -619,12 +619,12 @@ func TestGetDepositAddress(t *testing.T) {
if areTestAPIKeysSet() {
_, err := k.GetDepositAddress(currency.BTC, "")
if err != nil {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
}
} else {
_, err := k.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error can not be nil")
t.Error("GetDepositAddress() error can not be nil")
}
}
}
@@ -637,12 +637,12 @@ func TestWithdrawStatus(t *testing.T) {
if areTestAPIKeysSet() {
_, err := k.WithdrawStatus(currency.BTC, "")
if err != nil {
t.Error("Test Failed - WithdrawStatus() error", err)
t.Error("WithdrawStatus() error", err)
}
} else {
_, err := k.WithdrawStatus(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error can not be nil", err)
t.Error("GetDepositAddress() error can not be nil")
}
}
}
@@ -653,9 +653,9 @@ func TestWithdrawCancel(t *testing.T) {
TestSetup(t)
_, err := k.WithdrawCancel(currency.BTC, "")
if areTestAPIKeysSet() && err == nil {
t.Error("Test Failed - WithdrawCancel() error cannot be nil")
t.Error("WithdrawCancel() error cannot be nil")
} else if !areTestAPIKeysSet() && err == nil {
t.Errorf("Test Failed - WithdrawCancel() error - expecting an error when no keys are set but received nil")
t.Errorf("WithdrawCancel() error - expecting an error when no keys are set but received nil")
}
}

View File

@@ -13,6 +13,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -72,9 +73,37 @@ func (k *Kraken) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: false,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrder: true,
SubmitOrder: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
FiatDeposit: true,
FiatWithdraw: true,
TradeFee: true,
FiatDepositFee: true,
FiatWithdrawalFee: true,
CryptoDepositFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
KlineFetching: true,
OrderbookFetching: true,
Subscribe: true,
Unsubscribe: true,
MessageCorrelation: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithSetup |
exchange.WithdrawCryptoWith2FA |
@@ -95,13 +124,6 @@ func (k *Kraken) SetDefaults() {
k.API.Endpoints.URL = k.API.Endpoints.URLDefault
k.Websocket = wshandler.New()
k.API.Endpoints.WebsocketURL = krakenWSURL
k.Websocket.Functionality = wshandler.WebsocketTickerSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketKlineSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketMessageCorrelationSupported
k.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
k.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
k.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -131,6 +153,7 @@ func (k *Kraken) Setup(exch *config.ExchangeConfig) error {
Connector: k.WsConnect,
Subscriber: k.Subscribe,
UnSubscriber: k.Unsubscribe,
Features: &k.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -35,11 +35,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - LakeBTC load config error", err)
log.Fatal("LakeBTC load config error", err)
}
lakebtcConfig, err := cfg.GetExchangeConfig("LakeBTC")
if err != nil {
t.Error("Test Failed - LakeBTC Setup() init error")
t.Error("LakeBTC Setup() init error")
}
lakebtcConfig.API.AuthenticatedSupport = true
lakebtcConfig.API.Credentials.Key = apiKey
@@ -47,7 +47,7 @@ func TestSetup(t *testing.T) {
lakebtcConfig.Features.Enabled.Websocket = true
err = l.Setup(lakebtcConfig)
if err != nil {
t.Fatal("Test Failed - LakeBTC setup error", err)
t.Fatal("LakeBTC setup error", err)
}
l.API.Endpoints.WebsocketURL = lakeBTCWSURL
setupRan = true
@@ -58,7 +58,7 @@ func TestFetchTradablePairs(t *testing.T) {
t.Parallel()
_, err := l.FetchTradablePairs(asset.Spot)
if err != nil {
t.Fatalf("Test failed. GetTradablePairs err: %s", err)
t.Fatalf("GetTradablePairs err: %s", err)
}
}
@@ -66,7 +66,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := l.GetTicker()
if err != nil {
t.Error("Test Failed - GetTicker() error", err)
t.Error("GetTicker() error", err)
}
}
@@ -74,7 +74,7 @@ func TestGetOrderBook(t *testing.T) {
t.Parallel()
_, err := l.GetOrderBook("BTCUSD")
if err != nil {
t.Error("Test Failed - GetOrderBook() error", err)
t.Error("GetOrderBook() error", err)
}
}
@@ -82,7 +82,7 @@ func TestGetTradeHistory(t *testing.T) {
t.Parallel()
_, err := l.GetTradeHistory("BTCUSD")
if err != nil {
t.Error("Test Failed - GetTradeHistory() error", err)
t.Error("GetTradeHistory() error", err)
}
}
@@ -93,7 +93,7 @@ func TestTrade(t *testing.T) {
}
_, err := l.Trade(false, 0, 0, "USD")
if err == nil {
t.Error("Test Failed - Trade() error", err)
t.Error("Trade() Expected error")
}
}
@@ -104,7 +104,7 @@ func TestGetOpenOrders(t *testing.T) {
}
_, err := l.GetOpenOrders()
if err == nil {
t.Error("Test Failed - GetOpenOrders() error", err)
t.Error("GetOpenOrders() Expected error")
}
}
@@ -115,7 +115,7 @@ func TestGetOrders(t *testing.T) {
}
_, err := l.GetOrders([]int64{1, 2})
if err == nil {
t.Error("Test Failed - GetOrders() error", err)
t.Error("GetOrders() Expected error")
}
}
@@ -126,7 +126,7 @@ func TestCancelOrder(t *testing.T) {
}
err := l.CancelExistingOrder(1337)
if err == nil {
t.Error("Test Failed - CancelExistingOrder() error", err)
t.Error("CancelExistingOrder() Expected error")
}
}
@@ -137,7 +137,7 @@ func TestGetTrades(t *testing.T) {
}
_, err := l.GetTrades(1337)
if err == nil {
t.Error("Test Failed - GetTrades() error", err)
t.Error("GetTrades() Expected error")
}
}
@@ -148,7 +148,7 @@ func TestGetExternalAccounts(t *testing.T) {
}
_, err := l.GetExternalAccounts()
if err == nil {
t.Error("Test Failed - GetExternalAccounts() error", err)
t.Error("GetExternalAccounts() Expected error")
}
}
@@ -187,7 +187,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := l.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -195,7 +195,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := l.GetFee(feeBuilder); resp != float64(2000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Error(err)
}
@@ -203,7 +203,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := l.GetFee(feeBuilder); resp != float64(0.0015) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0015), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0015), resp)
t.Error(err)
}
@@ -211,14 +211,14 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
// CryptocurrencyWithdrawalFee Basic
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -227,7 +227,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -235,7 +235,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := l.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.001), resp)
t.Error(err)
}
@@ -243,7 +243,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -252,7 +252,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -393,7 +393,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := l.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -456,12 +456,12 @@ func TestGetDepositAddress(t *testing.T) {
if areTestAPIKeysSet() {
_, err := l.GetDepositAddress(currency.BTC, "")
if err != nil {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
}
} else {
_, err := l.GetDepositAddress(currency.DASH, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error cannot be nil")
t.Error("GetDepositAddress() error cannot be nil")
}
}
}

View File

@@ -14,6 +14,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -69,9 +70,27 @@ func (l *LakeBTC) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrders: true,
CancelOrder: true,
SubmitOrder: true,
UserTradeHistory: true,
CryptoWithdrawal: true,
TradeFee: true,
CryptoDepositFee: true,
},
WebsocketCapabilities: protocol.Features{
TradeFetching: true,
OrderbookFetching: true,
Subscribe: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.WithdrawFiatViaWebsiteOnly,
@@ -90,9 +109,6 @@ func (l *LakeBTC) SetDefaults() {
l.API.Endpoints.URL = l.API.Endpoints.URLDefault
l.Websocket = wshandler.New()
l.API.Endpoints.WebsocketURL = lakeBTCWSURL
l.Websocket.Functionality = wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketSubscribeSupported
l.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
l.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
l.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -121,6 +137,7 @@ func (l *LakeBTC) Setup(exch *config.ExchangeConfig) error {
RunningURL: exch.API.Endpoints.WebsocketURL,
Connector: l.WsConnect,
Subscriber: l.Subscribe,
Features: &l.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -34,18 +34,18 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatalf("Test Failed - Lbank Setup() init error:, %v", err)
t.Fatalf("Lbank Setup() init error:, %v", err)
}
lbankConfig, err := cfg.GetExchangeConfig("Lbank")
if err != nil {
t.Fatalf("Test Failed - Lbank Setup() init error: %v", err)
t.Fatalf("Lbank Setup() init error: %v", err)
}
lbankConfig.API.AuthenticatedSupport = true
lbankConfig.API.Credentials.Secret = testAPISecret
lbankConfig.API.Credentials.Key = testAPIKey
err = l.Setup(lbankConfig)
if err != nil {
t.Fatal("Test Failed - LBank setup error", err)
t.Fatal("LBank setup error", err)
}
setupRan = true
}
@@ -58,7 +58,7 @@ func TestGetTicker(t *testing.T) {
TestSetup(t)
_, err := l.GetTicker("btc_usdt")
if err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
}
@@ -66,7 +66,7 @@ func TestGetTickers(t *testing.T) {
TestSetup(t)
tickers, err := l.GetTickers()
if err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
if len(tickers) <= 1 {
t.Errorf("Expected multiple tickers, received %v", len(tickers))
@@ -77,7 +77,7 @@ func TestGetCurrencyPairs(t *testing.T) {
TestSetup(t)
_, err := l.GetCurrencyPairs()
if err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
}
@@ -97,11 +97,11 @@ func TestGetTrades(t *testing.T) {
TestSetup(t)
_, err := l.GetTrades("btc_usdt", "600", fmt.Sprintf("%v", time.Now().Unix()))
if err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
a, err := l.GetTrades("btc_usdt", "600", "0")
if len(a) != 600 && err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
}
@@ -109,7 +109,7 @@ func TestGetKlines(t *testing.T) {
TestSetup(t)
_, err := l.GetKlines("btc_usdt", "600", "minute1", fmt.Sprintf("%v", time.Now().Unix()))
if err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
}
@@ -145,15 +145,15 @@ func TestCreateOrder(t *testing.T) {
cp := currency.NewPairWithDelimiter(currency.BTC.String(), currency.USDT.String(), "_")
_, err := l.CreateOrder(cp.Lower().String(), "what", 1231, 12314)
if err == nil {
t.Error("Test Failed - CreateOrder error cannot be nil")
t.Error("CreateOrder error cannot be nil")
}
_, err = l.CreateOrder(cp.Lower().String(), "buy", 0, 0)
if err == nil {
t.Error("Test Failed - CreateOrder error cannot be nil")
t.Error("CreateOrder error cannot be nil")
}
_, err = l.CreateOrder(cp.Lower().String(), "sell", 1231, 0)
if err == nil {
t.Error("Test Failed - CreateOrder error cannot be nil")
t.Error("CreateOrder error cannot be nil")
}
_, err = l.CreateOrder(cp.Lower().String(), "buy", 58, 681)
if err != nil {
@@ -193,7 +193,7 @@ func TestQueryOrderHistory(t *testing.T) {
cp := currency.NewPairWithDelimiter(currency.BTC.String(), currency.USDT.String(), "_")
_, err := l.QueryOrderHistory(cp.Lower().String(), "1", "100")
if err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
}
@@ -289,7 +289,7 @@ func TestLoadPrivKey(t *testing.T) {
l.API.Credentials.Secret = "errortest"
err = l.loadPrivKey()
if err == nil {
t.Errorf("expected error due to pemblock nil, got err: %v", err)
t.Errorf("Expected error due to pemblock nil")
}
}
@@ -302,7 +302,7 @@ func TestSign(t *testing.T) {
l.loadPrivKey()
_, err := l.sign("hello123")
if err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
}
@@ -343,7 +343,7 @@ func TestCancelOrder(t *testing.T) {
a.OrderID = "24f7ce27-af1d-4dca-a8c1-ef1cbeec1b23"
err := l.CancelOrder(&a)
if err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
}
@@ -354,7 +354,7 @@ func TestGetOrderInfo(t *testing.T) {
}
_, err := l.GetOrderInfo("9ead39f5-701a-400b-b635-d7349eb0f6b")
if err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
}
@@ -365,7 +365,7 @@ func TestGetAllOpenOrderID(t *testing.T) {
}
_, err := l.getAllOpenOrderID()
if err != nil {
t.Errorf("test failed: %v", err)
t.Errorf("%v", err)
}
}
@@ -378,7 +378,7 @@ func TestGetFeeByType(t *testing.T) {
input.Pair = cp
a, err := l.GetFeeByType(&input)
if err != nil {
t.Errorf("test failed. couldnt get fee: %v", err)
t.Errorf("couldnt get fee: %v", err)
}
if a != 0.0005 {
t.Errorf("testGetFeeByType failed. Expected: 0.0005, Received: %v", a)

View File

@@ -13,6 +13,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -67,9 +68,23 @@ func (l *Lbank) SetDefaults() {
l.Features = exchange.Features{
Supports: exchange.FeaturesSupported{
REST: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrder: true,
SubmitOrder: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoWithdrawal: true,
TradeFee: true,
CryptoWithdrawalFee: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithAPIPermission |
exchange.NoFiatWithdrawals,

View File

@@ -19,11 +19,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - LocalBitcoins load config error", err)
log.Fatal("LocalBitcoins load config error", err)
}
localbitcoinsConfig, err := cfg.GetExchangeConfig("LocalBitcoins")
if err != nil {
log.Fatal("Test Failed - LocalBitcoins Setup() init error", err)
log.Fatal("LocalBitcoins Setup() init error", err)
}
localbitcoinsConfig.API.AuthenticatedSupport = true
localbitcoinsConfig.API.Credentials.Key = apiKey
@@ -31,7 +31,7 @@ func TestMain(m *testing.M) {
l.SetDefaults()
err = l.Setup(localbitcoinsConfig)
if err != nil {
log.Fatal("Test Failed - Localbitcoins setup error", err)
log.Fatal("Localbitcoins setup error", err)
}
log.Printf(sharedtestvalues.LiveTesting, l.GetName(), l.API.Endpoints.URL)
os.Exit(m.Run())

View File

@@ -22,11 +22,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Localbitcoins load config error", err)
log.Fatal("Localbitcoins load config error", err)
}
localbitcoinsConfig, err := cfg.GetExchangeConfig("LocalBitcoins")
if err != nil {
log.Fatal("Test Failed - Localbitcoins Setup() init error", err)
log.Fatal("Localbitcoins Setup() init error", err)
}
l.SkipAuthCheck = true
localbitcoinsConfig.API.AuthenticatedSupport = true
@@ -35,12 +35,12 @@ func TestMain(m *testing.M) {
l.SetDefaults()
err = l.Setup(localbitcoinsConfig)
if err != nil {
log.Fatal("Test Failed - Localbitcoins setup error", err)
log.Fatal("Localbitcoins setup error", err)
}
serverDetails, newClient, err := mock.NewVCRServer(mockfile)
if err != nil {
log.Fatalf("Test Failed - Mock server error %s", err)
log.Fatalf("Mock server error %s", err)
}
l.HTTPClient = newClient

View File

@@ -23,7 +23,7 @@ func TestGetTicker(t *testing.T) {
_, err := l.GetTicker()
if err != nil {
t.Errorf("Test failed - GetTicker() returned: %s", err)
t.Errorf("GetTicker() returned: %s", err)
}
}
@@ -32,7 +32,7 @@ func TestGetTradableCurrencies(t *testing.T) {
_, err := l.GetTradableCurrencies()
if err != nil {
t.Errorf("Test failed - GetTradableCurrencies() returned: %s", err)
t.Errorf("GetTradableCurrencies() returned: %s", err)
}
}
@@ -112,7 +112,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -120,7 +120,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -128,7 +128,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -136,14 +136,14 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
// CryptocurrencyWithdrawalFee Basic
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -152,7 +152,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -160,7 +160,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -168,7 +168,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -177,7 +177,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := l.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -327,7 +327,7 @@ func TestModifyOrder(t *testing.T) {
_, err := l.ModifyOrder(&exchange.ModifyOrder{})
if err != common.ErrFunctionNotSupported {
t.Error("Test failed - ModifyOrder() error", err)
t.Error("ModifyOrder() error", err)
}
}
@@ -388,10 +388,10 @@ func TestGetDepositAddress(t *testing.T) {
_, err := l.GetDepositAddress(currency.BTC, "")
switch {
case areTestAPIKeysSet() && err != nil && !mockTests:
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
case !areTestAPIKeysSet() && err == nil && !mockTests:
t.Error("Test Failed - GetDepositAddress() expecting an error when no APIKeys are set")
t.Error("GetDepositAddress() expecting an error when no APIKeys are set")
case mockTests && err != nil:
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() error", err)
}
}

View File

@@ -15,6 +15,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -70,9 +71,19 @@ func (l *LocalBitcoins) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: false,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
CancelOrder: true,
SubmitOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.WithdrawFiatViaWebsiteOnly,

View File

@@ -56,7 +56,7 @@ func TestMain(m *testing.M) {
cfg.LoadConfig("../../testdata/configtest.json")
your_current_exchange_nameConfig, err := cfg.GetExchangeConfig("your_current_exchange_name")
if err != nil {
log.Fatal("Test Failed - your_current_exchange_name Setup() init error", err)
log.Fatal("your_current_exchange_name Setup() init error", err)
}
your_current_exchange_nameConfig.AuthenticatedAPISupport = true
your_current_exchange_nameConfig.APIKey = apiKey
@@ -96,7 +96,7 @@ func TestMain(m *testing.M) {
cfg.LoadConfig("../../testdata/configtest.json")
your_current_exchange_nameConfig, err := cfg.GetExchangeConfig("your_current_exchange_name")
if err != nil {
log.Fatal("Test Failed - your_current_exchange_name Setup() init error", err)
log.Fatal("your_current_exchange_name Setup() init error", err)
}
your_current_exchange_nameConfig.AuthenticatedAPISupport = true
your_current_exchange_nameConfig.APIKey = apiKey
@@ -106,7 +106,7 @@ func TestMain(m *testing.M) {
serverDetails, newClient, err := mock.NewVCRServer(mockfile)
if err != nil {
log.Fatalf("Test Failed - Mock server error %s", err)
log.Fatalf("Mock server error %s", err)
}
g.HTTPClient = newClient

View File

@@ -19,42 +19,42 @@ func TestMatchURLVals(t *testing.T) {
var expected = false
received := MatchURLVals(testVal, emptyVal)
if received != expected {
t.Errorf("Test Failed - MatchURLVals error expected %v received %v",
t.Errorf("MatchURLVals error expected %v received %v",
expected,
received)
}
received = MatchURLVals(emptyVal, testVal)
if received != expected {
t.Errorf("Test Failed - MatchURLVals error expected %v received %v",
t.Errorf("MatchURLVals error expected %v received %v",
expected,
received)
}
received = MatchURLVals(testVal, testVal2)
if received != expected {
t.Errorf("Test Failed - MatchURLVals error expected %v received %v",
t.Errorf("MatchURLVals error expected %v received %v",
expected,
received)
}
received = MatchURLVals(testVal2, testVal)
if received != expected {
t.Errorf("Test Failed - MatchURLVals error expected %v received %v",
t.Errorf("MatchURLVals error expected %v received %v",
expected,
received)
}
received = MatchURLVals(testVal, testVal3)
if received != expected {
t.Errorf("Test Failed - MatchURLVals error expected %v received %v",
t.Errorf("MatchURLVals error expected %v received %v",
expected,
received)
}
received = MatchURLVals(nonceVal1, testVal2)
if received != expected {
t.Errorf("Test Failed - MatchURLVals error expected %v received %v",
t.Errorf("MatchURLVals error expected %v received %v",
expected,
received)
}
@@ -62,21 +62,21 @@ func TestMatchURLVals(t *testing.T) {
expected = true
received = MatchURLVals(emptyVal, emptyVal)
if received != expected {
t.Errorf("Test Failed - MatchURLVals error expected %v received %v",
t.Errorf("MatchURLVals error expected %v received %v",
expected,
received)
}
received = MatchURLVals(testVal, testVal)
if received != expected {
t.Errorf("Test Failed - MatchURLVals error expected %v received %v",
t.Errorf("MatchURLVals error expected %v received %v",
expected,
received)
}
received = MatchURLVals(nonceVal1, nonceVal2)
if received != expected {
t.Errorf("Test Failed - MatchURLVals error expected %v received %v",
t.Errorf("MatchURLVals error expected %v received %v",
expected,
received)
}
@@ -105,12 +105,12 @@ func TestDeriveURLValsFromJSON(t *testing.T) {
payload, err := json.Marshal(test1)
if err != nil {
t.Error("Test Failed - marshal error", err)
t.Error("marshal error", err)
}
_, err = DeriveURLValsFromJSONMap(payload)
if err != nil {
t.Error("Test Failed - DeriveURLValsFromJSON error", err)
t.Error("DeriveURLValsFromJSON error", err)
}
test2 := map[string]string{
@@ -125,16 +125,16 @@ func TestDeriveURLValsFromJSON(t *testing.T) {
payload, err = json.Marshal(test2)
if err != nil {
t.Error("Test Failed - marshal error", err)
t.Error("marshal error", err)
}
vals, err := DeriveURLValsFromJSONMap(payload)
if err != nil {
t.Error("Test Failed - DeriveURLValsFromJSON error", err)
t.Error("DeriveURLValsFromJSON error", err)
}
if vals["val"][0] != "1" {
t.Error("Test Failed - DeriveURLValsFromJSON unexpected value",
t.Error("DeriveURLValsFromJSON unexpected value",
vals["val"][0])
}
}

View File

@@ -19,7 +19,7 @@ func TestGetFilteredHeader(t *testing.T) {
}
if fMap.Get("Key") != "" {
t.Error("Test Failed - risky vals where not replaced correctly")
t.Error("risky vals where not replaced correctly")
}
}
@@ -29,11 +29,11 @@ func TestGetFilteredURLVals(t *testing.T) {
shadyVals.Set("real_name", superSecretData)
cleanVals, err := GetFilteredURLVals(shadyVals)
if err != nil {
t.Error("Test Failed - GetFilteredURLVals error", err)
t.Error("GetFilteredURLVals error", err)
}
if strings.Contains(cleanVals, superSecretData) {
t.Error("Test Failed - Super secret data found")
t.Error("Super secret data found")
}
}
@@ -46,12 +46,12 @@ func TestCheckResponsePayload(t *testing.T) {
payload, err := json.Marshal(testbody)
if err != nil {
t.Fatal("Test Failed - json marshal error", err)
t.Fatal("json marshal error", err)
}
data, err := CheckResponsePayload(payload)
if err != nil {
t.Error("Test Failed - CheckBody error", err)
t.Error("CheckBody error", err)
}
expected := `{
@@ -126,23 +126,23 @@ func TestCheckJSON(t *testing.T) {
exclusionList, err := GetExcludedItems()
if err != nil {
t.Error("Test Failed - GetExcludedItems error", err)
t.Error("GetExcludedItems error", err)
}
vals, err := CheckJSON(testVal, &exclusionList)
if err != nil {
t.Error("Test Failed - Check JSON error", err)
t.Error("Check JSON error", err)
}
payload, err := json.Marshal(vals)
if err != nil {
t.Fatal("Test Failed - json marshal error", err)
t.Fatal("json marshal error", err)
}
newStruct := TestStructLevel0{}
err = json.Unmarshal(payload, &newStruct)
if err != nil {
t.Fatal("Test Failed - Umarshal error", err)
t.Fatal("Umarshal error", err)
}
if newStruct.StructVal.BadVal != "" {
@@ -173,14 +173,14 @@ func TestCheckJSON(t *testing.T) {
func TestGetExcludedItems(t *testing.T) {
exclusionList, err := GetExcludedItems()
if err != nil {
t.Error("Test Failed - GetExcludedItems error", err)
t.Error("GetExcludedItems error", err)
}
if len(exclusionList.Headers) == 0 {
t.Error("Test Failed - Header exclusion list not popoulated")
t.Error("Header exclusion list not popoulated")
}
if len(exclusionList.Variables) == 0 {
t.Error("Test Failed - Variable exclusion list not popoulated")
t.Error("Variable exclusion list not popoulated")
}
}

View File

@@ -24,7 +24,7 @@ const testFile = "test.json"
func TestNewVCRServer(t *testing.T) {
_, _, err := NewVCRServer("")
if err == nil {
t.Error("Test Failed - NewVCRServer error cannot be nil")
t.Error("NewVCRServer error cannot be nil")
}
// Set up mock data
@@ -36,7 +36,7 @@ func TestNewVCRServer(t *testing.T) {
Amount: 1,
Currency: "bitcoin"})
if err != nil {
t.Fatal("Test Failed - marshal error", err)
t.Fatal("marshal error", err)
}
testValue := HTTPResponse{Data: rp, QueryString: queryString, BodyParams: queryString}
@@ -44,17 +44,17 @@ func TestNewVCRServer(t *testing.T) {
payload, err := json.Marshal(test1)
if err != nil {
t.Fatal("Test Failed - marshal error", err)
t.Fatal("marshal error", err)
}
err = ioutil.WriteFile(testFile, payload, os.ModePerm)
if err != nil {
t.Fatal("Test Failed - marshal error", err)
t.Fatal("marshal error", err)
}
deets, client, err := NewVCRServer(testFile)
if err != nil {
t.Error("Test Failed - NewVCRServer error", err)
t.Error("NewVCRServer error", err)
}
common.HTTPClient = client // Set common package global HTTP Client
@@ -64,7 +64,7 @@ func TestNewVCRServer(t *testing.T) {
nil,
bytes.NewBufferString(""))
if err == nil {
t.Error("Test Failed - Sending http request expected an error")
t.Error("Sending http request expected an error")
}
// Expected good outcome
@@ -73,11 +73,11 @@ func TestNewVCRServer(t *testing.T) {
nil,
bytes.NewBufferString(""))
if err != nil {
t.Error("Test Failed - Sending http request error", err)
t.Error("Sending http request error", err)
}
if !strings.Contains(r, "404 page not found") {
t.Error("Test Failed - Was not expecting any value returned:", r)
t.Error("Was not expecting any value returned:", r)
}
r, err = common.SendHTTPRequest(http.MethodGet,
@@ -85,33 +85,33 @@ func TestNewVCRServer(t *testing.T) {
nil,
bytes.NewBufferString(""))
if err != nil {
t.Error("Test Failed - Sending http request error", err)
t.Error("Sending http request error", err)
}
var res responsePayload
err = json.Unmarshal([]byte(r), &res)
if err != nil {
t.Error("Test Failed - unmarshal error", err)
t.Error("unmarshal error", err)
}
if res.Price != 8000 {
t.Error("Test Failed - response error expected 8000 but received:",
t.Error("response error expected 8000 but received:",
res.Price)
}
if res.Amount != 1 {
t.Error("Test Failed - response error expected 1 but received:",
t.Error("response error expected 1 but received:",
res.Amount)
}
if res.Currency != "bitcoin" {
t.Error("Test Failed - response error expected \"bitcoin\" but received:",
t.Error("response error expected \"bitcoin\" but received:",
res.Currency)
}
// clean up test.json file
err = os.Remove(testFile)
if err != nil {
t.Fatal("Test Failed - Remove error", err)
t.Fatal("Remove error", err)
}
}

View File

@@ -12,7 +12,7 @@ func TestInc(t *testing.T) {
expected := Value(2)
result := nonce.Get()
if result != expected {
t.Errorf("Test failed. Expected %d got %d", expected, result)
t.Errorf("Expected %d got %d", expected, result)
}
}
@@ -22,7 +22,7 @@ func TestGet(t *testing.T) {
expected := Value(112321313)
result := nonce.Get()
if expected != result {
t.Errorf("Test failed. Expected %d got %d", expected, result)
t.Errorf("Expected %d got %d", expected, result)
}
}
@@ -32,7 +32,7 @@ func TestGetInc(t *testing.T) {
expected := Value(2)
result := nonce.GetInc()
if expected != result {
t.Errorf("Test failed. Expected %d got %d", expected, result)
t.Errorf("Expected %d got %d", expected, result)
}
}
@@ -42,7 +42,7 @@ func TestSet(t *testing.T) {
expected := Value(1)
result := nonce.Get()
if expected != result {
t.Errorf("Test failed. Expected %d got %d", expected, result)
t.Errorf("Expected %d got %d", expected, result)
}
}
@@ -52,12 +52,12 @@ func TestString(t *testing.T) {
expected := "12312313131"
result := nonce.String()
if expected != result {
t.Errorf("Test failed. Expected %s got %s", expected, result)
t.Errorf("Expected %s got %s", expected, result)
}
v := nonce.Get()
if expected != v.String() {
t.Errorf("Test failed. Expected %s got %s", expected, result)
t.Errorf("Expected %s got %s", expected, result)
}
}
@@ -75,6 +75,6 @@ func TestNonceConcurrency(t *testing.T) {
result := nonce.Get()
expected := Value(12312 + 1000)
if expected != result {
t.Errorf("Test failed. Expected %d got %d", expected, result)
t.Errorf("Expected %d got %d", expected, result)
}
}

View File

@@ -38,7 +38,7 @@ func TestSetDefaults(t *testing.T) {
o.SetDefaults()
}
if o.GetName() != OKGroupExchange {
t.Errorf("Test Failed - %v - SetDefaults() error", OKGroupExchange)
t.Errorf("%v - SetDefaults() error", OKGroupExchange)
}
TestSetup(t)
}
@@ -64,11 +64,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - Okcoin load config error", err)
t.Fatal("Okcoin load config error", err)
}
okcoinConfig, err := cfg.GetExchangeConfig(OKGroupExchange)
if err != nil {
t.Fatalf("Test Failed - %v Setup() init error", OKGroupExchange)
t.Fatalf("%v Setup() init error", OKGroupExchange)
}
if okcoinConfig.Features.Enabled.Websocket {
websocketEnabled = true
@@ -82,7 +82,7 @@ func TestSetup(t *testing.T) {
okcoinConfig.API.Endpoints.WebsocketURL = o.API.Endpoints.WebsocketURL
err = o.Setup(okcoinConfig)
if err != nil {
t.Fatal("Test Failed - OKCoin setup error", err)
t.Fatal("OKCoin setup error", err)
}
testSetupRan = true
o.Websocket.DataHandler = sharedtestvalues.GetWebsocketInterfaceChannelOverride()
@@ -990,42 +990,42 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := o.GetFee(feeBuilder); resp != float64(0.0015) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0015), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0015), resp)
}
// CryptocurrencyTradeFee High quantity
feeBuilder = setFeeBuilder()
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := o.GetFee(feeBuilder); resp != float64(1500) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(1500), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(1500), resp)
t.Error(err)
}
// CryptocurrencyTradeFee IsMaker
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := o.GetFee(feeBuilder); resp != float64(0.0005) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Error(err)
}
// CryptocurrencyTradeFee Negative purchase price
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := o.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
// CyptocurrencyDepositFee Basic
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := o.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
// InternationalBankDepositFee Basic
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := o.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
// InternationalBankWithdrawalFee Basic
@@ -1033,7 +1033,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := o.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}

View File

@@ -10,6 +10,7 @@ import (
"github.com/thrasher-corp/gocryptotrader/currency"
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -73,9 +74,37 @@ func (o *OKCoin) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrder: true,
CancelOrders: true,
SubmitOrder: true,
SubmitOrders: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
KlineFetching: true,
OrderbookFetching: true,
Subscribe: true,
Unsubscribe: true,
AuthenticatedEndpoints: true,
MessageCorrelation: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.NoFiatWithdrawals,
@@ -96,14 +125,6 @@ func (o *OKCoin) SetDefaults() {
o.API.Endpoints.WebsocketURL = okCoinWebsocketURL
o.APIVersion = okCoinAPIVersion
o.Websocket = wshandler.New()
o.Websocket.Functionality = wshandler.WebsocketTickerSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketKlineSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported |
wshandler.WebsocketMessageCorrelationSupported
o.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
o.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
o.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit

View File

@@ -39,7 +39,7 @@ func TestSetDefaults(t *testing.T) {
o.SetDefaults()
}
if o.GetName() != OKGroupExchange {
t.Errorf("Test Failed - %v - SetDefaults() error", OKGroupExchange)
t.Errorf("%v - SetDefaults() error", OKGroupExchange)
}
TestSetup(t)
}
@@ -65,12 +65,12 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - Okex load config error", err)
t.Fatal("Okex load config error", err)
}
okexConfig, err := cfg.GetExchangeConfig(OKGroupExchange)
if err != nil {
t.Fatalf("Test Failed - %v Setup() init error", OKGroupExchange)
t.Fatalf("%v Setup() init error", OKGroupExchange)
}
if okexConfig.Features.Enabled.Websocket {
websocketEnabled = true
@@ -83,7 +83,7 @@ func TestSetup(t *testing.T) {
okexConfig.API.Endpoints.WebsocketURL = o.API.Endpoints.WebsocketURL
err = o.Setup(okexConfig)
if err != nil {
t.Fatal("Test Failed - Okex setup error", err)
t.Fatal("Okex setup error", err)
}
testSetupRan = true
o.Websocket.DataHandler = sharedtestvalues.GetWebsocketInterfaceChannelOverride()
@@ -1748,7 +1748,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := o.GetFee(feeBuilder); resp != float64(0.0015) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0015), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0015), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -1756,7 +1756,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := o.GetFee(feeBuilder); resp != float64(1500) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(1500), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(1500), resp)
t.Error(err)
}
@@ -1764,7 +1764,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := o.GetFee(feeBuilder); resp != float64(0.0005) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0005), resp)
t.Error(err)
}
@@ -1772,7 +1772,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := o.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -1780,7 +1780,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := o.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -1788,7 +1788,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := o.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -1797,7 +1797,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := o.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}

View File

@@ -10,6 +10,7 @@ import (
"github.com/thrasher-corp/gocryptotrader/currency"
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -90,9 +91,37 @@ func (o *OKEX) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrder: true,
CancelOrders: true,
SubmitOrder: true,
SubmitOrders: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
KlineFetching: true,
OrderbookFetching: true,
Subscribe: true,
Unsubscribe: true,
AuthenticatedEndpoints: true,
MessageCorrelation: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.NoFiatWithdrawals,
@@ -113,14 +142,6 @@ func (o *OKEX) SetDefaults() {
o.API.Endpoints.WebsocketURL = OkExWebsocketURL
o.Websocket = wshandler.New()
o.APIVersion = okExAPIVersion
o.Websocket.Functionality = wshandler.WebsocketTickerSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketKlineSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported |
wshandler.WebsocketMessageCorrelationSupported
o.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
o.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
o.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit

View File

@@ -42,6 +42,7 @@ func (o *OKGroup) Setup(exch *config.ExchangeConfig) error {
Connector: o.WsConnect,
Subscriber: o.Subscribe,
UnSubscriber: o.Unsubscribe,
Features: &o.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -56,7 +56,7 @@ func TestSubscribeOrderbook(t *testing.T) {
err = b.Process()
if err != nil {
t.Error("test failed - process error", err)
t.Error("process error", err)
}
_, err = SubscribeOrderbook("SubscribeOBTest", p, asset.Spot)
@@ -67,7 +67,7 @@ func TestSubscribeOrderbook(t *testing.T) {
// process redundant update
err = b.Process()
if err != nil {
t.Error("test failed - process error", err)
t.Error("process error", err)
}
}
@@ -125,7 +125,7 @@ func TestSubscribeToExchangeOrderbooks(t *testing.T) {
err = b.Process()
if err != nil {
t.Error("test failed:", err)
t.Error("", err)
}
_, err = SubscribeToExchangeOrderbooks("SubscribeToExchangeOrderbooks")
@@ -167,7 +167,7 @@ func TestCalculateTotalBids(t *testing.T) {
a, b := base.TotalBidsAmount()
if a != 10 && b != 1000 {
t.Fatal("Test failed. TestCalculateTotalBids expected a = 10 and b = 1000")
t.Fatal("TestCalculateTotalBids expected a = 10 and b = 1000")
}
}
@@ -181,7 +181,7 @@ func TestCalculateTotaAsks(t *testing.T) {
a, b := base.TotalAsksAmount()
if a != 10 && b != 1000 {
t.Fatal("Test failed. TestCalculateTotalAsks expected a = 10 and b = 1000")
t.Fatal("TestCalculateTotalAsks expected a = 10 and b = 1000")
}
}
@@ -202,17 +202,17 @@ func TestUpdate(t *testing.T) {
base.Update(bids, asks)
if !base.LastUpdated.After(timeNow) {
t.Fatal("test failed. TestUpdate expected LastUpdated to be greater then original time")
t.Fatal("TestUpdate expected LastUpdated to be greater then original time")
}
a, b := base.TotalAsksAmount()
if a != 100 && b != 20200 {
t.Fatal("Test failed. TestUpdate expected a = 100 and b = 20100")
t.Fatal("TestUpdate expected a = 100 and b = 20100")
}
a, b = base.TotalBidsAmount()
if a != 100 && b != 20100 {
t.Fatal("Test failed. TestUpdate expected a = 100 and b = 20100")
t.Fatal("TestUpdate expected a = 100 and b = 20100")
}
}
@@ -233,28 +233,28 @@ func TestGetOrderbook(t *testing.T) {
result, err := Get("Exchange", c, asset.Spot)
if err != nil {
t.Fatalf("Test failed. TestGetOrderbook failed to get orderbook. Error %s",
t.Fatalf("TestGetOrderbook failed to get orderbook. Error %s",
err)
}
if !result.Pair.Equal(c) {
t.Fatal("Test failed. TestGetOrderbook failed. Mismatched pairs")
t.Fatal("TestGetOrderbook failed. Mismatched pairs")
}
_, err = Get("nonexistent", c, asset.Spot)
if err == nil {
t.Fatal("Test failed. TestGetOrderbook retrieved non-existent orderbook")
t.Fatal("TestGetOrderbook retrieved non-existent orderbook")
}
c.Base = currency.NewCode("blah")
_, err = Get("Exchange", c, asset.Spot)
if err == nil {
t.Fatal("Test failed. TestGetOrderbook retrieved non-existent orderbook using invalid first currency")
t.Fatal("TestGetOrderbook retrieved non-existent orderbook using invalid first currency")
}
newCurrency := currency.NewPairFromStrings("BTC", "AUD")
_, err = Get("Exchange", newCurrency, asset.Spot)
if err == nil {
t.Fatal("Test failed. TestGetOrderbook retrieved non-existent orderbook using invalid second currency")
t.Fatal("TestGetOrderbook retrieved non-existent orderbook using invalid second currency")
}
base.Pair = newCurrency
@@ -286,21 +286,21 @@ func TestCreateNewOrderbook(t *testing.T) {
result, err := Get("testCreateNewOrderbook", c, asset.Spot)
if err != nil {
t.Fatal("Test failed. TestCreateNewOrderbook failed to create new orderbook", err)
t.Fatal("TestCreateNewOrderbook failed to create new orderbook", err)
}
if !result.Pair.Equal(c) {
t.Fatal("Test failed. TestCreateNewOrderbook result pair is incorrect")
t.Fatal("TestCreateNewOrderbook result pair is incorrect")
}
a, b := result.TotalAsksAmount()
if a != 10 && b != 1000 {
t.Fatal("Test failed. TestCreateNewOrderbook CalculateTotalAsks value is incorrect")
t.Fatal("TestCreateNewOrderbook CalculateTotalAsks value is incorrect")
}
a, b = result.TotalBidsAmount()
if a != 10 && b != 2000 {
t.Fatal("Test failed. TestCreateNewOrderbook CalculateTotalBids value is incorrect")
t.Fatal("TestCreateNewOrderbook CalculateTotalBids value is incorrect")
}
}
@@ -334,10 +334,10 @@ func TestProcessOrderbook(t *testing.T) {
}
result, err := Get("ProcessOrderbook", c, asset.Spot)
if err != nil {
t.Fatal("Test failed. TestProcessOrderbook failed to create new orderbook")
t.Fatal("TestProcessOrderbook failed to create new orderbook")
}
if !result.Pair.Equal(c) {
t.Fatal("Test failed. TestProcessOrderbook result pair is incorrect")
t.Fatal("TestProcessOrderbook result pair is incorrect")
}
// now test for processing a pair with a different quote currency
@@ -345,14 +345,14 @@ func TestProcessOrderbook(t *testing.T) {
base.Pair = c
err = base.Process()
if err != nil {
t.Error("Test Failed - Process() error", err)
t.Error("Process() error", err)
}
result, err = Get("ProcessOrderbook", c, asset.Spot)
if err != nil {
t.Fatal("Test failed. TestProcessOrderbook failed to retrieve new orderbook")
t.Fatal("TestProcessOrderbook failed to retrieve new orderbook")
}
if !result.Pair.Equal(c) {
t.Fatal("Test failed. TestProcessOrderbook result pair is incorrect")
t.Fatal("TestProcessOrderbook result pair is incorrect")
}
// now test for processing a pair which has a different base currency
@@ -360,31 +360,31 @@ func TestProcessOrderbook(t *testing.T) {
base.Pair = c
err = base.Process()
if err != nil {
t.Error("Test Failed - Process() error", err)
t.Error("Process() error", err)
}
result, err = Get("ProcessOrderbook", c, asset.Spot)
if err != nil {
t.Fatal("Test failed. TestProcessOrderbook failed to retrieve new orderbook")
t.Fatal("TestProcessOrderbook failed to retrieve new orderbook")
}
if !result.Pair.Equal(c) {
t.Fatal("Test failed. TestProcessOrderbook result pair is incorrect")
t.Fatal("TestProcessOrderbook result pair is incorrect")
}
base.Asks = []Item{{Price: 200, Amount: 200}}
base.AssetType = "monthly"
err = base.Process()
if err != nil {
t.Error("Test Failed - Process() error", err)
t.Error("Process() error", err)
}
result, err = Get("ProcessOrderbook", c, "monthly")
if err != nil {
t.Fatal("Test failed. TestProcessOrderbook failed to retrieve new orderbook")
t.Fatal("TestProcessOrderbook failed to retrieve new orderbook")
}
a, b := result.TotalAsksAmount()
if a != 200 && b != 40000 {
t.Fatal("Test failed. TestProcessOrderbook CalculateTotalsAsks incorrect values")
t.Fatal("TestProcessOrderbook CalculateTotalsAsks incorrect values")
}
base.Bids = []Item{{Price: 420, Amount: 200}}
@@ -392,16 +392,16 @@ func TestProcessOrderbook(t *testing.T) {
base.AssetType = "quarterly"
err = base.Process()
if err != nil {
t.Error("Test Failed - Process() error", err)
t.Error("Process() error", err)
}
result, err = Get("Blah", c, "quarterly")
if err != nil {
t.Fatal("Test failed. TestProcessOrderbook failed to create new orderbook")
t.Fatal("TestProcessOrderbook failed to create new orderbook")
}
if a != 200 && b != 84000 {
t.Fatal("Test failed. TestProcessOrderbook CalculateTotalsBids incorrect values")
t.Fatal("TestProcessOrderbook CalculateTotalsBids incorrect values")
}
type quick struct {
@@ -456,7 +456,7 @@ func TestProcessOrderbook(t *testing.T) {
}
if catastrophicFailure {
t.Fatal("Test Failed - Process() error", err)
t.Fatal("Process() error", err)
}
wg.Wait()
@@ -472,18 +472,18 @@ func TestProcessOrderbook(t *testing.T) {
}
if result.Asks[0] != test.Asks[0] {
t.Error("Test failed. TestProcessOrderbook failed bad values")
t.Error("TestProcessOrderbook failed bad values")
}
if result.Bids[0] != test.Bids[0] {
t.Error("Test failed. TestProcessOrderbook failed bad values")
t.Error("TestProcessOrderbook failed bad values")
}
wg.Done()
}(test)
if fatalErr {
t.Fatal("Test failed. TestProcessOrderbook failed to retrieve new orderbook")
t.Fatal("TestProcessOrderbook failed to retrieve new orderbook")
}
}
@@ -493,13 +493,13 @@ func TestProcessOrderbook(t *testing.T) {
func TestSetNewData(t *testing.T) {
err := service.SetNewData(nil)
if err == nil {
t.Error("error cannot be nil ")
t.Error("error cannot be nil")
}
}
func TestGetAssociations(t *testing.T) {
_, err := service.GetAssociations(nil)
if err == nil {
t.Error("error cannot be nil ")
t.Error("error cannot be nil")
}
}

View File

@@ -7,31 +7,31 @@ import (
func TestNewOrder(t *testing.T) {
ID := NewOrder("ANX", 2000, 20.00)
if ID != 0 {
t.Error("Test Failed - Orders_test.go NewOrder() - Error")
t.Error("Orders_test.go NewOrder() - Error")
}
ID = NewOrder("BATMAN", 400, 25.00)
if ID != 1 {
t.Error("Test Failed - Orders_test.go NewOrder() - Error")
t.Error("Orders_test.go NewOrder() - Error")
}
}
func TestDeleteOrder(t *testing.T) {
if value := DeleteOrder(0); !value {
t.Error("Test Failed - Orders_test.go DeleteOrder() - Error")
t.Error("Orders_test.go DeleteOrder() - Error")
}
if value := DeleteOrder(100); value {
t.Error("Test Failed - Orders_test.go DeleteOrder() - Error")
t.Error("Orders_test.go DeleteOrder() - Error")
}
}
func TestGetOrdersByExchange(t *testing.T) {
if value := GetOrdersByExchange("ANX"); len(value) != 0 {
t.Error("Test Failed - Orders_test.go GetOrdersByExchange() - Error")
t.Error("Orders_test.go GetOrdersByExchange() - Error")
}
}
func TestGetOrderByOrderID(t *testing.T) {
if value := GetOrderByOrderID(69); value != nil {
t.Error("Test Failed - Orders_test.go GetOrdersByExchange() - Error")
t.Error("Orders_test.go GetOrdersByExchange() - Error")
}
}

View File

@@ -19,11 +19,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Poloniex load config error", err)
log.Fatal("Poloniex load config error", err)
}
poloniexConfig, err := cfg.GetExchangeConfig("Poloniex")
if err != nil {
log.Fatal("Test Failed - Poloniex Setup() init error", err)
log.Fatal("Poloniex Setup() init error", err)
}
poloniexConfig.API.AuthenticatedSupport = true
poloniexConfig.API.Credentials.Key = apiKey
@@ -31,7 +31,7 @@ func TestMain(m *testing.M) {
p.SetDefaults()
err = p.Setup(poloniexConfig)
if err != nil {
log.Fatal("Test Failed - Poloniex setup error", err)
log.Fatal("Poloniex setup error", err)
}
log.Printf(sharedtestvalues.LiveTesting, p.GetName(), p.API.Endpoints.URL)
os.Exit(m.Run())

View File

@@ -22,11 +22,11 @@ func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Test Failed - Poloniex load config error", err)
log.Fatal("Poloniex load config error", err)
}
poloniexConfig, err := cfg.GetExchangeConfig("Poloniex")
if err != nil {
log.Fatal("Test Failed - Poloniex Setup() init error", err)
log.Fatal("Poloniex Setup() init error", err)
}
p.SkipAuthCheck = true
poloniexConfig.API.AuthenticatedSupport = true
@@ -35,12 +35,12 @@ func TestMain(m *testing.M) {
p.SetDefaults()
err = p.Setup(poloniexConfig)
if err != nil {
log.Fatal("Test Failed - Poloniex setup error", err)
log.Fatal("Poloniex setup error", err)
}
serverDetails, newClient, err := mock.NewVCRServer(mockfile)
if err != nil {
log.Fatalf("Test Failed - Mock server error %s", err)
log.Fatalf("Mock server error %s", err)
}
p.HTTPClient = newClient

View File

@@ -30,7 +30,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := p.GetTicker()
if err != nil {
t.Error("Test Failed - Poloniex GetTicker() error", err)
t.Error("Poloniex GetTicker() error", err)
}
}
@@ -124,7 +124,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := p.GetFee(feeBuilder); resp != float64(0.0025) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0.0025), resp)
}
@@ -133,7 +133,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := p.GetFee(feeBuilder); resp != float64(2500) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(2500), resp)
t.Error(err)
}
@@ -142,7 +142,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := p.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0), resp)
t.Error(err)
}
@@ -151,7 +151,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := p.GetFee(feeBuilder); resp != float64(0.001) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0.001), resp)
t.Error(err)
}
@@ -161,7 +161,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := p.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0), resp)
t.Error(err)
}
@@ -170,7 +170,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := p.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0), resp)
t.Error(err)
}
@@ -179,7 +179,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := p.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0), resp)
t.Error(err)
}
@@ -189,7 +189,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := p.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f",
t.Errorf("GetFee() error. Expected: %f, Received: %f",
float64(0), resp)
t.Error(err)
}
@@ -219,11 +219,11 @@ func TestGetActiveOrders(t *testing.T) {
_, err := p.GetActiveOrders(&getOrdersRequest)
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - GetActiveOrders() error", err)
t.Error("GetActiveOrders() error", err)
case !areTestAPIKeysSet() && !mockTests && err == nil:
t.Error("Test Failed - Expecting an error when no keys are set")
t.Error("Expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock GetActiveOrders() err", err)
t.Error("Mock GetActiveOrders() err", err)
}
}
@@ -273,7 +273,7 @@ func TestSubmitOrder(t *testing.T) {
case !areTestAPIKeysSet() && !mockTests && err == nil:
t.Error("Expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock SubmitOrder() err", err)
t.Error("Mock SubmitOrder() err", err)
}
}
@@ -297,7 +297,7 @@ func TestCancelExchangeOrder(t *testing.T) {
case areTestAPIKeysSet() && err != nil:
t.Errorf("Could not cancel orders: %v", err)
case mockTests && err != nil:
t.Error("Test Failed - Mock CancelExchangeOrder() err", err)
t.Error("Mock CancelExchangeOrder() err", err)
}
}
@@ -323,7 +323,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
case areTestAPIKeysSet() && err != nil:
t.Errorf("Could not cancel orders: %v", err)
case mockTests && err != nil:
t.Error("Test Failed - Mock CancelAllExchangeOrders() err", err)
t.Error("Mock CancelAllExchangeOrders() err", err)
}
if len(resp.OrderStatus) > 0 {
t.Errorf("%v orders failed to cancel", len(resp.OrderStatus))
@@ -339,11 +339,11 @@ func TestModifyOrder(t *testing.T) {
_, err := p.ModifyOrder(&exchange.ModifyOrder{OrderID: "1337", Price: 1337})
switch {
case areTestAPIKeysSet() && err != nil && mockTests:
t.Error("Test Failed - ModifyOrder() error", err)
t.Error("ModifyOrder() error", err)
case !areTestAPIKeysSet() && !mockTests && err == nil:
t.Error("Test Failed - ModifyOrder() error cannot be nil")
t.Error("ModifyOrder() error cannot be nil")
case mockTests && err != nil:
t.Error("Test Failed - Mock ModifyOrder() err", err)
t.Error("Mock ModifyOrder() err", err)
}
}
@@ -369,7 +369,7 @@ func TestWithdraw(t *testing.T) {
case !areTestAPIKeysSet() && !mockTests && err == nil:
t.Error("Expecting an error when no keys are set")
case mockTests && err != nil:
t.Error("Test Failed - Mock Withdraw() err", err)
t.Error("Mock Withdraw() err", err)
}
}
@@ -406,11 +406,11 @@ func TestGetDepositAddress(t *testing.T) {
_, err := p.GetDepositAddress(currency.DASH, "")
switch {
case areTestAPIKeysSet() && err != nil:
t.Error("Test Failed - GetDepositAddress()", err)
t.Error("GetDepositAddress()", err)
case !areTestAPIKeysSet() && !mockTests && err == nil:
t.Error("Test Failed - GetDepositAddress() cannot be nil")
t.Error("GetDepositAddress() cannot be nil")
case mockTests && err != nil:
t.Error("Test Failed - Mock GetDepositAddress() err", err)
t.Error("Mock GetDepositAddress() err", err)
}
}

View File

@@ -13,6 +13,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -69,9 +70,34 @@ func (p *Poloniex) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrder: true,
CancelOrders: true,
SubmitOrder: true,
DepositHistory: true,
WithdrawalHistory: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
Subscribe: true,
Unsubscribe: true,
AuthenticatedEndpoints: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithAPIPermission |
exchange.NoFiatWithdrawals,
@@ -90,12 +116,6 @@ func (p *Poloniex) SetDefaults() {
p.API.Endpoints.URL = p.API.Endpoints.URLDefault
p.API.Endpoints.WebsocketURL = poloniexWebsocketAddress
p.Websocket = wshandler.New()
p.Websocket.Functionality = wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketTickerSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketUnsubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported
p.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
p.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
p.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit
@@ -125,6 +145,7 @@ func (p *Poloniex) Setup(exch *config.ExchangeConfig) error {
Connector: p.WsConnect,
Subscriber: p.Subscribe,
UnSubscriber: p.Unsubscribe,
Features: &p.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err

View File

@@ -0,0 +1,40 @@
package protocol
// Features holds all variables for the exchanges supported features
// for a protocol (e.g REST or Websocket)
type Features struct {
TickerBatching bool `json:"tickerBatching,omitempty"`
AutoPairUpdates bool `json:"autoPairUpdates,omitempty"`
AccountBalance bool `json:"accountBalance,omitempty"`
CryptoDeposit bool `json:"cryptoDeposit,omitempty"`
CryptoWithdrawal bool `json:"cryptoWithdrawal,omitempty"`
FiatWithdraw bool `json:"fiatWithdraw,omitempty"`
GetOrder bool `json:"getOrder,omitempty"`
GetOrders bool `json:"getOrders,omitempty"`
CancelOrders bool `json:"cancelOrders,omitempty"`
CancelOrder bool `json:"cancelOrder,omitempty"`
SubmitOrder bool `json:"submitOrder,omitempty"`
SubmitOrders bool `json:"submitOrders,omitempty"`
ModifyOrder bool `json:"modifyOrder,omitempty"`
DepositHistory bool `json:"depositHistory,omitempty"`
WithdrawalHistory bool `json:"withdrawalHistory,omitempty"`
TradeHistory bool `json:"tradeHistory,omitempty"`
UserTradeHistory bool `json:"userTradeHistory,omitempty"`
TradeFee bool `json:"tradeFee,omitempty"`
FiatDepositFee bool `json:"fiatDepositFee,omitempty"`
FiatWithdrawalFee bool `json:"fiatWithdrawalFee,omitempty"`
CryptoDepositFee bool `json:"cryptoDepositFee,omitempty"`
CryptoWithdrawalFee bool `json:"cryptoWithdrawalFee,omitempty"`
TickerFetching bool `json:"tickerFetching,omitempty"`
KlineFetching bool `json:"klineFetching,omitempty"`
TradeFetching bool `json:"tradeFetching,omitempty"`
OrderbookFetching bool `json:"orderbookFetching,omitempty"`
AccountInfo bool `json:"accountInfo,omitempty"`
FiatDeposit bool `json:"fiatDeposit,omitempty"`
DeadMansSwitch bool `json:"deadMansSwitch,omitempty"`
Subscribe bool `json:"subscribe,omitempty"`
Unsubscribe bool `json:"unsubscribe,omitempty"`
AuthenticatedEndpoints bool `json:"authenticatedEndpoints,omitempty"`
MessageCorrelation bool `json:"messageCorrelation,omitempty"`
MessageSequenceNumbers bool `json:"messageSequenceNumbers,omitempty"`
}

View File

@@ -202,32 +202,29 @@ func TestDoRequest(t *testing.T) {
var test = new(Requester)
err := test.SendPayload(http.MethodGet, "https://www.google.com", nil, nil, nil, false, false, true, false, false)
if err == nil {
t.Fatal("not iniitalised")
t.Fatal("Expected error")
}
r := New("", NewRateLimit(time.Second*10, 5), NewRateLimit(time.Second*20, 100), new(http.Client))
if err == nil {
t.Fatal("unexpected values")
}
r.Name = "bitfinex"
err = r.SendPayload("BLAH", "https://www.google.com", nil, nil, nil, false, false, true, false, false)
if err == nil {
t.Fatal("unexpected values")
t.Fatal("Expected error")
}
err = r.SendPayload(http.MethodGet, "", nil, nil, nil, false, false, true, false, false)
if err == nil {
t.Fatal("unexpected values")
t.Fatal("Expected error")
}
err = r.SendPayload(http.MethodGet, "https://www.google.com", nil, nil, nil, false, false, true, false, false)
if err != nil {
t.Fatal("unexpected values")
t.Fatal("unexpected values", err)
}
if !r.RequiresRateLimiter() {
t.Fatal("unexpcted values")
t.Fatal("unexpected values")
}
r.SetRateLimit(false, time.Second, 0)
@@ -235,7 +232,7 @@ func TestDoRequest(t *testing.T) {
err = r.SendPayload(http.MethodGet, "https://www.google.com", nil, nil, nil, false, false, true, false, false)
if err != nil {
t.Fatal("unexpected values")
t.Fatal("unexpected values", err)
}
if r.RequiresRateLimiter() {
@@ -247,7 +244,7 @@ func TestDoRequest(t *testing.T) {
r.Cycle = time.Now().Add(time.Millisecond * -201)
if r.IsValidCycle(false) {
t.Fatal("unexepcted values")
t.Fatal("unexpected values")
}
err = r.SendPayload(http.MethodGet, "https://www.google.com", nil, nil, nil, false, false, true, false, false)
@@ -288,18 +285,18 @@ func TestDoRequest(t *testing.T) {
err = r.SetTimeoutRetryAttempts(1)
if err != nil {
t.Fatal("test failed - setting timeout retry attempts")
t.Fatal("setting timeout retry attempts")
}
err = r.SetTimeoutRetryAttempts(-1)
if err == nil {
t.Fatal("test failed - setting timeout retry attempts with negative value")
t.Fatal("setting timeout retry attempts with negative value")
}
r.HTTPClient.Timeout = 1 * time.Second
err = r.SendPayload(http.MethodPost, "https://httpstat.us/200?sleep=20000", nil, nil, nil, false, false, true, false, false)
if err == nil {
t.Fatal(err)
t.Fatal("Expected error")
}
proxy, err := url.Parse("")
@@ -309,7 +306,7 @@ func TestDoRequest(t *testing.T) {
err = r.SetProxy(proxy)
if err == nil {
t.Error("failed to set proxy")
t.Error("Expected error")
}
proxy, err = url.Parse("https://192.0.0.1")

View File

@@ -20,7 +20,7 @@ func TestLenByPrice(t *testing.T) {
}
if ByPrice.Len(Items) < 1 {
t.Error("Test Failed - stats LenByPrice() length not correct.")
t.Error("stats LenByPrice() length not correct.")
}
}
@@ -45,10 +45,10 @@ func TestLessByPrice(t *testing.T) {
}
if !ByPrice.Less(Items, 1, 0) {
t.Error("Test Failed - stats LessByPrice() incorrect return.")
t.Error("stats LessByPrice() incorrect return.")
}
if ByPrice.Less(Items, 0, 1) {
t.Error("Test Failed - stats LessByPrice() incorrect return.")
t.Error("stats LessByPrice() incorrect return.")
}
}
@@ -74,22 +74,22 @@ func TestSwapByPrice(t *testing.T) {
ByPrice.Swap(Items, 0, 1)
if Items[0].Exchange != "bitfinex" || Items[1].Exchange != "bitstamp" {
t.Error("Test Failed - stats SwapByPrice did not swap values.")
t.Error("stats SwapByPrice did not swap values.")
}
}
func TestLenByVolume(t *testing.T) {
if ByVolume.Len(Items) != 2 {
t.Error("Test Failed - stats lenByVolume did not swap values.")
t.Error("stats lenByVolume did not swap values.")
}
}
func TestLessByVolume(t *testing.T) {
if !ByVolume.Less(Items, 1, 0) {
t.Error("Test Failed - stats LessByVolume() incorrect return.")
t.Error("stats LessByVolume() incorrect return.")
}
if ByVolume.Less(Items, 0, 1) {
t.Error("Test Failed - stats LessByVolume() incorrect return.")
t.Error("stats LessByVolume() incorrect return.")
}
}
@@ -97,7 +97,7 @@ func TestSwapByVolume(t *testing.T) {
ByPrice.Swap(Items, 0, 1)
if Items[1].Exchange != "bitfinex" || Items[0].Exchange != "bitstamp" {
t.Error("Test Failed - stats SwapByVolume did not swap values.")
t.Error("stats SwapByVolume did not swap values.")
}
}
@@ -107,27 +107,27 @@ func TestAdd(t *testing.T) {
Add("ANX", p, asset.Spot, 1200, 42)
if len(Items) < 1 {
t.Error("Test Failed - stats Add did not add exchange info.")
t.Error("stats Add did not add exchange info.")
}
Add("", p, "", 0, 0)
if len(Items) != 1 {
t.Error("Test Failed - stats Add did not add exchange info.")
t.Error("stats Add did not add exchange info.")
}
p.Base = currency.XBT
Add("ANX", p, asset.Spot, 1201, 43)
if Items[1].Pair.String() != "XBTUSD" {
t.Fatal("Test failed. stats Add did not add exchange info.")
t.Fatal("stats Add did not add exchange info.")
}
p = currency.NewPairFromStrings("ETH", "USDT")
Add("ANX", p, asset.Spot, 300, 1000)
if Items[2].Pair.String() != "ETHUSD" {
t.Fatal("Test failed. stats Add did not add exchange info.")
t.Fatal("stats Add did not add exchange info.")
}
}
@@ -135,23 +135,23 @@ func TestAppend(t *testing.T) {
p := currency.NewPairFromStrings("BTC", "USD")
Append("sillyexchange", p, asset.Spot, 1234, 45)
if len(Items) < 2 {
t.Error("Test Failed - stats Append did not add exchange values.")
t.Error("stats Append did not add exchange values.")
}
Append("sillyexchange", p, asset.Spot, 1234, 45)
if len(Items) == 3 {
t.Error("Test Failed - stats Append added exchange values")
t.Error("stats Append added exchange values")
}
}
func TestAlreadyExists(t *testing.T) {
p := currency.NewPairFromStrings("BTC", "USD")
if !AlreadyExists("ANX", p, asset.Spot, 1200, 42) {
t.Error("Test Failed - stats AlreadyExists exchange does not exist.")
t.Error("stats AlreadyExists exchange does not exist.")
}
p.Base = currency.NewCode("dii")
if AlreadyExists("bla", p, asset.Spot, 1234, 123) {
t.Error("Test Failed - stats AlreadyExists found incorrect exchange.")
t.Error("stats AlreadyExists found incorrect exchange.")
}
}
@@ -159,12 +159,12 @@ func TestSortExchangesByVolume(t *testing.T) {
p := currency.NewPairFromStrings("BTC", "USD")
topVolume := SortExchangesByVolume(p, asset.Spot, true)
if topVolume[0].Exchange != "sillyexchange" {
t.Error("Test Failed - stats SortExchangesByVolume incorrectly sorted values.")
t.Error("stats SortExchangesByVolume incorrectly sorted values.")
}
topVolume = SortExchangesByVolume(p, asset.Spot, false)
if topVolume[0].Exchange != "ANX" {
t.Error("Test Failed - stats SortExchangesByVolume incorrectly sorted values.")
t.Error("stats SortExchangesByVolume incorrectly sorted values.")
}
}
@@ -172,11 +172,11 @@ func TestSortExchangesByPrice(t *testing.T) {
p := currency.NewPairFromStrings("BTC", "USD")
topPrice := SortExchangesByPrice(p, asset.Spot, true)
if topPrice[0].Exchange != "sillyexchange" {
t.Error("Test Failed - stats SortExchangesByPrice incorrectly sorted values.")
t.Error("stats SortExchangesByPrice incorrectly sorted values.")
}
topPrice = SortExchangesByPrice(p, asset.Spot, false)
if topPrice[0].Exchange != "ANX" {
t.Error("Test Failed - stats SortExchangesByPrice incorrectly sorted values.")
t.Error("stats SortExchangesByPrice incorrectly sorted values.")
}
}

View File

@@ -107,64 +107,64 @@ func TestGetTicker(t *testing.T) {
err := ProcessTicker("bitfinex", &priceStruct, asset.Spot)
if err != nil {
t.Fatal("Test failed. ProcessTicker error", err)
t.Fatal("ProcessTicker error", err)
}
tickerPrice, err := GetTicker("bitfinex", newPair, asset.Spot)
if err != nil {
t.Errorf("Test Failed - Ticker GetTicker init error: %s", err)
t.Errorf("Ticker GetTicker init error: %s", err)
}
if !tickerPrice.Pair.Equal(newPair) {
t.Error("Test Failed - ticker tickerPrice.CurrencyPair value is incorrect")
t.Error("ticker tickerPrice.CurrencyPair value is incorrect")
}
_, err = GetTicker("blah", newPair, asset.Spot)
if err == nil {
t.Fatal("Test Failed. TestGetTicker returned nil error on invalid exchange")
t.Fatal("TestGetTicker returned nil error on invalid exchange")
}
newPair.Base = currency.ETH
_, err = GetTicker("bitfinex", newPair, asset.Spot)
if err == nil {
t.Fatal("Test Failed. TestGetTicker returned ticker for invalid first currency")
t.Fatal("TestGetTicker returned ticker for invalid first currency")
}
btcltcPair := currency.NewPairFromStrings("BTC", "LTC")
_, err = GetTicker("bitfinex", btcltcPair, asset.Spot)
if err == nil {
t.Fatal("Test Failed. TestGetTicker returned ticker for invalid second currency")
t.Fatal("TestGetTicker returned ticker for invalid second currency")
}
priceStruct.PriceATH = 9001
priceStruct.Pair.Base = currency.ETH
err = ProcessTicker("bitfinex", &priceStruct, "futures_3m")
if err != nil {
t.Fatal("Test failed. ProcessTicker error", err)
t.Fatal("ProcessTicker error", err)
}
tickerPrice, err = GetTicker("bitfinex", newPair, "futures_3m")
if err != nil {
t.Errorf("Test Failed - Ticker GetTicker init error: %s", err)
t.Errorf("Ticker GetTicker init error: %s", err)
}
if tickerPrice.PriceATH != 9001 {
t.Error("Test Failed - ticker tickerPrice.PriceATH value is incorrect")
t.Error("ticker tickerPrice.PriceATH value is incorrect")
}
_, err = GetTicker("bitfinex", newPair, "meowCats")
if err == nil {
t.Error("Test Failed - Ticker GetTicker error cannot be nil")
t.Error("Ticker GetTicker error cannot be nil")
}
err = ProcessTicker("bitfinex", &priceStruct, "meowCats")
if err != nil {
t.Fatal("Test failed. ProcessTicker error", err)
t.Fatal("ProcessTicker error", err)
}
// process update again
err = ProcessTicker("bitfinex", &priceStruct, "meowCats")
if err != nil {
t.Fatal("Test failed. ProcessTicker error", err)
t.Fatal("ProcessTicker error", err)
}
}
@@ -196,20 +196,20 @@ func TestProcessTicker(t *testing.T) { // non-appending function to tickers
priceStruct.Pair = newPair
err = ProcessTicker(exchName, &priceStruct, "")
if err == nil {
t.Fatal("Test failed. ProcessTicker error cannot be nil")
t.Fatal("ProcessTicker error cannot be nil")
}
// now process a valid ticker
err = ProcessTicker(exchName, &priceStruct, asset.Spot)
if err != nil {
t.Fatal("Test failed. ProcessTicker error", err)
t.Fatal("ProcessTicker error", err)
}
result, err := GetTicker(exchName, newPair, asset.Spot)
if err != nil {
t.Fatal("Test failed. TestProcessTicker failed to create and return a new ticker")
t.Fatal("TestProcessTicker failed to create and return a new ticker")
}
if !result.Pair.Equal(newPair) {
t.Fatal("Test failed. TestProcessTicker pair mismatch")
t.Fatal("TestProcessTicker pair mismatch")
}
// now test for processing a pair with a different quote currency
@@ -217,15 +217,15 @@ func TestProcessTicker(t *testing.T) { // non-appending function to tickers
priceStruct.Pair = newPair
err = ProcessTicker(exchName, &priceStruct, asset.Spot)
if err != nil {
t.Fatal("Test failed. ProcessTicker error", err)
t.Fatal("ProcessTicker error", err)
}
result, err = GetTicker(exchName, newPair, asset.Spot)
if err != nil {
t.Fatal("Test failed. TestProcessTicker failed to create and return a new ticker")
t.Fatal("TestProcessTicker failed to create and return a new ticker")
}
result, err = GetTicker(exchName, newPair, asset.Spot)
if err != nil {
t.Fatal("Test failed. TestProcessTicker failed to return an existing ticker")
t.Fatal("TestProcessTicker failed to return an existing ticker")
}
// now test for processing a pair which has a different base currency
@@ -233,15 +233,15 @@ func TestProcessTicker(t *testing.T) { // non-appending function to tickers
priceStruct.Pair = newPair
err = ProcessTicker(exchName, &priceStruct, asset.Spot)
if err != nil {
t.Fatal("Test failed. ProcessTicker error", err)
t.Fatal("ProcessTicker error", err)
}
result, err = GetTicker(exchName, newPair, asset.Spot)
if err != nil {
t.Fatal("Test failed. TestProcessTicker failed to create and return a new ticker")
t.Fatal("TestProcessTicker failed to create and return a new ticker")
}
result, err = GetTicker(exchName, newPair, asset.Spot)
if err != nil {
t.Fatal("Test failed. TestProcessTicker failed to return an existing ticker")
t.Fatal("TestProcessTicker failed to return an existing ticker")
}
type quick struct {
@@ -289,7 +289,7 @@ func TestProcessTicker(t *testing.T) { // non-appending function to tickers
}
if catastrophicFailure {
t.Fatal("Test failed. ProcessTicker error")
t.Fatal("ProcessTicker error")
}
wg.Wait()
@@ -305,14 +305,14 @@ func TestProcessTicker(t *testing.T) { // non-appending function to tickers
}
if result.Last != test.TP.Last {
t.Error("Test failed. TestProcessTicker failed bad values")
t.Error("TestProcessTicker failed bad values")
}
wg.Done()
}(test)
if fatalErr {
t.Fatal("Test failed. TestProcessTicker failed to retrieve new ticker")
t.Fatal("TestProcessTicker failed to retrieve new ticker")
}
}
wg.Wait()
@@ -343,7 +343,7 @@ func TestSetItemID(t *testing.T) {
func TestGetAssociation(t *testing.T) {
_, err := service.GetAssociations(nil)
if err == nil {
t.Error("error cannot be nil ")
t.Error("error cannot be nil")
}
p := currency.NewPair(currency.CYC, currency.CYG)
@@ -352,7 +352,7 @@ func TestGetAssociation(t *testing.T) {
_, err = service.GetAssociations(&Price{Pair: p, ExchangeName: "GetAssociation"})
if err == nil {
t.Error("error cannot be nil ")
t.Error("error cannot be nil")
}
service.mux = cpyMux

View File

@@ -45,6 +45,7 @@ func (w *Websocket) Setup(setupData *WebsocketSetup) error {
w.SetExchangeName(setupData.ExchangeName)
w.SetCanUseAuthenticatedEndpoints(setupData.AuthenticatedWebsocketAPISupport)
w.trafficTimeout = setupData.WebsocketTimeout
w.features = setupData.Features
err := w.Initialise()
if err != nil {
return err
@@ -91,7 +92,7 @@ func (w *Websocket) Connect() error {
if !w.IsConnectionMonitorRunning() {
go w.connectionMonitor()
}
if w.SupportsFunctionality(WebsocketSubscribeSupported) || w.SupportsFunctionality(WebsocketUnsubscribeSupported) {
if w.features.Subscribe || w.features.Unsubscribe {
w.Wg.Add(1)
go w.manageSubscriptions()
}
@@ -402,87 +403,6 @@ func (w *Websocket) GetName() string {
return w.exchangeName
}
// GetFunctionality returns a functionality bitmask for the websocket
// connection
func (w *Websocket) GetFunctionality() uint32 {
return w.Functionality
}
// SupportsFunctionality returns if the functionality is supported as a boolean
func (w *Websocket) SupportsFunctionality(f uint32) bool {
return w.GetFunctionality()&f == f
}
// FormatFunctionality will return each of the websocket connection compatible
// stream methods as a string
func (w *Websocket) FormatFunctionality() string {
var functionality []string
for i := 0; i < 32; i++ {
var check uint32 = 1 << uint32(i)
if w.GetFunctionality()&check != 0 {
switch check {
case WebsocketTickerSupported:
functionality = append(functionality, WebsocketTickerSupportedText)
case WebsocketOrderbookSupported:
functionality = append(functionality, WebsocketOrderbookSupportedText)
case WebsocketKlineSupported:
functionality = append(functionality, WebsocketKlineSupportedText)
case WebsocketTradeDataSupported:
functionality = append(functionality, WebsocketTradeDataSupportedText)
case WebsocketAccountSupported:
functionality = append(functionality, WebsocketAccountSupportedText)
case WebsocketAllowsRequests:
functionality = append(functionality, WebsocketAllowsRequestsText)
case WebsocketSubscribeSupported:
functionality = append(functionality, WebsocketSubscribeSupportedText)
case WebsocketUnsubscribeSupported:
functionality = append(functionality, WebsocketUnsubscribeSupportedText)
case WebsocketAuthenticatedEndpointsSupported:
functionality = append(functionality, WebsocketAuthenticatedEndpointsSupportedText)
case WebsocketAccountDataSupported:
functionality = append(functionality, WebsocketAccountDataSupportedText)
case WebsocketSubmitOrderSupported:
functionality = append(functionality, WebsocketSubmitOrderSupportedText)
case WebsocketCancelOrderSupported:
functionality = append(functionality, WebsocketCancelOrderSupportedText)
case WebsocketWithdrawSupported:
functionality = append(functionality, WebsocketWithdrawSupportedText)
case WebsocketMessageCorrelationSupported:
functionality = append(functionality, WebsocketMessageCorrelationSupportedText)
case WebsocketSequenceNumberSupported:
functionality = append(functionality, WebsocketSequenceNumberSupportedText)
case WebsocketDeadMansSwitchSupported:
functionality = append(functionality, WebsocketDeadMansSwitchSupportedText)
default:
functionality = append(functionality,
fmt.Sprintf("%s[1<<%v]", UnknownWebsocketFunctionality, i))
}
}
}
if len(functionality) > 0 {
return strings.Join(functionality, " & ")
}
return NoWebsocketSupportText
}
// SetChannelSubscriber sets the function to use the base subscribe func
func (w *Websocket) SetChannelSubscriber(subscriber func(channelToSubscribe WebsocketChannelSubscription) error) {
w.channelSubscriber = subscriber
@@ -495,7 +415,7 @@ func (w *Websocket) SetChannelUnsubscriber(unsubscriber func(channelToUnsubscrib
// ManageSubscriptions ensures the subscriptions specified continue to be subscribed to
func (w *Websocket) manageSubscriptions() {
if !w.SupportsFunctionality(WebsocketSubscribeSupported) && !w.SupportsFunctionality(WebsocketUnsubscribeSupported) {
if !w.features.Subscribe && !w.features.Unsubscribe {
w.DataHandler <- fmt.Errorf("%v does not support channel subscriptions, exiting ManageSubscriptions()", w.exchangeName)
return
}
@@ -528,13 +448,13 @@ func (w *Websocket) manageSubscriptions() {
log.Debugf(log.WebsocketMgr, "%v checking subscriptions", w.exchangeName)
}
// Subscribe to channels Pending a subscription
if w.SupportsFunctionality(WebsocketSubscribeSupported) {
if w.features.Subscribe {
err := w.appendSubscribedChannels()
if err != nil {
w.DataHandler <- err
}
}
if w.SupportsFunctionality(WebsocketUnsubscribeSupported) {
if w.features.Unsubscribe {
err := w.unsubscribeToChannels()
if err != nil {
w.DataHandler <- err

View File

@@ -16,6 +16,7 @@ import (
"github.com/gorilla/websocket"
"github.com/thrasher-corp/gocryptotrader/common"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
)
func TestTrafficMonitorTimeout(t *testing.T) {
@@ -85,6 +86,7 @@ func TestConnectionMessageErrors(t *testing.T) {
ws.DataHandler = make(chan interface{})
ws.ShutdownC = make(chan struct{})
ws.connector = func() error { return nil }
ws.features = &protocol.Features{}
go ws.connectionMonitor()
timer := time.NewTimer(900 * time.Millisecond)
ws.ReadMessageErrors <- errors.New("errorText")
@@ -126,7 +128,7 @@ func TestWebsocket(t *testing.T) {
ws = *New()
err = ws.SetProxyAddress("testProxy")
if err != nil {
t.Error("test failed - SetProxyAddress", err)
t.Error("SetProxyAddress", err)
}
err = ws.Setup(
@@ -140,102 +142,60 @@ func TestWebsocket(t *testing.T) {
Connector: func() error { return nil },
Subscriber: func(test WebsocketChannelSubscription) error { return nil },
UnSubscriber: func(test WebsocketChannelSubscription) error { return nil },
Features: &protocol.Features{},
})
if err != nil {
t.Error(err)
}
if ws.GetName() != "exchangeName" {
t.Error("test failed - WebsocketSetup")
t.Error("WebsocketSetup")
}
if !ws.IsEnabled() {
t.Error("test failed - WebsocketSetup")
t.Error("WebsocketSetup")
}
if ws.GetProxyAddress() != "testProxy" {
t.Error("test failed - WebsocketSetup")
t.Error("WebsocketSetup")
}
if ws.GetDefaultURL() != "testDefaultURL" {
t.Error("test failed - WebsocketSetup")
t.Error("WebsocketSetup")
}
if ws.GetWebsocketURL() != "testRunningURL" {
t.Error("test failed - WebsocketSetup")
t.Error("WebsocketSetup")
}
if ws.trafficTimeout != time.Duration(2) {
t.Error("test failed - WebsocketSetup")
t.Error("WebsocketSetup")
}
// -- Not connected shutdown
err = ws.Shutdown()
if err == nil {
t.Fatal("test failed - should not be connected to able to shut down")
t.Fatal("should not be connected to able to shut down")
}
ws.Wg.Wait()
// -- Normal connect
err = ws.Connect()
if err != nil {
t.Fatal("test failed - WebsocketSetup", err)
t.Fatal("WebsocketSetup", err)
}
ws.SetWebsocketURL("ws://demos.kaazing.com/echo")
// -- Already connected connect
err = ws.Connect()
if err == nil {
t.Fatal("test failed - should not connect, already connected")
t.Fatal("should not connect, already connected")
}
// -- Normal shutdown
err = ws.Shutdown()
if err != nil {
t.Fatal("test failed - WebsocketSetup", err)
t.Fatal("WebsocketSetup", err)
}
ws.Wg.Wait()
}
func TestFunctionality(t *testing.T) {
ws := New()
if ws.FormatFunctionality() != NoWebsocketSupportText {
t.Fatalf("Test Failed - FormatFunctionality error expected %s but received %s",
NoWebsocketSupportText, ws.FormatFunctionality())
}
ws.Functionality = 1 << 31
if ws.FormatFunctionality() != UnknownWebsocketFunctionality+"[1<<31]" {
t.Fatal("Test Failed - GetFunctionality error incorrect error returned")
}
ws.Functionality = WebsocketOrderbookSupported
if ws.GetFunctionality() != WebsocketOrderbookSupported {
t.Fatal("Test Failed - GetFunctionality error incorrect bitmask returned")
}
if !ws.SupportsFunctionality(WebsocketOrderbookSupported) {
t.Fatal("Test Failed - SupportsFunctionality error should be true")
}
ws.Functionality = WebsocketTickerSupported | WebsocketOrderbookSupported | WebsocketKlineSupported |
WebsocketTradeDataSupported | WebsocketAccountSupported | WebsocketAllowsRequests |
WebsocketSubscribeSupported | WebsocketUnsubscribeSupported | WebsocketAuthenticatedEndpointsSupported |
WebsocketAccountDataSupported | WebsocketSubmitOrderSupported | WebsocketCancelOrderSupported |
WebsocketWithdrawSupported | WebsocketMessageCorrelationSupported | WebsocketSequenceNumberSupported |
WebsocketDeadMansSwitchSupported
formatted := ws.FormatFunctionality()
if !strings.Contains(formatted, WebsocketTickerSupportedText) || !strings.Contains(formatted, WebsocketOrderbookSupportedText) ||
!strings.Contains(formatted, WebsocketKlineSupportedText) || !strings.Contains(formatted, WebsocketTradeDataSupportedText) ||
!strings.Contains(formatted, WebsocketAccountSupportedText) || !strings.Contains(formatted, WebsocketAllowsRequestsText) ||
!strings.Contains(formatted, WebsocketSubscribeSupportedText) || !strings.Contains(formatted, WebsocketUnsubscribeSupportedText) ||
!strings.Contains(formatted, WebsocketAuthenticatedEndpointsSupportedText) || !strings.Contains(formatted, WebsocketAccountDataSupportedText) ||
!strings.Contains(formatted, WebsocketSubmitOrderSupportedText) || !strings.Contains(formatted, WebsocketCancelOrderSupportedText) ||
!strings.Contains(formatted, WebsocketWithdrawSupportedText) || !strings.Contains(formatted, WebsocketMessageCorrelationSupportedText) ||
!strings.Contains(formatted, WebsocketSequenceNumberSupportedText) || !strings.Contains(formatted, WebsocketDeadMansSwitchSupportedText) {
t.Error("Failed to format and include supported websocket features")
}
}
// placeholderSubscriber basic function to test subscriptions
func placeholderSubscriber(channelToSubscribe WebsocketChannelSubscription) error {
return nil
@@ -349,8 +309,8 @@ func TestUnsubscriptionWithExistingEntry(t *testing.T) {
// TestManageSubscriptionsStartStop logic test
func TestManageSubscriptionsStartStop(t *testing.T) {
w := Websocket{
ShutdownC: make(chan struct{}),
Functionality: WebsocketSubscribeSupported | WebsocketUnsubscribeSupported,
ShutdownC: make(chan struct{}),
features: &protocol.Features{Subscribe: true, Unsubscribe: true},
}
w.Wg.Add(1)
go w.manageSubscriptions()
@@ -361,8 +321,8 @@ func TestManageSubscriptionsStartStop(t *testing.T) {
// TestManageSubscriptions logic test
func TestManageSubscriptions(t *testing.T) {
w := Websocket{
ShutdownC: make(chan struct{}),
Functionality: WebsocketSubscribeSupported | WebsocketUnsubscribeSupported,
ShutdownC: make(chan struct{}),
features: &protocol.Features{Subscribe: true, Unsubscribe: true},
subscribedChannels: []WebsocketChannelSubscription{
{
Channel: "hello",

View File

@@ -7,47 +7,12 @@ import (
"github.com/gorilla/websocket"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wsorderbook"
)
// Websocket functionality list and state consts
const (
NoWebsocketSupport uint32 = 0
WebsocketTickerSupported uint32 = 1 << (iota - 1)
WebsocketOrderbookSupported
WebsocketKlineSupported
WebsocketTradeDataSupported
WebsocketAccountSupported
WebsocketAllowsRequests
WebsocketSubscribeSupported
WebsocketUnsubscribeSupported
WebsocketAuthenticatedEndpointsSupported
WebsocketAccountDataSupported
WebsocketSubmitOrderSupported
WebsocketCancelOrderSupported
WebsocketWithdrawSupported
WebsocketMessageCorrelationSupported
WebsocketSequenceNumberSupported
WebsocketDeadMansSwitchSupported
WebsocketTickerSupportedText = "TICKER STREAMING SUPPORTED"
WebsocketOrderbookSupportedText = "ORDERBOOK STREAMING SUPPORTED"
WebsocketKlineSupportedText = "KLINE STREAMING SUPPORTED"
WebsocketTradeDataSupportedText = "TRADE STREAMING SUPPORTED"
WebsocketAccountSupportedText = "ACCOUNT STREAMING SUPPORTED"
WebsocketAllowsRequestsText = "WEBSOCKET REQUESTS SUPPORTED"
NoWebsocketSupportText = "WEBSOCKET NOT SUPPORTED"
UnknownWebsocketFunctionality = "UNKNOWN FUNCTIONALITY BITMASK"
WebsocketSubscribeSupportedText = "WEBSOCKET SUBSCRIBE SUPPORTED"
WebsocketUnsubscribeSupportedText = "WEBSOCKET UNSUBSCRIBE SUPPORTED"
WebsocketAuthenticatedEndpointsSupportedText = "WEBSOCKET AUTHENTICATED ENDPOINTS SUPPORTED"
WebsocketAccountDataSupportedText = "WEBSOCKET ACCOUNT DATA SUPPORTED"
WebsocketSubmitOrderSupportedText = "WEBSOCKET SUBMIT ORDER SUPPORTED"
WebsocketCancelOrderSupportedText = "WEBSOCKET CANCEL ORDER SUPPORTED"
WebsocketWithdrawSupportedText = "WEBSOCKET WITHDRAW SUPPORTED"
WebsocketMessageCorrelationSupportedText = "WEBSOCKET MESSAGE CORRELATION SUPPORTED"
WebsocketSequenceNumberSupportedText = "WEBSOCKET SEQUENCE NUMBER SUPPORTED"
WebsocketDeadMansSwitchSupportedText = "WEBSOCKET DEAD MANS SWITCH SUPPORTED"
// WebsocketNotEnabled alerts of a disabled websocket
WebsocketNotEnabled = "exchange_websocket_not_enabled"
manageSubscriptionsDelay = 5 * time.Second
@@ -58,8 +23,6 @@ const (
// Websocket defines a return type for websocket connections via the interface
// wrapper for routine processing in routines.go
type Websocket struct {
// Functionality defines websocket stream capabilities
Functionality uint32
canUseAuthenticatedEndpoints bool
enabled bool
init bool
@@ -93,6 +56,7 @@ type Websocket struct {
TrafficAlert chan struct{}
// ReadMessageErrors will received all errors from ws.ReadMessage() and verify if its a disconnection
ReadMessageErrors chan error
features *protocol.Features
}
type WebsocketSetup struct {
@@ -106,6 +70,7 @@ type WebsocketSetup struct {
Connector func() error
Subscriber func(channelToSubscribe WebsocketChannelSubscription) error
UnSubscriber func(channelToUnsubscribe WebsocketChannelSubscription) error
Features *protocol.Features
}
// WebsocketChannelSubscription container for websocket subscriptions

View File

@@ -242,6 +242,39 @@ func BenchmarkNoBufferPerformance(b *testing.B) {
}
}
func TestUpdates(t *testing.T) {
obl, curr, _, _, err := createSnapshot()
if err != nil {
t.Error(err)
}
obl.updateAsksByPrice(obl.ob[curr][asset.Spot], &WebsocketOrderbookUpdate{
Bids: itemArray[5],
Asks: itemArray[5],
CurrencyPair: curr,
UpdateTime: time.Now(),
AssetType: asset.Spot,
})
if err != nil {
t.Error(err)
}
obl.updateAsksByPrice(obl.ob[curr][asset.Spot], &WebsocketOrderbookUpdate{
Bids: itemArray[0],
Asks: itemArray[0],
CurrencyPair: curr,
UpdateTime: time.Now(),
AssetType: asset.Spot,
})
if err != nil {
t.Error(err)
}
if len(obl.ob[curr][asset.Spot].Asks) != 3 {
t.Error("Did not update")
}
}
// TestHittingTheBuffer logic test
func TestHittingTheBuffer(t *testing.T) {
obl, curr, _, _, err := createSnapshot()

View File

@@ -29,11 +29,11 @@ func TestSetup(t *testing.T) {
yobitConfig := config.GetConfig()
err := yobitConfig.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - Yobit load config error", err)
t.Fatal("Yobit load config error", err)
}
conf, err := yobitConfig.GetExchangeConfig("Yobit")
if err != nil {
t.Fatal("Test Failed - Yobit init error", err)
t.Fatal("Yobit init error", err)
}
conf.API.Credentials.Key = apiKey
conf.API.Credentials.Secret = apiSecret
@@ -41,7 +41,7 @@ func TestSetup(t *testing.T) {
err = y.Setup(conf)
if err != nil {
t.Fatal("Test Failed - Yobit setup error", err)
t.Fatal("Yobit setup error", err)
}
}
@@ -49,7 +49,7 @@ func TestFetchTradablePairs(t *testing.T) {
t.Parallel()
_, err := y.FetchTradablePairs(asset.Spot)
if err != nil {
t.Errorf("Test failed. FetchTradablePairs err: %s", err)
t.Errorf("FetchTradablePairs err: %s", err)
}
}
@@ -57,7 +57,7 @@ func TestGetInfo(t *testing.T) {
t.Parallel()
_, err := y.GetInfo()
if err != nil {
t.Error("Test Failed - GetInfo() error")
t.Error("GetInfo() error")
}
}
@@ -65,7 +65,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := y.GetTicker("btc_usd")
if err != nil {
t.Error("Test Failed - GetTicker() error", err)
t.Error("GetTicker() error", err)
}
}
@@ -73,7 +73,7 @@ func TestGetDepth(t *testing.T) {
t.Parallel()
_, err := y.GetDepth("btc_usd")
if err != nil {
t.Error("Test Failed - GetDepth() error", err)
t.Error("GetDepth() error", err)
}
}
@@ -81,7 +81,7 @@ func TestGetTrades(t *testing.T) {
t.Parallel()
_, err := y.GetTrades("btc_usd")
if err != nil {
t.Error("Test Failed - GetTrades() error", err)
t.Error("GetTrades() error", err)
}
}
@@ -89,7 +89,7 @@ func TestGetAccountInfo(t *testing.T) {
t.Parallel()
_, err := y.GetAccountInfo()
if err == nil {
t.Error("Test Failed - GetAccountInfo() error", err)
t.Error("GetAccountInfo() Expected error")
}
}
@@ -97,7 +97,7 @@ func TestGetOpenOrders(t *testing.T) {
t.Parallel()
_, err := y.GetOpenOrders("")
if err == nil {
t.Error("Test Failed - GetOpenOrders() error", err)
t.Error("GetOpenOrders() Expected error")
}
}
@@ -105,7 +105,7 @@ func TestGetOrderInfo(t *testing.T) {
t.Parallel()
_, err := y.GetOrderInfo("6196974")
if err == nil {
t.Error("Test Failed - GetOrderInfo() error", err)
t.Error("GetOrderInfo() Expected error")
}
}
@@ -113,7 +113,7 @@ func TestCancelOrder(t *testing.T) {
t.Parallel()
_, err := y.CancelExistingOrder(1337)
if err == nil {
t.Error("Test Failed - CancelOrder() error", err)
t.Error("CancelOrder() Expected error")
}
}
@@ -121,7 +121,7 @@ func TestTrade(t *testing.T) {
t.Parallel()
_, err := y.Trade("", exchange.BuyOrderSide.ToLower().ToString(), 0, 0)
if err == nil {
t.Error("Test Failed - Trade() error", err)
t.Error("Trade() Expected error")
}
}
@@ -129,7 +129,7 @@ func TestWithdrawCoinsToAddress(t *testing.T) {
t.Parallel()
_, err := y.WithdrawCoinsToAddress("", 0, "")
if err == nil {
t.Error("Test Failed - WithdrawCoinsToAddress() error", err)
t.Error("WithdrawCoinsToAddress() Expected error")
}
}
@@ -137,7 +137,7 @@ func TestCreateYobicode(t *testing.T) {
t.Parallel()
_, err := y.CreateCoupon("bla", 0)
if err == nil {
t.Error("Test Failed - CreateYobicode() error", err)
t.Error("CreateYobicode() Expected error")
}
}
@@ -145,7 +145,7 @@ func TestRedeemYobicode(t *testing.T) {
t.Parallel()
_, err := y.RedeemCoupon("bla2")
if err == nil {
t.Error("Test Failed - RedeemYobicode() error", err)
t.Error("RedeemYobicode() Expected error")
}
}
@@ -185,7 +185,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := y.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0015), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0015), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -193,7 +193,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := y.GetFee(feeBuilder); resp != float64(2000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Error(err)
}
@@ -201,7 +201,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := y.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Error(err)
}
@@ -209,14 +209,14 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := y.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
// CryptocurrencyWithdrawalFee Basic
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := y.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Error(err)
}
@@ -225,7 +225,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := y.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -233,7 +233,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := y.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -241,7 +241,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := y.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -250,7 +250,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := y.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -260,7 +260,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FiatCurrency = currency.USD
feeBuilder.BankTransactionType = exchange.Qiwi
if resp, err := y.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -270,7 +270,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FiatCurrency = currency.USD
feeBuilder.BankTransactionType = exchange.WireTransfer
if resp, err := y.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -280,7 +280,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FiatCurrency = currency.USD
feeBuilder.BankTransactionType = exchange.Payeer
if resp, err := y.GetFee(feeBuilder); resp != float64(0.03) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.03), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.03), resp)
t.Error(err)
}
@@ -290,7 +290,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FiatCurrency = currency.RUR
feeBuilder.BankTransactionType = exchange.Capitalist
if resp, err := y.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -300,7 +300,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FiatCurrency = currency.USD
feeBuilder.BankTransactionType = exchange.AdvCash
if resp, err := y.GetFee(feeBuilder); resp != float64(0.04) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.04), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.04), resp)
t.Error(err)
}
@@ -310,7 +310,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FiatCurrency = currency.RUR
feeBuilder.BankTransactionType = exchange.PerfectMoney
if resp, err := y.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -458,7 +458,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := y.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -521,12 +521,12 @@ func TestGetDepositAddress(t *testing.T) {
if apiKey != "" || apiSecret != "" {
_, err := y.GetDepositAddress(currency.BTC, "")
if err != nil {
t.Error("Test Failed - GetDepositAddress() error", err)
t.Error("GetDepositAddress() Expected error")
}
} else {
_, err := y.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error")
t.Error("GetDepositAddress() error")
}
}
}

View File

@@ -15,6 +15,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -72,9 +73,23 @@ func (y *Yobit) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: false,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrder: true,
UserTradeHistory: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
FiatDepositFee: true,
FiatWithdrawalFee: true,
CryptoWithdrawalFee: true,
},
WithdrawPermissions: exchange.AutoWithdrawCryptoWithAPIPermission |
exchange.WithdrawFiatViaWebsiteOnly,

View File

@@ -31,11 +31,11 @@ func TestSetup(t *testing.T) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
t.Fatal("Test Failed - ZB load config error", err)
t.Fatal("ZB load config error", err)
}
zbConfig, err := cfg.GetExchangeConfig("ZB")
if err != nil {
t.Fatal("Test Failed - ZB Setup() init error", err)
t.Fatal("ZB Setup() init error", err)
}
zbConfig.API.AuthenticatedSupport = true
zbConfig.API.AuthenticatedWebsocketSupport = true
@@ -44,7 +44,7 @@ func TestSetup(t *testing.T) {
err = z.Setup(zbConfig)
if err != nil {
t.Fatal("Test Failed - ZB setup error", err)
t.Fatal("ZB setup error", err)
}
}
@@ -90,7 +90,7 @@ func TestSpotNewOrder(t *testing.T) {
}
orderid, err := z.SpotNewOrder(arg)
if err != nil {
t.Errorf("Test failed - ZB SpotNewOrder: %s", err)
t.Errorf("ZB SpotNewOrder: %s", err)
} else {
t.Log(orderid)
}
@@ -105,7 +105,7 @@ func TestCancelExistingOrder(t *testing.T) {
err := z.CancelExistingOrder(20180629145864850, "btc_usdt")
if err != nil {
t.Errorf("Test failed - ZB CancelExistingOrder: %s", err)
t.Errorf("ZB CancelExistingOrder: %s", err)
}
}
@@ -113,7 +113,7 @@ func TestGetLatestSpotPrice(t *testing.T) {
t.Parallel()
_, err := z.GetLatestSpotPrice("btc_usdt")
if err != nil {
t.Errorf("Test failed - ZB GetLatestSpotPrice: %s", err)
t.Errorf("ZB GetLatestSpotPrice: %s", err)
}
}
@@ -121,7 +121,7 @@ func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := z.GetTicker("btc_usdt")
if err != nil {
t.Errorf("Test failed - ZB GetTicker: %s", err)
t.Errorf("ZB GetTicker: %s", err)
}
}
@@ -129,7 +129,7 @@ func TestGetTickers(t *testing.T) {
t.Parallel()
_, err := z.GetTickers()
if err != nil {
t.Errorf("Test failed - ZB GetTicker: %s", err)
t.Errorf("ZB GetTicker: %s", err)
}
}
@@ -137,7 +137,7 @@ func TestGetOrderbook(t *testing.T) {
t.Parallel()
_, err := z.GetOrderbook("btc_usdt")
if err != nil {
t.Errorf("Test failed - ZB GetTicker: %s", err)
t.Errorf("ZB GetTicker: %s", err)
}
}
@@ -145,7 +145,7 @@ func TestGetMarkets(t *testing.T) {
t.Parallel()
_, err := z.GetMarkets()
if err != nil {
t.Errorf("Test failed - ZB GetMarkets: %s", err)
t.Errorf("ZB GetMarkets: %s", err)
}
}
@@ -159,7 +159,7 @@ func TestGetSpotKline(t *testing.T) {
}
_, err := z.GetSpotKline(arg)
if err != nil {
t.Errorf("Test failed - ZB GetSpotKline: %s", err)
t.Errorf("ZB GetSpotKline: %s", err)
}
}
@@ -199,7 +199,7 @@ func TestGetFee(t *testing.T) {
// CryptocurrencyTradeFee Basic
if resp, err := z.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Error(err)
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.0015), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.0015), resp)
}
// CryptocurrencyTradeFee High quantity
@@ -207,7 +207,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if resp, err := z.GetFee(feeBuilder); resp != float64(2000) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(2000), resp)
t.Error(err)
}
@@ -215,7 +215,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if resp, err := z.GetFee(feeBuilder); resp != float64(0.002) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.002), resp)
t.Error(err)
}
@@ -223,14 +223,14 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if resp, err := z.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
// CryptocurrencyWithdrawalFee Basic
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := z.GetFee(feeBuilder); resp != float64(0.005) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0.005), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0.005), resp)
t.Error(err)
}
@@ -239,7 +239,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.Pair.Base = currency.NewCode("hello")
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if resp, err := z.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -247,7 +247,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CyptocurrencyDepositFee
if resp, err := z.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -255,7 +255,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
if resp, err := z.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
@@ -264,7 +264,7 @@ func TestGetFee(t *testing.T) {
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.USD
if resp, err := z.GetFee(feeBuilder); resp != float64(0) || err != nil {
t.Errorf("Test Failed - GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Errorf("GetFee() error. Expected: %f, Received: %f", float64(0), resp)
t.Error(err)
}
}
@@ -413,12 +413,12 @@ func TestGetAccountInfo(t *testing.T) {
if z.ValidateAPICredentials() {
_, err := z.GetAccountInfo()
if err != nil {
t.Error("Test Failed - GetAccountInfo() error", err)
t.Error("GetAccountInfo() error", err)
}
} else {
_, err := z.GetAccountInfo()
if err == nil {
t.Error("Test Failed - GetAccountInfo() error")
t.Error("GetAccountInfo() Expected error")
}
}
}
@@ -426,7 +426,7 @@ func TestGetAccountInfo(t *testing.T) {
func TestModifyOrder(t *testing.T) {
_, err := z.ModifyOrder(&exchange.ModifyOrder{})
if err == nil {
t.Error("Test failed - ModifyOrder() error")
t.Error("ModifyOrder() Expected error")
}
}
@@ -490,13 +490,13 @@ func TestGetDepositAddress(t *testing.T) {
if apiKey != "" || apiSecret != "" {
_, err := z.GetDepositAddress(currency.BTC, "")
if err != nil {
t.Error("Test Failed - GetDepositAddress() error PLEASE MAKE SURE YOU CREATE DEPOSIT ADDRESSES VIA ZB.COM",
t.Error("GetDepositAddress() error PLEASE MAKE SURE YOU CREATE DEPOSIT ADDRESSES VIA ZB.COM",
err)
}
} else {
_, err := z.GetDepositAddress(currency.BTC, "")
if err == nil {
t.Error("Test Failed - GetDepositAddress() error")
t.Error("GetDepositAddress() Expected error")
}
}
}

View File

@@ -13,6 +13,7 @@ import (
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
@@ -69,9 +70,32 @@ func (z *ZB) SetDefaults() {
Supports: exchange.FeaturesSupported{
REST: true,
Websocket: true,
RESTCapabilities: exchange.ProtocolFeatures{
AutoPairUpdates: true,
TickerBatching: true,
RESTCapabilities: protocol.Features{
TickerBatching: true,
TickerFetching: true,
KlineFetching: true,
OrderbookFetching: true,
AutoPairUpdates: true,
AccountInfo: true,
GetOrder: true,
GetOrders: true,
CancelOrder: true,
CryptoDeposit: true,
CryptoWithdrawal: true,
TradeFee: true,
CryptoDepositFee: true,
CryptoWithdrawalFee: true,
},
WebsocketCapabilities: protocol.Features{
TickerFetching: true,
TradeFetching: true,
OrderbookFetching: true,
Subscribe: true,
AuthenticatedEndpoints: true,
AccountInfo: true,
CancelOrder: true,
SubmitOrder: true,
MessageCorrelation: true,
},
WithdrawPermissions: exchange.AutoWithdrawCrypto |
exchange.NoFiatWithdrawals,
@@ -92,15 +116,6 @@ func (z *ZB) SetDefaults() {
z.API.Endpoints.URLSecondary = z.API.Endpoints.URLSecondaryDefault
z.API.Endpoints.WebsocketURL = zbWebsocketAPI
z.Websocket = wshandler.New()
z.Websocket.Functionality = wshandler.WebsocketTickerSupported |
wshandler.WebsocketOrderbookSupported |
wshandler.WebsocketTradeDataSupported |
wshandler.WebsocketSubscribeSupported |
wshandler.WebsocketAuthenticatedEndpointsSupported |
wshandler.WebsocketAccountDataSupported |
wshandler.WebsocketCancelOrderSupported |
wshandler.WebsocketSubmitOrderSupported |
wshandler.WebsocketMessageCorrelationSupported
z.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
z.WebsocketResponseCheckTimeout = exchange.DefaultWebsocketResponseCheckTimeout
}
@@ -128,6 +143,7 @@ func (z *ZB) Setup(exch *config.ExchangeConfig) error {
RunningURL: exch.API.Endpoints.WebsocketURL,
Connector: z.WsConnect,
Subscriber: z.Subscribe,
Features: &z.Features.Supports.WebsocketCapabilities,
})
if err != nil {
return err