exchanges: Initial context propagation (#744)

* gct: phase one context awareness pass

* exchanges: context propagation pass

* common/requester: force context requirement

* gctcli/exchanges: linter fix

* rpcserver: fix test using dummy rpc server

* backtester: fix comments

* grpc: add correct cancel and timeout for commands

* rpcserver_test: add comment on dummy server

* common: deprecated SendHTTPGetRequest

* linter: fix

* linter: turn on no context check

* apichecker: fix context linter issue

* binance: use param context

* common: remove checks as this gets executed before main

* common: change mutex to RW as clients can be used by multiple go routines.

* common: remove init and JIT default client. Unexport global variables and add protection.

* common: Add comments

* bithumb: after dinner mints fix
This commit is contained in:
Ryan O'Hara-Reid
2021-09-11 13:52:07 +10:00
committed by GitHub
parent 72516f7268
commit d636049fb2
168 changed files with 8085 additions and 6996 deletions

View File

@@ -1,6 +1,7 @@
package bittrex
import (
"context"
"log"
"os"
"testing"
@@ -57,7 +58,7 @@ func TestMain(m *testing.M) {
func TestGetMarkets(t *testing.T) {
t.Parallel()
_, err := b.GetMarkets()
_, err := b.GetMarkets(context.Background())
if err != nil {
t.Error(err)
}
@@ -65,7 +66,7 @@ func TestGetMarkets(t *testing.T) {
func TestGetCurrencies(t *testing.T) {
t.Parallel()
_, err := b.GetCurrencies()
_, err := b.GetCurrencies(context.Background())
if err != nil {
t.Error(err)
}
@@ -73,7 +74,7 @@ func TestGetCurrencies(t *testing.T) {
func TestGetTicker(t *testing.T) {
t.Parallel()
_, err := b.GetTicker(currPair)
_, err := b.GetTicker(context.Background(), currPair)
if err != nil {
t.Error(err)
}
@@ -81,7 +82,7 @@ func TestGetTicker(t *testing.T) {
func TestGetMarketSummaries(t *testing.T) {
t.Parallel()
_, err := b.GetMarketSummaries()
_, err := b.GetMarketSummaries(context.Background())
if err != nil {
t.Error(err)
}
@@ -89,7 +90,7 @@ func TestGetMarketSummaries(t *testing.T) {
func TestGetMarketSummary(t *testing.T) {
t.Parallel()
_, err := b.GetMarketSummary(currPair)
_, err := b.GetMarketSummary(context.Background(), currPair)
if err != nil {
t.Error(err)
}
@@ -98,7 +99,7 @@ func TestGetMarketSummary(t *testing.T) {
func TestGetOrderbook(t *testing.T) {
t.Parallel()
_, _, err := b.GetOrderbook(currPair, 500)
_, _, err := b.GetOrderbook(context.Background(), currPair, 500)
if err != nil {
t.Error(err)
}
@@ -107,7 +108,7 @@ func TestGetOrderbook(t *testing.T) {
func TestGetMarketHistory(t *testing.T) {
t.Parallel()
_, err := b.GetMarketHistory(currPair)
_, err := b.GetMarketHistory(context.Background(), currPair)
if err != nil {
t.Error(err)
}
@@ -116,7 +117,8 @@ func TestGetMarketHistory(t *testing.T) {
func TestGetRecentCandles(t *testing.T) {
t.Parallel()
_, err := b.GetRecentCandles(currPair, "HOUR_1", "MIDPOINT")
_, err := b.GetRecentCandles(context.Background(),
currPair, "HOUR_1", "MIDPOINT")
if err != nil {
t.Error(err)
}
@@ -125,11 +127,13 @@ func TestGetRecentCandles(t *testing.T) {
func TestGetHistoricalCandles(t *testing.T) {
t.Parallel()
_, err := b.GetHistoricalCandles(currPair, "MINUTE_5", "MIDPOINT", 2020, 12, 31)
_, err := b.GetHistoricalCandles(context.Background(),
currPair, "MINUTE_5", "MIDPOINT", 2020, 12, 31)
if err != nil {
t.Error(err)
}
_, err = b.GetHistoricalCandles(currPair, "MINUTE_5", "MIDPOINT", 2020, 12, 32)
_, err = b.GetHistoricalCandles(context.Background(),
currPair, "MINUTE_5", "MIDPOINT", 2020, 12, 32)
if err == nil {
t.Error("invalid date should give an error")
}
@@ -138,7 +142,8 @@ func TestGetHistoricalCandles(t *testing.T) {
func TestOrder(t *testing.T) {
t.Parallel()
_, err := b.Order(currPair, order.Buy.String(), order.Limit.String(), "", 1, 1, 0.0)
_, err := b.Order(context.Background(),
currPair, order.Buy.String(), order.Limit.String(), "", 1, 1, 0.0)
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -149,13 +154,13 @@ func TestOrder(t *testing.T) {
func TestGetOpenOrders(t *testing.T) {
t.Parallel()
_, _, err := b.GetOpenOrders("")
_, _, err := b.GetOpenOrders(context.Background(), "")
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
t.Error("Expected error")
}
_, _, err = b.GetOpenOrders(currPair)
_, _, err = b.GetOpenOrders(context.Background(), currPair)
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -166,7 +171,7 @@ func TestGetOpenOrders(t *testing.T) {
func TestCancelExistingOrder(t *testing.T) {
t.Parallel()
_, err := b.CancelExistingOrder("invalid-order")
_, err := b.CancelExistingOrder(context.Background(), "invalid-order")
if err == nil {
t.Error("Expected error")
}
@@ -175,7 +180,7 @@ func TestCancelExistingOrder(t *testing.T) {
func TestGetAccountBalances(t *testing.T) {
t.Parallel()
_, err := b.GetBalances()
_, err := b.GetBalances(context.Background())
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -186,7 +191,7 @@ func TestGetAccountBalances(t *testing.T) {
func TestGetAccountBalanceByCurrency(t *testing.T) {
t.Parallel()
_, err := b.GetAccountBalanceByCurrency(curr)
_, err := b.GetAccountBalanceByCurrency(context.Background(), curr)
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -197,13 +202,13 @@ func TestGetAccountBalanceByCurrency(t *testing.T) {
func TestGetOrder(t *testing.T) {
t.Parallel()
_, err := b.GetOrder("0cb4c4e4-bdc7-4e13-8c13-430e587d2cc1")
_, err := b.GetOrder(context.Background(), "0cb4c4e4-bdc7-4e13-8c13-430e587d2cc1")
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
t.Error("Expected error")
}
_, err = b.GetOrder("")
_, err = b.GetOrder(context.Background(), "")
if areTestAPIKeysSet() && err == nil {
t.Error("Expected error")
} else if !areTestAPIKeysSet() && err == nil {
@@ -214,13 +219,13 @@ func TestGetOrder(t *testing.T) {
func TestGetOrderHistoryForCurrency(t *testing.T) {
t.Parallel()
_, err := b.GetOrderHistoryForCurrency("")
_, err := b.GetOrderHistoryForCurrency(context.Background(), "")
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
t.Error("Expected error")
}
_, err = b.GetOrderHistoryForCurrency(currPair)
_, err = b.GetOrderHistoryForCurrency(context.Background(), currPair)
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -231,7 +236,7 @@ func TestGetOrderHistoryForCurrency(t *testing.T) {
func TestGetClosedWithdrawals(t *testing.T) {
t.Parallel()
_, err := b.GetClosedWithdrawals()
_, err := b.GetClosedWithdrawals(context.Background())
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -242,7 +247,7 @@ func TestGetClosedWithdrawals(t *testing.T) {
func TestGetClosedWithdrawalsForCurrency(t *testing.T) {
t.Parallel()
_, err := b.GetClosedWithdrawalsForCurrency(curr)
_, err := b.GetClosedWithdrawalsForCurrency(context.Background(), curr)
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -253,7 +258,7 @@ func TestGetClosedWithdrawalsForCurrency(t *testing.T) {
func TestGetOpenWithdrawals(t *testing.T) {
t.Parallel()
_, err := b.GetOpenWithdrawals()
_, err := b.GetOpenWithdrawals(context.Background())
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -264,7 +269,7 @@ func TestGetOpenWithdrawals(t *testing.T) {
func TestGetClosedDeposits(t *testing.T) {
t.Parallel()
_, err := b.GetClosedDeposits()
_, err := b.GetClosedDeposits(context.Background())
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -275,7 +280,7 @@ func TestGetClosedDeposits(t *testing.T) {
func TestGetClosedDepositsForCurrency(t *testing.T) {
t.Parallel()
_, err := b.GetClosedDepositsForCurrency(curr)
_, err := b.GetClosedDepositsForCurrency(context.Background(), curr)
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -286,7 +291,7 @@ func TestGetClosedDepositsForCurrency(t *testing.T) {
func TestGetClosedDepositsPaginated(t *testing.T) {
t.Parallel()
_, err := b.GetClosedDepositsPaginated(100)
_, err := b.GetClosedDepositsPaginated(context.Background(), 100)
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -297,7 +302,7 @@ func TestGetClosedDepositsPaginated(t *testing.T) {
func TestGetOpenDeposits(t *testing.T) {
t.Parallel()
_, err := b.GetOpenDeposits()
_, err := b.GetOpenDeposits(context.Background())
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -308,7 +313,7 @@ func TestGetOpenDeposits(t *testing.T) {
func TestGetOpenDepositsForCurrency(t *testing.T) {
t.Parallel()
_, err := b.GetOpenDepositsForCurrency(curr)
_, err := b.GetOpenDepositsForCurrency(context.Background(), curr)
if areTestAPIKeysSet() && err != nil {
t.Error(err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -321,7 +326,8 @@ func TestWithdraw(t *testing.T) {
if !areTestAPIKeysSet() || !canManipulateRealOrders {
t.Skip("skipping test, either api keys or canManipulateRealOrders isnt set correctly")
}
_, err := b.Withdraw(curr, "", core.BitcoinDonationAddress, 0.0009)
_, err := b.Withdraw(context.Background(),
curr, "", core.BitcoinDonationAddress, 0.0009)
if err != nil {
t.Error(err)
}
@@ -339,7 +345,7 @@ func setFeeBuilder() *exchange.FeeBuilder {
// TestGetFeeByTypeOfflineTradeFee logic test
func TestGetFeeByTypeOfflineTradeFee(t *testing.T) {
var feeBuilder = setFeeBuilder()
_, err := b.GetFeeByType(feeBuilder)
_, err := b.GetFeeByType(context.Background(), feeBuilder)
if err != nil {
t.Fatal(err)
}
@@ -357,7 +363,7 @@ func TestGetFeeByTypeOfflineTradeFee(t *testing.T) {
func TestGetFee(t *testing.T) {
var feeBuilder = setFeeBuilder()
// CryptocurrencyTradeFee Basic
if _, err := b.GetFee(feeBuilder); err != nil {
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
t.Error(err)
}
@@ -365,35 +371,35 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.Amount = 1000
feeBuilder.PurchasePrice = 1000
if _, err := b.GetFee(feeBuilder); err != nil {
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
t.Error(err)
}
// CryptocurrencyTradeFee IsMaker
feeBuilder = setFeeBuilder()
feeBuilder.IsMaker = true
if _, err := b.GetFee(feeBuilder); err != nil {
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
t.Error(err)
}
// CryptocurrencyTradeFee Negative purchase price
feeBuilder = setFeeBuilder()
feeBuilder.PurchasePrice = -1000
if _, err := b.GetFee(feeBuilder); err != nil {
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
t.Error(err)
}
// CryptocurrencyWithdrawalFee Basic
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyWithdrawalFee
if _, err := b.GetFee(feeBuilder); err != nil {
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
t.Error(err)
}
// CryptocurrencyDepositFee Basic
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.CryptocurrencyDepositFee
if _, err := b.GetFee(feeBuilder); err != nil {
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
t.Error(err)
}
@@ -401,7 +407,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankDepositFee
feeBuilder.FiatCurrency = currency.HKD
if _, err := b.GetFee(feeBuilder); err != nil {
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
t.Error(err)
}
@@ -409,7 +415,7 @@ func TestGetFee(t *testing.T) {
feeBuilder = setFeeBuilder()
feeBuilder.FeeType = exchange.InternationalBankWithdrawalFee
feeBuilder.FiatCurrency = currency.HKD
if _, err := b.GetFee(feeBuilder); err != nil {
if _, err := b.GetFee(context.Background(), feeBuilder); err != nil {
t.Error(err)
}
}
@@ -436,7 +442,7 @@ func TestGetActiveOrders(t *testing.T) {
getOrdersRequest.Pairs[0].Delimiter = currency.DashDelimiter
_, err = b.GetActiveOrders(&getOrdersRequest)
_, err = b.GetActiveOrders(context.Background(), &getOrdersRequest)
if areTestAPIKeysSet() && err != nil {
t.Errorf("Could not get open orders: %s", err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -450,7 +456,7 @@ func TestGetOrderHistory(t *testing.T) {
AssetType: asset.Spot,
}
_, err := b.GetOrderHistory(&getOrdersRequest)
_, err := b.GetOrderHistory(context.Background(), &getOrdersRequest)
if err == nil {
t.Error("Expected: 'At least one currency is required to fetch order history'. received nil")
}
@@ -459,7 +465,7 @@ func TestGetOrderHistory(t *testing.T) {
currency.NewPair(currency.BTC, currency.USDT),
}
_, err = b.GetOrderHistory(&getOrdersRequest)
_, err = b.GetOrderHistory(context.Background(), &getOrdersRequest)
if areTestAPIKeysSet() && err != nil {
t.Errorf("Could not get order history: %s", err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -491,7 +497,7 @@ func TestSubmitOrder(t *testing.T) {
ClientID: "meowOrder",
AssetType: asset.Spot,
}
response, err := b.SubmitOrder(orderSubmission)
response, err := b.SubmitOrder(context.Background(), orderSubmission)
if areTestAPIKeysSet() && (err != nil || !response.IsOrderPlaced) {
t.Errorf("Order failed to be placed: %v", err)
} else if !areTestAPIKeysSet() && err == nil {
@@ -513,7 +519,7 @@ func TestCancelExchangeOrder(t *testing.T) {
AssetType: asset.Spot,
}
err := b.CancelOrder(orderCancellation)
err := b.CancelOrder(context.Background(), orderCancellation)
if !areTestAPIKeysSet() && err == nil {
t.Error("Expecting an error when no keys are set")
}
@@ -536,7 +542,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
AssetType: asset.Spot,
}
resp, err := b.CancelAllOrders(orderCancellation)
resp, err := b.CancelAllOrders(context.Background(), orderCancellation)
if !areTestAPIKeysSet() && err == nil {
t.Error("Expecting an error when no keys are set")
@@ -554,7 +560,8 @@ func TestModifyOrder(t *testing.T) {
if areTestAPIKeysSet() && !canManipulateRealOrders {
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
}
_, err := b.ModifyOrder(&order.Modify{AssetType: asset.Spot})
_, err := b.ModifyOrder(context.Background(),
&order.Modify{AssetType: asset.Spot})
if err == nil {
t.Error("Expected error")
}
@@ -574,7 +581,8 @@ func WithdrawCryptocurrencyFunds(t *testing.T) {
t.Skip("API keys set, canManipulateRealOrders false, skipping test")
}
_, err := b.WithdrawCryptocurrencyFunds(&withdrawCryptoRequest)
_, err := b.WithdrawCryptocurrencyFunds(context.Background(),
&withdrawCryptoRequest)
if !areTestAPIKeysSet() && err == nil {
t.Error("Expecting an error when no keys are set")
}
@@ -590,7 +598,7 @@ func TestWithdrawFiat(t *testing.T) {
var withdrawFiatRequest = withdraw.Request{}
_, err := b.WithdrawFiatFunds(&withdrawFiatRequest)
_, err := b.WithdrawFiatFunds(context.Background(), &withdrawFiatRequest)
if err != common.ErrFunctionNotSupported {
t.Errorf("Expected '%v', received: '%v'", common.ErrFunctionNotSupported, err)
}
@@ -603,7 +611,8 @@ func TestWithdrawInternationalBank(t *testing.T) {
var withdrawFiatRequest = withdraw.Request{}
_, err := b.WithdrawFiatFundsToInternationalBank(&withdrawFiatRequest)
_, err := b.WithdrawFiatFundsToInternationalBank(context.Background(),
&withdrawFiatRequest)
if err != common.ErrFunctionNotSupported {
t.Errorf("Expected '%v', received: '%v'", common.ErrFunctionNotSupported, err)
}
@@ -611,12 +620,12 @@ func TestWithdrawInternationalBank(t *testing.T) {
func TestGetDepositAddress(t *testing.T) {
if areTestAPIKeysSet() {
_, err := b.GetDepositAddress(currency.BTC, "")
_, err := b.GetDepositAddress(context.Background(), currency.BTC, "")
if err != nil {
t.Error(err)
}
} else {
_, err := b.GetDepositAddress(currency.BTC, "")
_, err := b.GetDepositAddress(context.Background(), currency.BTC, "")
if err == nil {
t.Error("error cannot be nil")
}
@@ -629,7 +638,7 @@ func TestGetRecentTrades(t *testing.T) {
if err != nil {
t.Fatal(err)
}
_, err = b.GetRecentTrades(currencyPair, asset.Spot)
_, err = b.GetRecentTrades(context.Background(), currencyPair, asset.Spot)
if err != nil {
t.Error(err)
}
@@ -641,7 +650,8 @@ func TestGetHistoricTrades(t *testing.T) {
if err != nil {
t.Fatal(err)
}
_, err = b.GetHistoricTrades(currencyPair, asset.Spot, time.Now().Add(-time.Minute*15), time.Now())
_, err = b.GetHistoricTrades(context.Background(),
currencyPair, asset.Spot, time.Now().Add(-time.Minute*15), time.Now())
if err != nil && err != common.ErrFunctionNotSupported {
t.Fatal(err)
}