exchanges: Improve TestMain usage (#1946)

* exchanges: Improve TestMain usage

* exchanges: Further cleanups

* exchanges/kucoin: update TestProcessOrderbook to use test context

* refactor: rename SetRunning to SetRunningURL for clarity across exchanges
This commit is contained in:
Adrian Gallagher
2025-06-25 13:02:47 +10:00
committed by GitHub
parent 61a3d765ee
commit ebcbfab358
38 changed files with 214 additions and 460 deletions

View File

@@ -22,12 +22,17 @@ const (
canManipulateRealOrders = false
)
var a = &Alphapoint{}
var a *Alphapoint
func TestMain(m *testing.M) {
a = new(Alphapoint)
a.SetDefaults()
a.SetCredentials(apiKey, apiSecret, "", "", "", "")
a.API.AuthenticatedSupport = true
if apiKey != "" && apiSecret != "" {
a.API.AuthenticatedSupport = true
a.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
os.Exit(m.Run())
}

View File

@@ -20,7 +20,7 @@ var mockTests = false
func TestMain(m *testing.M) {
b = new(Binance)
if err := testexch.Setup(b); err != nil {
log.Fatal(err)
log.Fatalf("Binance Setup error: %s", err)
}
if apiKey != "" && apiSecret != "" {
@@ -35,18 +35,16 @@ func TestMain(m *testing.M) {
exchange.RestCoinMargined: testnetFutures,
exchange.RestSpot: testnetSpotURL,
} {
if err := b.API.Endpoints.SetRunning(k.String(), v); err != nil {
log.Fatalf("Testnet %q URL error with %q: %s", k, v, err)
if err := b.API.Endpoints.SetRunningURL(k.String(), v); err != nil {
log.Fatalf("Binance SetRunningURL error: %s", err)
}
}
}
ctx := context.Background()
b.setupOrderbookManager(ctx)
b.Websocket.DataHandler = sharedtestvalues.GetWebsocketInterfaceChannelOverride()
log.Printf(sharedtestvalues.LiveTesting, b.Name)
if err := b.UpdateTradablePairs(ctx, true); err != nil {
log.Fatal("Binance setup error", err)
if err := b.UpdateTradablePairs(context.Background(), true); err != nil {
log.Fatalf("Binance UpdateTradablePairs error: %s", err)
}
os.Exit(m.Run())

View File

@@ -22,17 +22,15 @@ func TestMain(m *testing.M) {
b = new(Binance)
if err := testexch.Setup(b); err != nil {
log.Fatal(err)
log.Fatalf("Binance Setup error: %s", err)
}
if err := testexch.MockHTTPInstance(b); err != nil {
log.Fatal(err)
log.Fatalf("Binance MockHTTPInstance error: %s", err)
}
ctx := context.Background()
b.setupOrderbookManager(ctx)
if err := b.UpdateTradablePairs(ctx, true); err != nil {
log.Fatal(err)
if err := b.UpdateTradablePairs(context.Background(), true); err != nil {
log.Fatalf("Binance UpdateTradablePairs error: %s", err)
}
os.Exit(m.Run())

View File

@@ -1,7 +1,6 @@
package binanceus
import (
"context"
"log"
"os"
reflects "reflect"
@@ -12,7 +11,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/core"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/encoding/json"
@@ -33,35 +31,25 @@ const (
)
var (
bi = &Binanceus{}
bi *Binanceus
testPairMapping = currency.NewBTCUSDT()
// this lock guards against orderbook tests race
binanceusOrderBookLock = &sync.Mutex{}
)
func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Binanceus load config error", err)
bi = new(Binanceus)
if err := testexch.Setup(bi); err != nil {
log.Fatalf("Binanceus Setup error: %s", err)
}
exchCfg, err := cfg.GetExchangeConfig("Binanceus")
if err != nil {
log.Fatal(err)
if apiKey != "" && apiSecret != "" {
bi.API.AuthenticatedSupport = true
bi.API.AuthenticatedWebsocketSupport = true
bi.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
exchCfg.API.AuthenticatedSupport = true
exchCfg.API.AuthenticatedWebsocketSupport = true
exchCfg.API.Credentials.Key = apiKey
exchCfg.API.Credentials.Secret = apiSecret
bi.SetDefaults()
bi.Websocket = sharedtestvalues.NewTestWebsocket()
bi.WebsocketResponseMaxLimit = exchange.DefaultWebsocketResponseMaxLimit
err = bi.Setup(exchCfg)
if err != nil {
log.Fatal("Binanceus TestMain()", err)
}
bi.setupOrderbookManager(context.Background())
os.Exit(m.Run())
}

View File

@@ -44,21 +44,14 @@ var (
func TestMain(m *testing.M) {
b = new(Bitfinex)
if err := testexch.Setup(b); err != nil {
log.Fatal(err)
log.Fatalf("Bitfinex Setup error: %s", err)
}
if apiKey != "" {
if apiKey != "" && apiSecret != "" {
b.Websocket.SetCanUseAuthenticatedEndpoints(true)
b.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
if !b.Enabled || len(b.BaseCurrencies) < 1 {
log.Fatal("Bitfinex Setup values not set correctly")
}
if sharedtestvalues.AreAPICredentialsSet(b) {
b.API.AuthenticatedSupport = true
b.API.AuthenticatedWebsocketSupport = true
b.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
os.Exit(m.Run())

View File

@@ -9,7 +9,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/common"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/core"
"github.com/thrasher-corp/gocryptotrader/currency"
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
@@ -27,26 +26,17 @@ const (
canManipulateRealOrders = false
)
var b = &Bitflyer{}
var b *Bitflyer
func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Bitflyer load config error", err)
}
bitflyerConfig, err := cfg.GetExchangeConfig("Bitflyer")
if err != nil {
log.Fatal("bitflyer Setup() init error")
b = new(Bitflyer)
if err := testexch.Setup(b); err != nil {
log.Fatalf("Bitflyer Setup error: %s", err)
}
bitflyerConfig.API.AuthenticatedSupport = true
bitflyerConfig.API.Credentials.Key = apiKey
bitflyerConfig.API.Credentials.Secret = apiSecret
b.SetDefaults()
err = b.Setup(bitflyerConfig)
if err != nil {
log.Fatal("Bitflyer setup error", err)
if apiKey != "" && apiSecret != "" {
b.API.AuthenticatedSupport = true
b.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
os.Exit(m.Run())

View File

@@ -12,7 +12,6 @@ import (
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/common"
"github.com/thrasher-corp/gocryptotrader/common/key"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/core"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchange/websocket"
@@ -36,29 +35,20 @@ const (
canManipulateRealOrders = false
)
var b = &Bitmex{}
var b *Bitmex
func TestMain(m *testing.M) {
b.SetDefaults()
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Bitmex load config error", err)
}
bitmexConfig, err := cfg.GetExchangeConfig("Bitmex")
if err != nil {
log.Fatal("Bitmex Setup() init error")
b = new(Bitmex)
if err := testexch.Setup(b); err != nil {
log.Fatalf("Bitmex Setup error: %s", err)
}
bitmexConfig.API.AuthenticatedSupport = true
bitmexConfig.API.AuthenticatedWebsocketSupport = true
bitmexConfig.API.Credentials.Key = apiKey
bitmexConfig.API.Credentials.Secret = apiSecret
b.Websocket = sharedtestvalues.NewTestWebsocket()
err = b.Setup(bitmexConfig)
if err != nil {
log.Fatal("Bitmex setup error", err)
if apiKey != "" && apiSecret != "" {
b.API.AuthenticatedSupport = true
b.API.AuthenticatedWebsocketSupport = true
b.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
os.Exit(m.Run())
}
@@ -486,7 +476,7 @@ func TestGetActiveOrders(t *testing.T) {
if sharedtestvalues.AreAPICredentialsSet(b) {
require.NoError(t, err)
} else {
require.ErrorIs(t, err, exchange.ErrCredentialsAreEmpty)
require.ErrorIs(t, err, exchange.ErrAuthenticationSupportNotEnabled)
}
}
@@ -503,7 +493,7 @@ func TestGetOrderHistory(t *testing.T) {
if sharedtestvalues.AreAPICredentialsSet(b) {
require.NoError(t, err)
} else {
require.ErrorIs(t, err, exchange.ErrCredentialsAreEmpty)
require.ErrorIs(t, err, exchange.ErrAuthenticationSupportNotEnabled)
}
}
@@ -532,7 +522,7 @@ func TestSubmitOrder(t *testing.T) {
require.NoError(t, err)
assert.Equal(t, order.New, response.Status)
} else {
require.ErrorIs(t, err, exchange.ErrCredentialsAreEmpty)
require.ErrorIs(t, err, exchange.ErrAuthenticationSupportNotEnabled)
}
}
@@ -552,7 +542,7 @@ func TestCancelExchangeOrder(t *testing.T) {
if sharedtestvalues.AreAPICredentialsSet(b) {
require.NoError(t, err)
} else {
require.ErrorIs(t, err, exchange.ErrCredentialsAreEmpty)
require.ErrorIs(t, err, exchange.ErrAuthenticationSupportNotEnabled)
}
}
@@ -573,7 +563,7 @@ func TestCancelAllExchangeOrders(t *testing.T) {
require.NoError(t, err)
require.Empty(t, resp.Status, "CancelAllOrders must not fail to cancel orders")
} else {
require.ErrorIs(t, err, exchange.ErrCredentialsAreEmpty)
require.ErrorIs(t, err, exchange.ErrAuthenticationSupportNotEnabled)
}
}

View File

@@ -9,37 +9,20 @@ import (
"os"
"testing"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues"
testexch "github.com/thrasher-corp/gocryptotrader/internal/testing/exchange"
)
var mockTests = false
func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Bitstamp load config error", err)
b = new(Bitstamp)
if err := testexch.Setup(b); err != nil {
log.Fatalf("Bitstamp Setup error: %s", err)
}
bitstampConfig, err := cfg.GetExchangeConfig("Bitstamp")
if err != nil {
log.Fatal("Bitstamp Setup() init error", err)
}
bitstampConfig.API.AuthenticatedSupport = true
if apiKey != "" {
bitstampConfig.API.Credentials.Key = apiKey
}
if apiSecret != "" {
bitstampConfig.API.Credentials.Secret = apiSecret
}
if customerID != "" {
bitstampConfig.API.Credentials.ClientID = customerID
}
b.SetDefaults()
b.Websocket = sharedtestvalues.NewTestWebsocket()
err = b.Setup(bitstampConfig)
if err != nil {
log.Fatal("Bitstamp setup error", err)
if apiKey != "" && apiSecret != "" {
b.API.AuthenticatedSupport = true
b.SetCredentials(apiKey, apiSecret, customerID, "", "", "")
}
log.Printf(sharedtestvalues.LiveTesting, b.Name)
os.Exit(m.Run())

View File

@@ -9,59 +9,20 @@ import (
"os"
"testing"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/exchanges/mock"
"github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues"
testexch "github.com/thrasher-corp/gocryptotrader/internal/testing/exchange"
)
const mockfile = "../../testdata/http_mock/bitstamp/bitstamp.json"
var mockTests = true
func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Bitstamp load config error", err)
}
bitstampConfig, err := cfg.GetExchangeConfig("Bitstamp")
if err != nil {
log.Fatal("Bitstamp Setup() init error", err)
}
b.SkipAuthCheck = true
bitstampConfig.API.AuthenticatedSupport = true
if apiKey != "" {
bitstampConfig.API.Credentials.Key = apiKey
}
if apiSecret != "" {
bitstampConfig.API.Credentials.Secret = apiSecret
}
if customerID != "" {
bitstampConfig.API.Credentials.ClientID = customerID
}
b.SetDefaults()
b.Websocket = sharedtestvalues.NewTestWebsocket()
err = b.Setup(bitstampConfig)
if err != nil {
log.Fatal("Bitstamp setup error", err)
b = new(Bitstamp)
if err := testexch.Setup(b); err != nil {
log.Fatalf("Bitstamp Setup error: %s", err)
}
serverDetails, newClient, err := mock.NewVCRServer(mockfile)
if err != nil {
log.Fatalf("Mock server error %s", err)
if err := testexch.MockHTTPInstance(b, "api"); err != nil {
log.Fatalf("Bitstamp MockHTTPInstance error: %s", err)
}
err = b.SetHTTPClient(newClient)
if err != nil {
log.Fatalf("Mock server error %s", err)
}
endpointMap := b.API.Endpoints.GetURLMap()
for k := range endpointMap {
err = b.API.Endpoints.SetRunning(k, serverDetails+"/api")
if err != nil {
log.Fatal(err)
}
}
log.Printf(sharedtestvalues.MockTesting, b.Name)
os.Exit(m.Run())
}

68482
exchanges/bitstamp/testdata/http.json vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,6 @@
package btcmarkets
import (
"context"
"fmt"
"log"
"os"
"testing"
@@ -11,7 +9,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/common"
"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/kline"
@@ -36,30 +33,17 @@ const (
var spotTestPair = currency.NewPair(currency.BTC, currency.AUD).Format(currency.PairFormat{Uppercase: true, Delimiter: currency.DashDelimiter})
func TestMain(m *testing.M) {
b.SetDefaults()
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal(err)
b = new(BTCMarkets)
if err := testexch.Setup(b); err != nil {
log.Fatalf("BTCMarkets Setup error: %s", err)
}
bConfig, err := cfg.GetExchangeConfig("BTC Markets")
if err != nil {
log.Fatal(err)
}
bConfig.API.Credentials.Key = apiKey
bConfig.API.Credentials.Secret = apiSecret
bConfig.API.AuthenticatedSupport = true
b.Websocket = sharedtestvalues.NewTestWebsocket()
err = b.Setup(bConfig)
if err != nil {
log.Fatal(err)
}
err = b.ValidateAPICredentials(context.Background(), asset.Spot)
if err != nil {
fmt.Println("API credentials are invalid:", err)
b.API.AuthenticatedSupport = false
b.API.AuthenticatedWebsocketSupport = false
if apiKey != "" && apiSecret != "" {
b.API.AuthenticatedSupport = true
b.API.AuthenticatedWebsocketSupport = true
b.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
os.Exit(m.Run())
}

View File

@@ -10,7 +10,6 @@ import (
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/common"
"github.com/thrasher-corp/gocryptotrader/common/key"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchange/websocket"
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
@@ -35,28 +34,20 @@ const (
)
var (
b = &BTSE{}
b *BTSE
futuresPair = currency.NewPair(currency.ENJ, currency.PFC)
spotPair = currency.NewPairWithDelimiter("BTC", "USD", "-")
)
func TestMain(m *testing.M) {
b.SetDefaults()
cfg := config.GetConfig()
if err := cfg.LoadConfig("../../testdata/configtest.json", true); err != nil {
log.Fatal(err)
}
btseConfig, err := cfg.GetExchangeConfig("BTSE")
if err != nil {
log.Fatal(err)
b = new(BTSE)
if err := testexch.Setup(b); err != nil {
log.Fatalf("BTSE Setup error: %s", err)
}
btseConfig.API.AuthenticatedSupport = true
btseConfig.API.Credentials.Key = apiKey
btseConfig.API.Credentials.Secret = apiSecret
b.Websocket = sharedtestvalues.NewTestWebsocket()
if err = b.Setup(btseConfig); err != nil {
log.Fatal(err)
if apiKey != "" && apiSecret != "" {
b.API.AuthenticatedSupport = true
b.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
os.Exit(m.Run())

View File

@@ -20,7 +20,7 @@ var mockTests = false
func TestMain(m *testing.M) {
b = new(Bybit)
if err := testexch.Setup(b); err != nil {
log.Fatal(err)
log.Fatalf("Bybit Setup error: %s", err)
}
if apiKey != "" && apiSecret != "" {

View File

@@ -20,13 +20,13 @@ var mockTests = true
func TestMain(m *testing.M) {
b = new(Bybit)
if err := testexch.Setup(b); err != nil {
log.Fatal(err)
log.Fatalf("Bybit Setup error: %s", err)
}
b.SetCredentials("mock", "tester", "", "", "", "") // Hack for UpdateAccountInfo test
if err := testexch.MockHTTPInstance(b); err != nil {
log.Fatal(err)
log.Fatalf("Bybit MockHTTPInstance error: %s", err)
}
if err := b.UpdateTradablePairs(context.Background(), true); err != nil {

View File

@@ -28,7 +28,7 @@ import (
)
var (
c = &CoinbasePro{}
c *CoinbasePro
testPair = currency.NewPairWithDelimiter(currency.BTC.String(), currency.USD.String(), "-")
)

View File

@@ -12,7 +12,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/common"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/core"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchange/websocket"
@@ -26,7 +25,7 @@ import (
)
var (
c = &COINUT{}
c *COINUT
wsSetupRan bool
)
@@ -38,29 +37,21 @@ const (
)
func TestMain(m *testing.M) {
c.SetDefaults()
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Coinut load config error", err)
c = new(COINUT)
if err := testexch.Setup(c); err != nil {
log.Fatalf("Coinut Setup error: %s", err)
}
coinutCfg, err := cfg.GetExchangeConfig("COINUT")
if err != nil {
log.Fatal("Coinut Setup() init error")
if apiKey != "" && clientID != "" {
c.API.AuthenticatedSupport = true
c.API.AuthenticatedWebsocketSupport = true
c.SetCredentials(apiKey, clientID, "", "", "", "")
}
coinutCfg.API.AuthenticatedSupport = true
coinutCfg.API.AuthenticatedWebsocketSupport = true
coinutCfg.API.Credentials.Key = apiKey
coinutCfg.API.Credentials.ClientID = clientID
c.Websocket = sharedtestvalues.NewTestWebsocket()
err = c.Setup(coinutCfg)
if err != nil {
log.Fatal("Coinut setup error", err)
}
err = c.SeedInstruments(context.Background())
if err != nil {
log.Fatal("Coinut setup error ", err)
if err := c.SeedInstruments(context.Background()); err != nil {
log.Fatalf("Coinut SeedInstruments error: %s", err)
}
os.Exit(m.Run())
}

View File

@@ -52,9 +52,8 @@ var (
)
func TestMain(m *testing.M) {
err := testexch.Setup(d)
if err != nil {
log.Fatal(err)
if err := testexch.Setup(d); err != nil {
log.Fatalf("Deribit Setup error: %s", err)
}
if apiKey != "" && apiSecret != "" {
@@ -65,15 +64,13 @@ func TestMain(m *testing.M) {
}
if useTestNet {
deribitWebsocketAddress = "wss://test.deribit.com/ws" + deribitAPIVersion
err = d.Websocket.SetWebsocketURL(deribitWebsocketAddress, false, true)
if err != nil {
log.Fatal(err)
if err := d.Websocket.SetWebsocketURL(deribitWebsocketAddress, false, true); err != nil {
log.Fatalf("Deribit SetWebsocketURL error: %s", err)
}
for k, v := range d.API.Endpoints.GetURLMap() {
v = strings.Replace(v, "www.deribit.com", "test.deribit.com", 1)
err = d.API.Endpoints.SetRunning(k, v)
if err != nil {
log.Fatal(err)
if err := d.API.Endpoints.SetRunningURL(k, v); err != nil {
log.Fatalf("Deribit SetRunningURL error: %s", err)
}
}
}

View File

@@ -804,21 +804,21 @@ func (b *Base) SetAPIURL() error {
var err error
if b.Config.API.OldEndPoints != nil {
if b.Config.API.OldEndPoints.URL != "" && b.Config.API.OldEndPoints.URL != config.APIURLNonDefaultMessage {
err = b.API.Endpoints.SetRunning(RestSpot.String(), b.Config.API.OldEndPoints.URL)
err = b.API.Endpoints.SetRunningURL(RestSpot.String(), b.Config.API.OldEndPoints.URL)
if err != nil {
return err
}
checkInsecureEndpoint(b.Config.API.OldEndPoints.URL)
}
if b.Config.API.OldEndPoints.URLSecondary != "" && b.Config.API.OldEndPoints.URLSecondary != config.APIURLNonDefaultMessage {
err = b.API.Endpoints.SetRunning(RestSpotSupplementary.String(), b.Config.API.OldEndPoints.URLSecondary)
err = b.API.Endpoints.SetRunningURL(RestSpotSupplementary.String(), b.Config.API.OldEndPoints.URLSecondary)
if err != nil {
return err
}
checkInsecureEndpoint(b.Config.API.OldEndPoints.URLSecondary)
}
if b.Config.API.OldEndPoints.WebsocketURL != "" && b.Config.API.OldEndPoints.WebsocketURL != config.WebsocketURLNonDefaultMessage {
err = b.API.Endpoints.SetRunning(WebsocketSpot.String(), b.Config.API.OldEndPoints.WebsocketURL)
err = b.API.Endpoints.SetRunningURL(WebsocketSpot.String(), b.Config.API.OldEndPoints.WebsocketURL)
if err != nil {
return err
}
@@ -865,7 +865,7 @@ func (b *Base) SetAPIURL() error {
checkInsecureEndpoint(val)
err = b.API.Endpoints.SetRunning(key, val)
err = b.API.Endpoints.SetRunningURL(key, val)
if err != nil {
return err
}
@@ -1242,7 +1242,7 @@ func (b *Base) NewEndpoints() *Endpoints {
// SetDefaultEndpoints declares and sets the default URLs map
func (e *Endpoints) SetDefaultEndpoints(m map[URL]string) error {
for k, v := range m {
err := e.SetRunning(k.String(), v)
err := e.SetRunningURL(k.String(), v)
if err != nil {
return err
}
@@ -1250,8 +1250,8 @@ func (e *Endpoints) SetDefaultEndpoints(m map[URL]string) error {
return nil
}
// SetRunning populates running URLs map
func (e *Endpoints) SetRunning(key, val string) error {
// SetRunningURL populates running URLs map
func (e *Endpoints) SetRunningURL(key, val string) error {
e.mu.Lock()
defer e.mu.Unlock()
err := validateKey(key)

View File

@@ -91,7 +91,7 @@ func TestSet(t *testing.T) {
if err != nil {
t.Error(err)
}
err = b.API.Endpoints.SetRunning(EdgeCase2.String(), "http://google.com/")
err = b.API.Endpoints.SetRunningURL(EdgeCase2.String(), "http://google.com/")
if err != nil {
t.Error(err)
}
@@ -102,7 +102,7 @@ func TestSet(t *testing.T) {
if val != "http://google.com/" {
t.Errorf("vals didn't match. expecting: %s, got: %s\n", "http://google.com/", val)
}
err = b.API.Endpoints.SetRunning(EdgeCase3.String(), "Added Edgecase3")
err = b.API.Endpoints.SetRunningURL(EdgeCase3.String(), "Added Edgecase3")
if err != nil {
t.Errorf("not expecting an error since invalid url val err should be logged but received: %v", err)
}
@@ -128,7 +128,7 @@ func TestGetURL(t *testing.T) {
if getVal != "http://test1.com/" {
t.Errorf("getVal failed")
}
err = b.API.Endpoints.SetRunning(EdgeCase2.String(), "http://OVERWRITTENBRO.com.au/")
err = b.API.Endpoints.SetRunningURL(EdgeCase2.String(), "http://OVERWRITTENBRO.com.au/")
if err != nil {
t.Error(err)
}
@@ -1827,12 +1827,12 @@ func TestSetAPIURL(t *testing.T) {
}
}
func TestSetRunning(t *testing.T) {
func TestSetRunningURL(t *testing.T) {
b := Base{
Name: "HELOOOOOOOO",
}
b.API.Endpoints = b.NewEndpoints()
err := b.API.Endpoints.SetRunning(EdgeCase1.String(), "http://google.com/")
err := b.API.Endpoints.SetRunningURL(EdgeCase1.String(), "http://google.com/")
if err != nil {
t.Error(err)
}

View File

@@ -9,7 +9,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/common"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/core"
"github.com/thrasher-corp/gocryptotrader/currency"
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
@@ -28,29 +27,21 @@ const (
)
var (
e = &EXMO{}
e *EXMO
testPair = currency.NewBTCUSD().Format(currency.PairFormat{Uppercase: true, Delimiter: "_"})
)
func TestMain(m *testing.M) {
e.SetDefaults()
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Exmo load config error", err)
}
exmoConf, err := cfg.GetExchangeConfig("EXMO")
if err != nil {
log.Fatal("Exmo Setup() init error")
e = new(EXMO)
if err := testexch.Setup(e); err != nil {
log.Fatalf("EXMO Setup error: %s", err)
}
err = e.Setup(exmoConf)
if err != nil {
log.Fatal("Exmo setup error", err)
if APIKey != "" && APISecret != "" {
e.API.AuthenticatedSupport = true
e.SetCredentials(APIKey, APISecret, "", "", "", "")
}
e.API.AuthenticatedSupport = true
e.SetCredentials(APIKey, APISecret, "", "", "", "")
os.Exit(m.Run())
}

View File

@@ -49,7 +49,7 @@ var g *Gateio
func TestMain(m *testing.M) {
g = new(Gateio)
if err := testexch.Setup(g); err != nil {
log.Fatal(err)
log.Fatalf("Gateio Setup error: %s", err)
}
if apiKey != "" && apiSecret != "" {

View File

@@ -9,35 +9,24 @@ import (
"os"
"testing"
"github.com/thrasher-corp/gocryptotrader/config"
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
"github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues"
testexch "github.com/thrasher-corp/gocryptotrader/internal/testing/exchange"
)
var mockTests = false
func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Gemini load config error", err)
g = new(Gemini)
if err := testexch.Setup(g); err != nil {
log.Fatalf("Gemini Setup error: %s", err)
}
geminiConfig, err := cfg.GetExchangeConfig("Gemini")
if err != nil {
log.Fatal("Gemini Setup() init error", err)
if apiKey != "" && apiSecret != "" {
g.API.AuthenticatedSupport = true
g.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
geminiConfig.API.AuthenticatedSupport = true
geminiConfig.API.Credentials.Key = apiKey
geminiConfig.API.Credentials.Secret = apiSecret
g.SetDefaults()
g.Websocket = sharedtestvalues.NewTestWebsocket()
err = g.Setup(geminiConfig)
if err != nil {
log.Fatal("Gemini setup error", err)
}
err = g.API.Endpoints.SetRunning(exchange.RestSpot.String(), geminiAPIURL)
if err != nil {
log.Fatalf("endpoint setting failed. key: %s, val: %s", exchange.RestSpot.String(), geminiAPIURL)
if err := g.API.Endpoints.SetRunningURL(exchange.RestSpot.String(), geminiAPIURL); err != nil {
log.Fatalf("Gemini SetRunningURL error: %s", err)
}
log.Printf(sharedtestvalues.LiveTesting, g.Name)
os.Exit(m.Run())

View File

@@ -9,52 +9,20 @@ import (
"os"
"testing"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/exchanges/mock"
"github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues"
testexch "github.com/thrasher-corp/gocryptotrader/internal/testing/exchange"
)
const mockFile = "../../testdata/http_mock/gemini/gemini.json"
var mockTests = true
func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Gemini load config error", err)
}
geminiConfig, err := cfg.GetExchangeConfig("Gemini")
if err != nil {
log.Fatal("Mock server error", err)
}
g.SkipAuthCheck = true
geminiConfig.API.AuthenticatedSupport = true
geminiConfig.API.Credentials.Key = apiKey
geminiConfig.API.Credentials.Secret = apiSecret
g.SetDefaults()
g.Websocket = sharedtestvalues.NewTestWebsocket()
err = g.Setup(geminiConfig)
if err != nil {
log.Fatal("Gemini setup error", err)
g = new(Gemini)
if err := testexch.Setup(g); err != nil {
log.Fatalf("Gemini Setup error: %s", err)
}
serverDetails, newClient, err := mock.NewVCRServer(mockFile)
if err != nil {
log.Fatalf("Mock server error %s", err)
if err := testexch.MockHTTPInstance(g); err != nil {
log.Fatalf("Gemini MockHTTPInstance error: %s", err)
}
err = g.SetHTTPClient(newClient)
if err != nil {
log.Fatalf("Mock server error %s", err)
}
endpointMap := g.API.Endpoints.GetURLMap()
for k := range endpointMap {
err = g.API.Endpoints.SetRunning(k, serverDetails)
if err != nil {
log.Fatal(err)
}
}
log.Printf(sharedtestvalues.MockTesting, g.Name)
os.Exit(m.Run())
}

View File

@@ -552,7 +552,7 @@ func TestGetDepositAddress(t *testing.T) {
// TestWsAuth dials websocket, sends login request.
func TestWsAuth(t *testing.T) {
t.Parallel()
err := g.API.Endpoints.SetRunning(exchange.WebsocketSpot.String(), geminiWebsocketSandboxEndpoint)
err := g.API.Endpoints.SetRunningURL(exchange.WebsocketSpot.String(), geminiWebsocketSandboxEndpoint)
if err != nil {
t.Error(err)
}

View File

@@ -128,7 +128,7 @@ func (g *Gemini) Setup(exch *config.Exchange) error {
}
if exch.UseSandbox {
err = g.API.Endpoints.SetRunning(exchange.RestSpot.String(), geminiSandboxAPIURL)
err = g.API.Endpoints.SetRunningURL(exchange.RestSpot.String(), geminiSandboxAPIURL)
if err != nil {
log.Errorln(log.ExchangeSys, err)
}

22335
exchanges/gemini/testdata/http.json vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -12,7 +12,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/common"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/core"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchange/websocket"
@@ -28,7 +27,7 @@ import (
)
var (
h = &HitBTC{}
h *HitBTC
wsSetupRan bool
)
@@ -42,29 +41,19 @@ const (
var spotPair = currency.NewBTCUSD().Format(currency.PairFormat{Uppercase: true})
func TestMain(m *testing.M) {
h.SetDefaults()
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("HitBTC load config error", err)
}
hitbtcConfig, err := cfg.GetExchangeConfig("HitBTC")
if err != nil {
log.Fatal("HitBTC Setup() init error")
}
hitbtcConfig.API.AuthenticatedSupport = true
hitbtcConfig.API.AuthenticatedWebsocketSupport = true
hitbtcConfig.API.Credentials.Key = apiKey
hitbtcConfig.API.Credentials.Secret = apiSecret
h.Websocket = sharedtestvalues.NewTestWebsocket()
err = h.Setup(hitbtcConfig)
if err != nil {
log.Fatal("HitBTC setup error", err)
h = new(HitBTC)
if err := testexch.Setup(h); err != nil {
log.Fatalf("HitBTC Setup error: %s", err)
}
err = h.UpdateTradablePairs(context.Background(), false)
if err != nil {
log.Fatal("HitBTC setup error", err)
if apiKey != "" && apiSecret != "" {
h.API.AuthenticatedSupport = true
h.API.AuthenticatedWebsocketSupport = true
h.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
if err := h.UpdateTradablePairs(context.Background(), false); err != nil {
log.Fatalf("HitBTC UpdateTradablePairs error: %s", err)
}
os.Exit(m.Run())

View File

@@ -16,7 +16,6 @@ import (
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/common"
"github.com/thrasher-corp/gocryptotrader/common/key"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/core"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchange/websocket"
@@ -46,7 +45,7 @@ const (
)
var (
h = &HUOBI{}
h *HUOBI
btcFutureDatedPair currency.Pair
btccwPair = currency.NewPair(currency.BTC, currency.NewCode("CW"))
btcusdPair = currency.NewPairWithDelimiter("BTC", "USD", "-")
@@ -55,25 +54,17 @@ var (
)
func TestMain(m *testing.M) {
h.SetDefaults()
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Huobi load config error", err)
h = new(HUOBI)
if err := testexch.Setup(h); err != nil {
log.Fatalf("HUOBI Setup error: %s", err)
}
hConfig, err := cfg.GetExchangeConfig("Huobi")
if err != nil {
log.Fatal("Huobi Setup() init error")
}
hConfig.API.AuthenticatedSupport = true
hConfig.API.AuthenticatedWebsocketSupport = true
hConfig.API.Credentials.Key = apiKey
hConfig.API.Credentials.Secret = apiSecret
h.Websocket = sharedtestvalues.NewTestWebsocket()
err = h.Setup(hConfig)
if err != nil {
log.Fatal("Huobi setup error", err)
if apiKey != "" && apiSecret != "" {
h.API.AuthenticatedSupport = true
h.API.AuthenticatedWebsocketSupport = true
h.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
os.Exit(m.Run())
}
@@ -1160,7 +1151,7 @@ func TestGetActiveOrders(t *testing.T) {
if sharedtestvalues.AreAPICredentialsSet(h) {
require.NoError(t, err)
} else {
require.ErrorIs(t, err, exchange.ErrCredentialsAreEmpty)
require.ErrorIs(t, err, exchange.ErrAuthenticationSupportNotEnabled)
}
}
@@ -1271,7 +1262,7 @@ func TestQueryDepositAddress(t *testing.T) {
if sharedtestvalues.AreAPICredentialsSet(h) {
require.NoError(t, err)
} else {
require.ErrorIs(t, err, exchange.ErrCredentialsAreEmpty)
require.ErrorIs(t, err, exchange.ErrAuthenticationSupportNotEnabled)
}
}
@@ -1281,7 +1272,7 @@ func TestGetDepositAddress(t *testing.T) {
if sharedtestvalues.AreAPICredentialsSet(h) {
require.NoError(t, err)
} else {
require.ErrorIs(t, err, exchange.ErrCredentialsAreEmpty)
require.ErrorIs(t, err, exchange.ErrAuthenticationSupportNotEnabled)
}
}
@@ -1291,7 +1282,7 @@ func TestQueryWithdrawQuota(t *testing.T) {
if sharedtestvalues.AreAPICredentialsSet(h) {
require.NoError(t, err)
} else {
require.ErrorIs(t, err, exchange.ErrCredentialsAreEmpty)
require.ErrorIs(t, err, exchange.ErrAuthenticationSupportNotEnabled)
}
}

View File

@@ -50,7 +50,7 @@ const (
func TestMain(m *testing.M) {
k = new(Kraken)
if err := testexch.Setup(k); err != nil {
log.Fatal(err)
log.Fatalf("Kraken Setup error: %s", err)
}
if apiKey != "" && apiSecret != "" {
k.API.AuthenticatedSupport = true

View File

@@ -53,7 +53,7 @@ var (
func TestMain(m *testing.M) {
ku = new(Kucoin)
if err := testexch.Setup(ku); err != nil {
log.Fatal(err)
log.Fatalf("Kucoin Setup error: %s", err)
}
if apiKey != "" && apiSecret != "" && passPhrase != "" {
@@ -64,14 +64,12 @@ func TestMain(m *testing.M) {
ku.Websocket.SetCanUseAuthenticatedEndpoints(true)
}
ctx := context.Background()
getFirstTradablePairOfAssets(ctx)
getFirstTradablePairOfAssets(context.Background())
assertToTradablePairMap = map[asset.Item]currency.Pair{
asset.Spot: spotTradablePair,
asset.Margin: marginTradablePair,
asset.Futures: futuresTradablePair,
}
ku.setupOrderbookManager(ctx)
fetchedFuturesOrderbook = map[string]bool{}
os.Exit(m.Run())
@@ -2976,6 +2974,7 @@ func TestProcessOrderbook(t *testing.T) {
response := &WsOrderbook{}
err := json.Unmarshal([]byte(wsOrderbookData), &response)
assert.NoError(t, err)
ku.setupOrderbookManager(t.Context())
result, err := ku.updateLocalBuffer(response, asset.Spot)
assert.NoError(t, err)
assert.NotNil(t, result)

View File

@@ -45,7 +45,7 @@ var (
func TestMain(m *testing.M) {
l = new(Lbank)
if err := testexch.Setup(l); err != nil {
log.Fatal(err)
log.Fatalf("Lbank Setup error: %s", err)
}
if apiKey != "" && apiSecret != "" {
l.API.AuthenticatedSupport = true

View File

@@ -62,7 +62,7 @@ var (
func TestMain(m *testing.M) {
ok = new(Okx)
if err := testexch.Setup(ok); err != nil {
log.Fatal(err)
log.Fatalf("Okx Setup error: %s", err)
}
if apiKey != "" && apiSecret != "" && passphrase != "" {

View File

@@ -9,30 +9,20 @@ import (
"os"
"testing"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues"
testexch "github.com/thrasher-corp/gocryptotrader/internal/testing/exchange"
)
var mockTests = false
func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Poloniex load config error", err)
p = new(Poloniex)
if err := testexch.Setup(p); err != nil {
log.Fatalf("Poloniex Setup error: %s", err)
}
poloniexConfig, err := cfg.GetExchangeConfig("Poloniex")
if err != nil {
log.Fatal("Poloniex Setup() init error", err)
}
poloniexConfig.API.AuthenticatedSupport = true
poloniexConfig.API.Credentials.Key = apiKey
poloniexConfig.API.Credentials.Secret = apiSecret
p.SetDefaults()
p.Websocket = sharedtestvalues.NewTestWebsocket()
err = p.Setup(poloniexConfig)
if err != nil {
log.Fatal("Poloniex setup error", err)
if apiKey != "" && apiSecret != "" {
p.API.AuthenticatedSupport = true
p.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
log.Printf(sharedtestvalues.LiveTesting, p.Name)
p.Websocket.DataHandler = sharedtestvalues.GetWebsocketInterfaceChannelOverride()

View File

@@ -9,52 +9,20 @@ import (
"os"
"testing"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/exchanges/mock"
"github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues"
testexch "github.com/thrasher-corp/gocryptotrader/internal/testing/exchange"
)
const mockfile = "../../testdata/http_mock/poloniex/poloniex.json"
var mockTests = true
func TestMain(m *testing.M) {
cfg := config.GetConfig()
err := cfg.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Poloniex load config error", err)
}
poloniexConfig, err := cfg.GetExchangeConfig("Poloniex")
if err != nil {
log.Fatal("Poloniex Setup() init error", err)
}
p.SkipAuthCheck = true
poloniexConfig.API.AuthenticatedSupport = true
poloniexConfig.API.Credentials.Key = apiKey
poloniexConfig.API.Credentials.Secret = apiSecret
p.SetDefaults()
p.Websocket = sharedtestvalues.NewTestWebsocket()
err = p.Setup(poloniexConfig)
if err != nil {
log.Fatal("Poloniex setup error", err)
p = new(Poloniex)
if err := testexch.Setup(p); err != nil {
log.Fatalf("Poloniex Setup error: %s", err)
}
serverDetails, newClient, err := mock.NewVCRServer(mockfile)
if err != nil {
log.Fatalf("Mock server error %s", err)
if err := testexch.MockHTTPInstance(p); err != nil {
log.Fatalf("Poloniex MockHTTPInstance error: %s", err)
}
err = p.SetHTTPClient(newClient)
if err != nil {
log.Fatalf("Mock server error %s", err)
}
endpoints := p.API.Endpoints.GetURLMap()
for k := range endpoints {
err = p.API.Endpoints.SetRunning(k, serverDetails)
if err != nil {
log.Fatal(err)
}
}
log.Printf(sharedtestvalues.MockTesting, p.Name)
os.Exit(m.Run())
}

20336
exchanges/poloniex/testdata/http.json vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/common"
"github.com/thrasher-corp/gocryptotrader/config"
"github.com/thrasher-corp/gocryptotrader/core"
"github.com/thrasher-corp/gocryptotrader/currency"
exchange "github.com/thrasher-corp/gocryptotrader/exchanges"
@@ -21,7 +20,7 @@ import (
"github.com/thrasher-corp/gocryptotrader/portfolio/withdraw"
)
var y = &Yobit{}
var y *Yobit
// Please supply your own keys for better unit testing
const (
@@ -33,23 +32,14 @@ const (
var testPair = currency.NewBTCUSD().Format(currency.PairFormat{Delimiter: "_"})
func TestMain(m *testing.M) {
y.SetDefaults()
yobitConfig := config.GetConfig()
err := yobitConfig.LoadConfig("../../testdata/configtest.json", true)
if err != nil {
log.Fatal("Yobit load config error", err)
y = new(Yobit)
if err := testexch.Setup(y); err != nil {
log.Fatalf("Yobit Setup error: %s", err)
}
conf, err := yobitConfig.GetExchangeConfig("Yobit")
if err != nil {
log.Fatal("Yobit init error", err)
}
conf.API.Credentials.Key = apiKey
conf.API.Credentials.Secret = apiSecret
conf.API.AuthenticatedSupport = true
err = y.Setup(conf)
if err != nil {
log.Fatal("Yobit setup error", err)
if apiKey != "" && apiSecret != "" {
y.API.AuthenticatedSupport = true
y.SetCredentials(apiKey, apiSecret, "", "", "", "")
}
os.Exit(m.Run())