From a5b638bfb7879f779b520850ca36d59f7f727289 Mon Sep 17 00:00:00 2001 From: Adrian Gallagher Date: Wed, 28 May 2025 12:26:51 +1000 Subject: [PATCH] GHA: Add additional checks for common issues (#1922) * GHA, tests: Add additional checks for common issues These checks include: - Ensuring that all testify funcs use their formatted variants (e.g., `assert.Equalf(t, expected, actual)` instead of `assert.Equal(t, expected, actual)`). - Replacing `%s` with %q - Enforcing consistent usage of should/must wording for testify assert/require messages * Add support for checking backticked string format specifiers and fix issues * tests: Fix error comparisons * tests: Replace errors.Is(err, nil) usage with testify and automate check * refactor: Rename ExtractPort to ExtractPortOrDefault * tests: Replace assert with require for error handling in multiple test files * tests: Replace assert with require for error handling and improve assertions in data tests * tests: Fix typo in assertion message for StreamVol test * OKX: Fix GetOpenInterestAndVolumeStrike test with instrument selection and improved assertions * OKX: Revert intentional error check * Improve error message for expiry time check in GetOpenInterestAndVolumeStrike test --- .github/workflows/misc.yml | 35 +- backtester/common/common_test.go | 18 +- backtester/config/strategyconfig_test.go | 50 +- backtester/data/data_test.go | 345 +++++-------- backtester/data/kline/csv/csv_test.go | 9 +- .../data/kline/database/database_test.go | 30 +- backtester/data/kline/kline_test.go | 196 +++----- backtester/engine/backtest_test.go | 371 ++++++-------- backtester/engine/live_test.go | 69 +-- backtester/engine/taskmanager_test.go | 142 ++---- .../eventholder/eventholder_test.go | 6 +- .../eventhandlers/exchange/exchange_test.go | 48 +- .../exchange/slippage/slippage_test.go | 2 +- .../portfolio/compliance/compliance_test.go | 31 +- .../portfolio/holdings/holdings_test.go | 55 +-- .../eventhandlers/portfolio/portfolio_test.go | 376 ++++++--------- .../eventhandlers/portfolio/risk/risk_test.go | 13 +- .../eventhandlers/portfolio/size/size_test.go | 32 +- .../statistics/currencystatistics_test.go | 28 +- .../statistics/fundingstatistics_test.go | 126 ++--- .../statistics/statistics_test.go | 189 +++----- .../strategies/base/base_test.go | 14 +- .../binancecashandcarry_test.go | 71 +-- .../dollarcostaverage_test.go | 67 +-- .../eventhandlers/strategies/rsi/rsi_test.go | 51 +- .../strategies/strategies_test.go | 25 +- .../top2bottom2/top2bottom2_test.go | 30 +- backtester/funding/funding_test.go | 320 +++++-------- backtester/funding/item_test.go | 38 +- backtester/funding/spotpair_test.go | 96 ++-- .../trackingcurrencies_test.go | 17 +- backtester/plugins/strategies/loader_test.go | 5 +- backtester/report/chart_test.go | 29 +- backtester/report/report_test.go | 54 +-- cmd/exchange_template/wrapper_file.tmpl | 4 +- .../exchange_wrapper_standards_test.go | 2 +- cmd/gctcli/validation.go | 2 +- cmd/websocket_client/main.go | 4 +- common/common.go | 10 +- common/common_test.go | 77 +-- common/convert/convert.go | 14 - common/convert/convert_test.go | 31 -- common/crypto/crypto.go | 8 - common/crypto/crypto_test.go | 85 +--- common/file/archive/zip_test.go | 8 +- common/file/file_test.go | 2 +- communications/slack/slack.go | 2 +- communications/slack/slack_test.go | 67 +-- communications/telegram/telegram.go | 2 +- communications/telegram/telegram_test.go | 45 +- config/config.go | 8 +- config/config_test.go | 12 +- config/versions/v4/v4.go | 4 +- config/versions/v4/v4_test.go | 4 +- config/versions/versions.go | 4 +- config/versions/versions_test.go | 2 +- currency/code_test.go | 7 +- currency/currency_test.go | 10 +- currency/manager_test.go | 58 +-- currency/pair_test.go | 9 +- currency/pairs_test.go | 65 +-- currency/storage_test.go | 2 +- database/database_test.go | 85 ++-- .../datahistoryjob/datahistoryjob_test.go | 73 ++- dispatch/dispatch_test.go | 44 +- engine/apiserver.go | 21 +- engine/apiserver_test.go | 79 ++- engine/communication_manager_test.go | 66 ++- engine/connection_manager_test.go | 51 +- engine/currency_state_manager_test.go | 53 +- engine/database_connection_test.go | 90 ++-- engine/datahistory_manager_test.go | 308 +++++------- engine/depositaddress_test.go | 9 +- engine/engine.go | 2 +- engine/engine_test.go | 28 +- engine/event_manager_test.go | 100 ++-- engine/exchange_manager_test.go | 39 +- engine/helpers.go | 2 +- engine/helpers_test.go | 9 +- engine/ntp_manager_test.go | 69 +-- engine/order_manager_test.go | 168 +++---- engine/portfolio_manager_test.go | 49 +- engine/rpcserver.go | 2 +- engine/rpcserver_test.go | 453 ++++++------------ engine/sync_manager_test.go | 91 ++-- engine/websocketroutine_manager_test.go | 96 ++-- engine/withdraw_manager_test.go | 21 +- exchange/websocket/manager.go | 4 +- exchange/websocket/subscriptions.go | 4 +- exchanges/account/account.go | 4 +- exchanges/account/account_test.go | 9 +- exchanges/account/credentials_test.go | 13 +- exchanges/alert/alert_test.go | 6 +- exchanges/asset/asset_test.go | 20 +- exchanges/binance/binance_live_test.go | 2 +- exchanges/binance/binance_test.go | 110 ++--- exchanges/binance/binance_wrapper.go | 4 +- exchanges/binanceus/binanceus_test.go | 4 +- exchanges/bitfinex/bitfinex_test.go | 53 +- exchanges/bitfinex/bitfinex_websocket.go | 2 +- exchanges/bitfinex/bitfinex_wrapper.go | 8 +- exchanges/bitflyer/bitflyer_test.go | 4 +- exchanges/bithumb/bithumb_test.go | 16 +- exchanges/bitmex/bitmex_test.go | 8 +- exchanges/bitmex/bitmex_wrapper.go | 4 +- exchanges/bitstamp/bitstamp_test.go | 11 +- exchanges/btcmarkets/btcmarkets_test.go | 56 +-- exchanges/btcmarkets/btcmarkets_websocket.go | 2 +- exchanges/btse/btse_test.go | 18 +- exchanges/btse/btse_wrapper.go | 2 +- exchanges/bybit/bybit_test.go | 34 +- exchanges/bybit/bybit_wrapper.go | 4 +- exchanges/coinbasepro/coinbasepro_test.go | 9 +- exchanges/coinut/coinut_test.go | 4 +- exchanges/credentials_test.go | 17 +- .../currencystate/currency_state_test.go | 39 +- exchanges/deribit/deribit_test.go | 6 +- exchanges/deribit/deribit_websocket.go | 2 +- exchanges/deribit/deribit_wrapper.go | 6 +- exchanges/exchange.go | 2 +- exchanges/exchange_test.go | 100 ++-- exchanges/exmo/exmo_test.go | 4 +- exchanges/futures/futures_test.go | 276 ++++------- exchanges/gateio/gateio.go | 4 +- exchanges/gateio/gateio_test.go | 6 +- exchanges/gemini/gemini_test.go | 4 +- exchanges/hitbtc/hitbtc_test.go | 6 +- exchanges/huobi/huobi_test.go | 6 +- exchanges/huobi/huobi_websocket.go | 4 +- exchanges/huobi/huobi_wrapper.go | 4 +- exchanges/kline/kline.go | 2 +- exchanges/kline/kline_test.go | 106 ++-- exchanges/kline/request_test.go | 82 +--- exchanges/kline/technical_analysis_test.go | 70 +-- exchanges/kraken/kraken_test.go | 28 +- exchanges/kraken/kraken_wrapper.go | 4 +- exchanges/kucoin/kucoin_test.go | 18 +- exchanges/kucoin/kucoin_wrapper.go | 2 +- exchanges/okx/helpers.go | 2 +- exchanges/okx/okx.go | 8 +- exchanges/okx/okx_test.go | 103 ++-- exchanges/okx/okx_types.go | 2 +- exchanges/order/limits.go | 2 +- exchanges/order/order_test.go | 4 +- exchanges/order/orders.go | 6 +- exchanges/order/timeinforce_test.go | 2 +- exchanges/orderbook/calculator_test.go | 74 +-- exchanges/orderbook/depth_test.go | 4 +- exchanges/orderbook/orderbook_test.go | 4 +- exchanges/orderbook/tranches_test.go | 13 +- exchanges/poloniex/currency_details_test.go | 29 +- exchanges/poloniex/poloniex_test.go | 22 +- exchanges/request/client_test.go | 33 +- exchanges/request/request_test.go | 25 +- exchanges/subscription/fixtures_test.go | 2 +- exchanges/subscription/subscription_test.go | 4 +- exchanges/ticker/ticker_test.go | 4 +- exchanges/yobit/yobit_test.go | 9 +- gctscript/modules/gct/gct_test.go | 21 +- .../modules/ta/indicators/indicators_test.go | 2 +- internal/testing/exchange/exchange.go | 10 +- internal/testing/websocket/mock.go | 2 +- log/logger_test.go | 43 +- main.go | 2 +- types/number_test.go | 2 +- 165 files changed, 2565 insertions(+), 4626 deletions(-) diff --git a/.github/workflows/misc.yml b/.github/workflows/misc.yml index 0c6ba3f2..b53a2501 100644 --- a/.github/workflows/misc.yml +++ b/.github/workflows/misc.yml @@ -8,6 +8,39 @@ jobs: - uses: actions/checkout@v4 - name: Check for currency.NewPair(BTC, USD) used instead of currency.NewBTCUSD run: | - grep -r -n -E "currency.NewPair\(currency.BTC, currency.USDT?\)" * || exit 0 + grep -r -n --color=always -E "currency.NewPair\(currency.BTC, currency.USDT?\)" * || exit 0 echo "::error::Replace currency.NewPair(BTC, USD*) with currency.NewBTCUSD*()" exit 1 + + - name: Check for missing postfix `f` format func variant for testify assertions + run: | + grep -r -n -P --include="*.go" --color=always '(assert|require)\.[A-Za-z_]\w*?(? 0 { - t.Error("expected no stream") - } + require.NoError(t, err) + assert.Empty(t, bad, "StreamOpen should return an empty slice when no data is set") + err = d.SetStream([]data.Event{ &kline.Kline{ Base: &event.Base{ @@ -238,20 +203,14 @@ func TestStreamOpen(t *testing.T) { Volume: elite, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + require.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + require.NoError(t, err) + open, err := d.StreamOpen() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } - if len(open) == 0 { - t.Error("expected open") - } + require.NoError(t, err) + assert.NotEmpty(t, open, "open should not be empty") } func TestStreamVolume(t *testing.T) { @@ -263,9 +222,8 @@ func TestStreamVolume(t *testing.T) { Base: &data.Base{}, } bad, err := d.StreamVol() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(bad) > 0 { t.Error("expected no stream") } @@ -285,20 +243,14 @@ func TestStreamVolume(t *testing.T) { Volume: elite, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + vol, err := d.StreamVol() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } - if len(vol) == 0 { - t.Error("expected volume") - } + require.NoError(t, err) + assert.NotEmpty(t, vol, "StreamVol should return a non-empty slice") } func TestStreamClose(t *testing.T) { @@ -310,9 +262,8 @@ func TestStreamClose(t *testing.T) { Base: &data.Base{}, } bad, err := d.StreamClose() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(bad) > 0 { t.Error("expected no stream") } @@ -333,20 +284,14 @@ func TestStreamClose(t *testing.T) { Volume: elite, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + cl, err := d.StreamClose() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } - if len(cl) == 0 { - t.Error("expected close") - } + require.NoError(t, err) + assert.NotEmpty(t, cl, "StreamClose should return a non-empty slice") } func TestStreamHigh(t *testing.T) { @@ -358,9 +303,8 @@ func TestStreamHigh(t *testing.T) { Base: &data.Base{}, } bad, err := d.StreamHigh() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(bad) > 0 { t.Error("expected no stream") } @@ -381,17 +325,14 @@ func TestStreamHigh(t *testing.T) { Volume: elite, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + high, err := d.StreamHigh() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(high) == 0 { t.Error("expected high") } @@ -407,9 +348,8 @@ func TestStreamLow(t *testing.T) { RangeHolder: &gctkline.IntervalRangeHolder{}, } bad, err := d.StreamLow() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(bad) > 0 { t.Error("expected no stream") } @@ -430,18 +370,14 @@ func TestStreamLow(t *testing.T) { Volume: elite, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) low, err := d.StreamLow() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(low) == 0 { t.Error("expected low") } diff --git a/backtester/engine/backtest_test.go b/backtester/engine/backtest_test.go index 80c0ee04..539ad3ea 100644 --- a/backtester/engine/backtest_test.go +++ b/backtester/engine/backtest_test.go @@ -11,6 +11,7 @@ import ( "github.com/gofrs/uuid" "github.com/shopspring/decimal" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/config" "github.com/thrasher-corp/gocryptotrader/backtester/data" @@ -55,9 +56,8 @@ var leet = decimal.NewFromInt(1337) func TestSetupFromConfig(t *testing.T) { t.Parallel() bt, err := NewBacktester() - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + require.NoError(t, err) + err = bt.SetupFromConfig(nil, "", "", false) if !errors.Is(err, errNilConfig) { t.Errorf("received %v, expected %v", err, errNilConfig) @@ -132,9 +132,7 @@ func TestSetupFromConfig(t *testing.T) { }, } err = bt.SetupFromConfig(cfg, "", "", false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestLoadDataAPI(t *testing.T) { @@ -377,13 +375,11 @@ func TestLoadDataLive(t *testing.T) { } exch.SetDefaults() err = bt.SetupLiveDataHandler(0, 0, false, false) - if !errors.Is(err, nil) { - t.Fatalf("received: %v, expected: %v", err, nil) - } + require.NoError(t, err) + err = bt.LiveDataHandler.Start() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + b := exch.GetBase() b.CurrencyPairs.Pairs = make(map[asset.Item]*currency.PairStore) b.CurrencyPairs.Pairs[asset.Spot] = ¤cy.PairStore{ @@ -400,22 +396,17 @@ func TestLoadDataLive(t *testing.T) { cfg.DataSettings.Interval = gctkline.OneMin _, err = bt.loadData(cfg, exch, cp, asset.Spot, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = bt.Stop() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestReset(t *testing.T) { t.Parallel() f, err := funding.SetupFundingManager(&engine.ExchangeManager{}, true, false, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + bt := &BackTest{ shutdown: make(chan struct{}), DataHolder: &data.HandlerHolder{}, @@ -428,9 +419,8 @@ func TestReset(t *testing.T) { Funding: f, } err = bt.Reset() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if bt.Funding.IsUsingExchangeLevelFunding() { t.Error("expected false") } @@ -455,35 +445,28 @@ func TestFullCycle(t *testing.T) { BuySide: exchange.MinMax{}, SellSide: exchange.MinMax{}, }, &risk.Risk{}, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + fx := &binance.Binance{} fx.Name = testExchange err = port.SetCurrencySettingsMap(&exchange.Settings{Exchange: fx, Asset: a, Pair: cp}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + f, err := funding.SetupFundingManager(&engine.ExchangeManager{}, false, true, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + b, err := funding.CreateItem(ex, a, cp.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + quote, err := funding.CreateItem(ex, a, cp.Quote, decimal.NewFromInt(1337), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + pair, err := funding.CreatePair(b, quote) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = f.AddPair(pair) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + bt := BackTest{ DataHolder: &data.HandlerHolder{}, Strategy: &dollarcostaverage.Strategy{}, @@ -533,19 +516,14 @@ func TestFullCycle(t *testing.T) { }, } err = k.Load() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = bt.DataHolder.SetDataForCurrency(ex, a, cp, k) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) bt.MetaData.DateLoaded = time.Now() err = bt.Run() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestStop(t *testing.T) { @@ -556,9 +534,8 @@ func TestStop(t *testing.T) { Reports: &fakeReport{}, } err := bt.Stop() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + require.NoError(t, err) + tt := bt.MetaData.DateEnded err = bt.Stop() @@ -590,33 +567,26 @@ func TestFullCycleMulti(t *testing.T) { BuySide: exchange.MinMax{}, SellSide: exchange.MinMax{}, }, &risk.Risk{}, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = port.SetCurrencySettingsMap(&exchange.Settings{Exchange: &binance.Binance{}, Asset: a, Pair: cp}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + f, err := funding.SetupFundingManager(&engine.ExchangeManager{}, false, true, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + b, err := funding.CreateItem(ex, a, cp.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + quote, err := funding.CreateItem(ex, a, cp.Quote, decimal.NewFromInt(1337), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + pair, err := funding.CreatePair(b, quote) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = f.AddPair(pair) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + bt := BackTest{ DataHolder: &data.HandlerHolder{}, Portfolio: port, @@ -630,9 +600,7 @@ func TestFullCycleMulti(t *testing.T) { } bt.Strategy, err = strategies.LoadStrategyByName(dollarcostaverage.Name, true) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + require.NoError(t, err) bt.DataHolder = data.NewHandlerHolder() k := &kline.DataFromKline{ @@ -670,14 +638,10 @@ func TestFullCycleMulti(t *testing.T) { }, } err = k.Load() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = bt.DataHolder.SetDataForCurrency(ex, a, cp, k) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = bt.Run() if !errors.Is(err, errNotSetup) { @@ -686,9 +650,7 @@ func TestFullCycleMulti(t *testing.T) { bt.MetaData.DateLoaded = time.Now() err = bt.Run() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } type portfolioOverride struct { @@ -753,13 +715,11 @@ func TestTriggerLiquidationsForExchange(t *testing.T) { High: leet, Volume: leet, }}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + da := &kline.DataFromKline{ Item: &gctkline.Item{ Exchange: testExchange, @@ -775,9 +735,8 @@ func TestTriggerLiquidationsForExchange(t *testing.T) { bt.EventQueue = &eventholder.Holder{} bt.Funding = &funding.FundManager{} err = bt.DataHolder.SetDataForCurrency(testExchange, a, cp, da) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = bt.Statistic.SetEventForOffset(ev) if !errors.Is(err, expectedError) { t.Errorf("received '%v' expected '%v'", err, expectedError) @@ -1051,14 +1010,11 @@ func TestProcessOrderEvent(t *testing.T) { }, } err = k.Load() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = bt.DataHolder.SetDataForCurrency(testExchange, a, cp, k) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = bt.processOrderEvent(ev, pair) if !errors.Is(err, expectedError) { t.Errorf("received '%v' expected '%v'", err, expectedError) @@ -1092,9 +1048,8 @@ func TestProcessFillEvent(t *testing.T) { }, } err := bt.Statistic.SetEventForOffset(de) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + ev := &fill.Fill{ Base: de.Base, } @@ -1105,21 +1060,16 @@ func TestProcessFillEvent(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + b, err := funding.CreateItem(testExchange, a, cp.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quote, err := funding.CreateItem(testExchange, a, cp.Quote, decimal.NewFromInt(1337), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + pair, err := funding.CreateCollateral(b, quote) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) bt.Exchange.SetExchangeAssetCurrencySettings(a, cp, &exchange.Settings{ Exchange: exch, @@ -1128,9 +1078,8 @@ func TestProcessFillEvent(t *testing.T) { }) ev.Direction = gctorder.Short err = bt.Statistic.SetEventForOffset(ev) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + bt.DataHolder = data.NewHandlerHolder() k := &kline.DataFromKline{ Item: &gctkline.Item{ @@ -1167,18 +1116,13 @@ func TestProcessFillEvent(t *testing.T) { }, } err = k.Load() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = bt.DataHolder.SetDataForCurrency(testExchange, a, cp, k) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = bt.processFillEvent(ev, pair) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestProcessFuturesFillEvent(t *testing.T) { @@ -1216,9 +1160,8 @@ func TestProcessFuturesFillEvent(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + b, err := funding.CreateItem(testExchange, a, cp.Base, decimal.Zero, decimal.Zero) if !errors.Is(err, expectedError) { t.Errorf("received '%v' expected '%v'", err, expectedError) @@ -1280,9 +1223,8 @@ func TestProcessFuturesFillEvent(t *testing.T) { }, } err = k.Load() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + ev.Order = &gctorder.Detail{ Exchange: testExchange, AssetType: ev.AssetType, @@ -1294,9 +1236,8 @@ func TestProcessFuturesFillEvent(t *testing.T) { Date: time.Now(), } err = bt.DataHolder.SetDataForCurrency(testExchange, a, cp, k) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = bt.processFuturesFillEvent(ev, pair) if !errors.Is(err, expectedError) { t.Errorf("received '%v' expected '%v'", err, expectedError) @@ -1306,9 +1247,8 @@ func TestProcessFuturesFillEvent(t *testing.T) { func TestCloseAllPositions(t *testing.T) { t.Parallel() bt, err := NewBacktester() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + pt := &portfolio.Portfolio{} bt.Portfolio = pt bt.Strategy = &dollarcostaverage.Strategy{} @@ -1378,17 +1318,14 @@ func TestCloseAllPositions(t *testing.T) { }, }) err = bt.CloseAllPositions() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestRunLive(t *testing.T) { t.Parallel() bt, err := NewBacktester() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = bt.RunLive() if !errors.Is(err, errLiveOnly) { t.Errorf("received '%v' expected '%v'", err, errLiveOnly) @@ -1408,9 +1345,8 @@ func TestRunLive(t *testing.T) { } bt.LiveDataHandler = dc err = bt.RunLive() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + close(bt.shutdown) bt.wg.Wait() bt.shutdown = make(chan struct{}) @@ -1444,25 +1380,21 @@ func TestRunLive(t *testing.T) { dataType: common.DataCandle, } err = dc.AppendDataSource(setup) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + bt.Reports = &report.Data{} bt.Funding = &fakeFunding{} bt.Statistic = &fakeStats{} dc.started = 0 err = bt.RunLive() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestLiveLoop(t *testing.T) { t.Parallel() bt, err := NewBacktester() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + bt.Reports = &fakeReport{} bt.Funding = &fakeFunding{} bt.Statistic = &fakeStats{} @@ -1479,9 +1411,8 @@ func TestLiveLoop(t *testing.T) { wg.Add(1) go func() { err = bt.liveCheck() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + wg.Done() }() dc.dataUpdated <- true @@ -1494,9 +1425,7 @@ func TestLiveLoop(t *testing.T) { go func() { defer wg.Done() err = bt.liveCheck() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) }() dc.shutdownErr <- true wg.Wait() @@ -1508,9 +1437,7 @@ func TestLiveLoop(t *testing.T) { go func() { defer wg.Done() err = bt.liveCheck() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) }() dc.shutdown <- true wg.Wait() @@ -1521,9 +1448,7 @@ func TestLiveLoop(t *testing.T) { go func() { defer wg.Done() err = bt.liveCheck() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) }() close(bt.shutdown) wg.Wait() @@ -1549,9 +1474,7 @@ func TestSetExchangeCredentials(t *testing.T) { LiveData: ld, } err = setExchangeCredentials(cfg, b) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) ld.RealOrders = true err = setExchangeCredentials(cfg, b) @@ -1581,9 +1504,7 @@ func TestSetExchangeCredentials(t *testing.T) { }, }} err = setExchangeCredentials(cfg, b) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetFees(t *testing.T) { @@ -1608,21 +1529,18 @@ func TestGenerateSummary(t *testing.T) { shutdown: make(chan struct{}), } sum, err := bt.GenerateSummary() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !sum.MetaData.ID.IsNil() { t.Errorf("received '%v' expected '%v'", sum.MetaData.ID, "") } id, err := uuid.NewV4() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + bt.MetaData.ID = id sum, err = bt.GenerateSummary() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if sum.MetaData.ID != id { t.Errorf("received '%v' expected '%v'", sum.MetaData.ID, id) } @@ -1640,17 +1558,15 @@ func TestSetupMetaData(t *testing.T) { shutdown: make(chan struct{}), } err := bt.SetupMetaData() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if bt.MetaData.ID.IsNil() { t.Errorf("received '%v' expected '%v'", bt.MetaData.ID, "an ID") } firstID := bt.MetaData.ID err = bt.SetupMetaData() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if bt.MetaData.ID != firstID { t.Errorf("received '%v' expected '%v'", bt.MetaData.ID, firstID) } @@ -1730,9 +1646,8 @@ func TestEqual(t *testing.T) { } err := bt.SetupMetaData() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + bt2.MetaData = bt.MetaData if !bt.Equal(bt2) { t.Errorf("received '%v' expected '%v'", false, true) @@ -1743,9 +1658,8 @@ func TestEqual(t *testing.T) { } err = bt3.SetupMetaData() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if bt.Equal(bt3) { t.Errorf("received '%v' expected '%v'", true, false) } @@ -1764,9 +1678,7 @@ func TestMatchesID(t *testing.T) { } err := bt.SetupMetaData() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if bt.MatchesID(uuid.Nil) { t.Errorf("received '%v' expected '%v'", true, false) @@ -1805,9 +1717,8 @@ func TestExecuteStrategy(t *testing.T) { t.Errorf("received '%v' expected '%v'", err, errNotSetup) } id, err := uuid.NewV4() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + bt.m.Lock() bt.MetaData.ID = id bt.MetaData.DateLoaded = time.Now() @@ -1819,9 +1730,7 @@ func TestExecuteStrategy(t *testing.T) { } err = bt.Stop() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = bt.ExecuteStrategy(true) if !errors.Is(err, errAlreadyRan) { @@ -1836,9 +1745,7 @@ func TestExecuteStrategy(t *testing.T) { bt.m.Unlock() err = bt.ExecuteStrategy(true) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) bt.m.Lock() bt.MetaData.DateStarted = time.Time{} @@ -1847,9 +1754,7 @@ func TestExecuteStrategy(t *testing.T) { bt.shutdown = make(chan struct{}) bt.m.Unlock() err = bt.ExecuteStrategy(false) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) bt.m.Lock() bt.MetaData.LiveTesting = true @@ -1931,21 +1836,17 @@ func TestProcessSingleDataEvent(t *testing.T) { } f, err := funding.SetupFundingManager(&engine.ExchangeManager{}, false, true, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + b, err := funding.CreateItem(testExchange, a, cp.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quote, err := funding.CreateItem(testExchange, a, cp.Quote, decimal.NewFromInt(1337), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + collateral, err := funding.CreateCollateral(b, quote) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + bt.Funding = f tt := time.Now() bt.DataHolder = data.NewHandlerHolder() @@ -1984,15 +1885,11 @@ func TestProcessSingleDataEvent(t *testing.T) { }, } err = k.Load() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = bt.DataHolder.SetDataForCurrency(testExchange, a, cp, k) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = bt.processSingleDataEvent(ev, collateral) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } diff --git a/backtester/engine/live_test.go b/backtester/engine/live_test.go index a6cf6115..bac936cc 100644 --- a/backtester/engine/live_test.go +++ b/backtester/engine/live_test.go @@ -7,6 +7,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/data" @@ -53,9 +54,7 @@ func TestSetupLiveDataHandler(t *testing.T) { bt.Funding = &funding.FundManager{} err = bt.SetupLiveDataHandler(-1, -1, false, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) dc, ok := bt.LiveDataHandler.(*dataChecker) if !ok { @@ -81,9 +80,8 @@ func TestStart(t *testing.T) { shutdown: make(chan bool), } err := dc.Start() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + close(dc.shutdown) dc.wg.Wait() atomic.CompareAndSwapUint32(&dc.started, 0, 1) @@ -130,9 +128,8 @@ func TestLiveHandlerStop(t *testing.T) { dc.started = 1 err = dc.Stop() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + dc.shutdown = make(chan bool) err = dc.Stop() if !errors.Is(err, engine.ErrSubSystemNotStarted) { @@ -166,9 +163,7 @@ func TestLiveHandlerStopFromError(t *testing.T) { go func() { defer wg.Done() err = dc.SignalStopFromError(errNoCredsNoLive) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) }() wg.Wait() @@ -236,9 +231,8 @@ func TestLiveHandlerReset(t *testing.T) { eventTimeout: 1, } err := dataHandler.Reset() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if dataHandler.eventTimeout != 0 { t.Errorf("received '%v' expected '%v'", dataHandler.eventTimeout, 0) } @@ -289,9 +283,7 @@ func TestAppendDataSource(t *testing.T) { setup.interval = kline.OneDay err = dataHandler.AppendDataSource(setup) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if len(dataHandler.sourcesToCheck) != 1 { t.Errorf("received '%v' expected '%v'", len(dataHandler.sourcesToCheck), 1) @@ -407,9 +399,8 @@ func TestLoadCandleData(t *testing.T) { }, } updated, err := l.loadCandleData(time.Now()) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !updated { t.Errorf("received '%v' expected '%v'", updated, true) } @@ -470,9 +461,7 @@ func TestSetDataForClosingAllPositions(t *testing.T) { } dataHandler.dataHolder = &fakeDataHolder{} _, err = dataHandler.FetchLatestData() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = dataHandler.SetDataForClosingAllPositions() if !errors.Is(err, gctcommon.ErrNilPointer) { @@ -502,9 +491,7 @@ func TestSetDataForClosingAllPositions(t *testing.T) { SellLimit: leet, Amount: leet, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = dataHandler.SetDataForClosingAllPositions(&signal.Signal{ Base: &event.Base{ @@ -525,9 +512,7 @@ func TestSetDataForClosingAllPositions(t *testing.T) { SellLimit: leet, Amount: leet, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) dataHandler = nil err = dataHandler.SetDataForClosingAllPositions() @@ -559,38 +544,26 @@ func TestUpdateFunding(t *testing.T) { ff := &fakeFunding{} d.funding = ff err = d.UpdateFunding(false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = d.UpdateFunding(true) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) d.realOrders = true err = d.UpdateFunding(true) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) ff.hasFutures = true err = d.UpdateFunding(true) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) d.updatingFunding = 1 err = d.UpdateFunding(true) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) d.updatingFunding = 1 err = d.UpdateFunding(false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) d = nil err = d.UpdateFunding(false) diff --git a/backtester/engine/taskmanager_test.go b/backtester/engine/taskmanager_test.go index 0d2c9d5f..2f305bf4 100644 --- a/backtester/engine/taskmanager_test.go +++ b/backtester/engine/taskmanager_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/gofrs/uuid" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/data" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/eventholder" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/statistics" @@ -31,9 +32,8 @@ func TestAddRun(t *testing.T) { bt := &BackTest{} err = rm.AddTask(bt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if bt.MetaData.ID.IsNil() { t.Errorf("received '%v' expected '%v'", bt.MetaData.ID, "a random ID") } @@ -60,9 +60,8 @@ func TestGetSummary(t *testing.T) { t.Parallel() rm := NewTaskManager() id, err := uuid.NewV4() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = rm.GetSummary(id) if !errors.Is(err, errTaskNotFound) { t.Errorf("received '%v' expected '%v'", err, errTaskNotFound) @@ -73,14 +72,11 @@ func TestGetSummary(t *testing.T) { Statistic: &statistics.Statistic{}, } err = rm.AddTask(bt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) sum, err := rm.GetSummary(bt.MetaData.ID) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if sum.MetaData.ID != bt.MetaData.ID { t.Errorf("received '%v' expected '%v'", sum.MetaData.ID, bt.MetaData.ID) } @@ -96,9 +92,8 @@ func TestList(t *testing.T) { t.Parallel() rm := NewTaskManager() list, err := rm.List() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(list) != 0 { t.Errorf("received '%v' expected '%v'", len(list), 0) } @@ -108,14 +103,11 @@ func TestList(t *testing.T) { Statistic: &statistics.Statistic{}, } err = rm.AddTask(bt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) list, err = rm.List() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(list) != 1 { t.Errorf("received '%v' expected '%v'", len(list), 1) } @@ -131,17 +123,15 @@ func TestStopRun(t *testing.T) { t.Parallel() rm := NewTaskManager() list, err := rm.List() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(list) != 0 { t.Errorf("received '%v' expected '%v'", len(list), 0) } id, err := uuid.NewV4() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = rm.StopTask(id) if !errors.Is(err, errTaskNotFound) { t.Errorf("received '%v' expected '%v'", err, errTaskNotFound) @@ -154,9 +144,7 @@ func TestStopRun(t *testing.T) { shutdown: make(chan struct{}), } err = rm.AddTask(bt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = rm.StopTask(bt.MetaData.ID) if !errors.Is(err, errTaskHasNotRan) { @@ -167,9 +155,7 @@ func TestStopRun(t *testing.T) { bt.MetaData.DateStarted = time.Now() bt.m.Unlock() err = rm.StopTask(bt.MetaData.ID) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = rm.StopTask(bt.MetaData.ID) if !errors.Is(err, errAlreadyRan) { @@ -187,9 +173,8 @@ func TestStopAllRuns(t *testing.T) { t.Parallel() rm := NewTaskManager() stoppedRuns, err := rm.StopAllTasks() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(stoppedRuns) != 0 { t.Errorf("received '%v' expected '%v'", len(stoppedRuns), 0) } @@ -201,16 +186,14 @@ func TestStopAllRuns(t *testing.T) { shutdown: make(chan struct{}), } err = rm.AddTask(bt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + bt.m.Lock() bt.MetaData.DateStarted = time.Now() bt.m.Unlock() stoppedRuns, err = rm.StopAllTasks() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(stoppedRuns) != 1 { t.Errorf("received '%v' expected '%v'", len(stoppedRuns), 1) } @@ -226,17 +209,15 @@ func TestStartRun(t *testing.T) { t.Parallel() rm := NewTaskManager() list, err := rm.List() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(list) != 0 { t.Errorf("received '%v' expected '%v'", len(list), 0) } id, err := uuid.NewV4() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = rm.StartTask(id) if !errors.Is(err, errTaskNotFound) { t.Errorf("received '%v' expected '%v'", err, errTaskNotFound) @@ -250,13 +231,10 @@ func TestStartRun(t *testing.T) { shutdown: make(chan struct{}), } err = rm.AddTask(bt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = rm.StartTask(bt.MetaData.ID) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = rm.StartTask(bt.MetaData.ID) if !errors.Is(err, errTaskIsRunning) { @@ -284,9 +262,8 @@ func TestStartAllRuns(t *testing.T) { t.Parallel() rm := NewTaskManager() startedRuns, err := rm.StartAllTasks() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(startedRuns) != 0 { t.Errorf("received '%v' expected '%v'", len(startedRuns), 0) } @@ -299,13 +276,11 @@ func TestStartAllRuns(t *testing.T) { shutdown: make(chan struct{}), } err = rm.AddTask(bt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + startedRuns, err = rm.StartAllTasks() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(startedRuns) != 1 { t.Errorf("received '%v' expected '%v'", len(startedRuns), 1) } @@ -322,9 +297,8 @@ func TestClearRun(t *testing.T) { rm := NewTaskManager() id, err := uuid.NewV4() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = rm.ClearTask(id) if !errors.Is(err, errTaskNotFound) { t.Errorf("received '%v' expected '%v'", err, errTaskNotFound) @@ -338,9 +312,7 @@ func TestClearRun(t *testing.T) { shutdown: make(chan struct{}), } err = rm.AddTask(bt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) bt.m.Lock() bt.MetaData.DateStarted = time.Now() @@ -354,13 +326,11 @@ func TestClearRun(t *testing.T) { bt.MetaData.DateStarted = time.Time{} bt.m.Unlock() err = rm.ClearTask(bt.MetaData.ID) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + list, err := rm.List() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(list) != 0 { t.Errorf("received '%v' expected '%v'", len(list), 0) } @@ -383,9 +353,7 @@ func TestClearAllRuns(t *testing.T) { if len(remainingRuns) != 0 { t.Errorf("received '%v' expected '%v'", len(remainingRuns), 0) } - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) bt := &BackTest{ Strategy: &binancecashandcarry.Strategy{}, @@ -395,9 +363,7 @@ func TestClearAllRuns(t *testing.T) { shutdown: make(chan struct{}), } err = rm.AddTask(bt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) bt.m.Lock() bt.MetaData.DateStarted = time.Now() @@ -409,9 +375,7 @@ func TestClearAllRuns(t *testing.T) { if len(remainingRuns) != 1 { t.Errorf("received '%v' expected '%v'", len(remainingRuns), 1) } - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) bt.m.Lock() bt.MetaData.DateStarted = time.Time{} @@ -423,13 +387,11 @@ func TestClearAllRuns(t *testing.T) { if len(remainingRuns) != 0 { t.Errorf("received '%v' expected '%v'", len(remainingRuns), 0) } - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + list, err := rm.List() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(list) != 0 { t.Errorf("received '%v' expected '%v'", len(list), 0) } diff --git a/backtester/eventhandlers/eventholder/eventholder_test.go b/backtester/eventhandlers/eventholder/eventholder_test.go index 0759b096..0926354a 100644 --- a/backtester/eventhandlers/eventholder/eventholder_test.go +++ b/backtester/eventhandlers/eventholder/eventholder_test.go @@ -4,6 +4,7 @@ import ( "errors" "testing" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/order" gctcommon "github.com/thrasher-corp/gocryptotrader/common" @@ -13,9 +14,8 @@ func TestReset(t *testing.T) { t.Parallel() e := &Holder{Queue: []common.Event{}} err := e.Reset() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if e.Queue != nil { t.Error("expected nil") } diff --git a/backtester/eventhandlers/exchange/exchange_test.go b/backtester/eventhandlers/exchange/exchange_test.go index dacb78af..27b16f72 100644 --- a/backtester/eventhandlers/exchange/exchange_test.go +++ b/backtester/eventhandlers/exchange/exchange_test.go @@ -108,9 +108,8 @@ func TestReset(t *testing.T) { }, } err := e.Reset() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(e.CurrencySettings) > 0 { t.Error("expected no entries") } @@ -139,9 +138,8 @@ func TestSetCurrency(t *testing.T) { } e.SetExchangeAssetCurrencySettings(asset.Spot, currency.NewBTCUSDT(), cs) result, err := e.GetCurrencySettings(testExchange, asset.Spot, currency.NewBTCUSDT()) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if !result.UseRealOrders { t.Error("expected true") } @@ -291,13 +289,11 @@ func TestExecuteOrder(t *testing.T) { Item: item, } err = d.Load() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + _, err = e.ExecuteOrder(o, d, bot.OrderManager, &fakeFund{}) if !errors.Is(err, errNoCurrencySettingsFound) { t.Error(err) @@ -314,16 +310,12 @@ func TestExecuteOrder(t *testing.T) { o.LiquidatingPosition = true _, err = e.ExecuteOrder(o, d, bot.OrderManager, &fakeFund{}) - if !errors.Is(err, nil) { - t.Errorf("received: %v but expected: %v", err, nil) - } + assert.NoError(t, err) o.AssetType = asset.Futures e.CurrencySettings[0].Asset = asset.Futures _, err = e.ExecuteOrder(o, d, bot.OrderManager, &fakeFund{}) - if !errors.Is(err, nil) { - t.Errorf("received: %v but expected: %v", err, nil) - } + assert.NoError(t, err) o.LiquidatingPosition = false o.Amount = decimal.Zero @@ -496,25 +488,22 @@ func TestExecuteOrderBuySellSizeLimit(t *testing.T) { func TestApplySlippageToPrice(t *testing.T) { t.Parallel() resp, err := applySlippageToPrice(gctorder.Buy, decimal.NewFromInt(1), decimal.NewFromFloat(0.9)) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !resp.Equal(decimal.NewFromFloat(1.1)) { t.Errorf("received: %v, expected: %v", resp, decimal.NewFromFloat(1.1)) } resp, err = applySlippageToPrice(gctorder.Sell, decimal.NewFromInt(1), decimal.NewFromFloat(0.9)) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !resp.Equal(decimal.NewFromFloat(0.9)) { t.Errorf("received: %v, expected: %v", resp, decimal.NewFromFloat(0.9)) } resp, err = applySlippageToPrice(gctorder.Sell, decimal.NewFromInt(1), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !resp.Equal(decimal.NewFromFloat(1)) { t.Errorf("received: %v, expected: %v", resp, decimal.NewFromFloat(1)) } @@ -566,9 +555,8 @@ func TestVerifyOrderWithinLimits(t *testing.T) { Direction: gctorder.Buy, } err = verifyOrderWithinLimits(f, decimal.Zero, &Settings{}) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + s := &Settings{ BuySide: MinMax{ MinimumSize: decimal.NewFromInt(1), diff --git a/backtester/eventhandlers/exchange/slippage/slippage_test.go b/backtester/eventhandlers/exchange/slippage/slippage_test.go index 5a7ad0a5..179e0fee 100644 --- a/backtester/eventhandlers/exchange/slippage/slippage_test.go +++ b/backtester/eventhandlers/exchange/slippage/slippage_test.go @@ -33,5 +33,5 @@ func TestCalculateSlippageByOrderbook(t *testing.T) { price, amount, err := CalculateSlippageByOrderbook(ob, gctorder.Buy, amountOfFunds, feeRate) require.NoError(t, err, "CalculateSlippageByOrderbook must not error") orderSize := price.Mul(amount).Add(price.Mul(amount).Mul(feeRate)) - assert.True(t, orderSize.LessThan(amountOfFunds), "order size must be less than funds") + assert.True(t, orderSize.LessThan(amountOfFunds), "order size should be less than funds") } diff --git a/backtester/eventhandlers/portfolio/compliance/compliance_test.go b/backtester/eventhandlers/portfolio/compliance/compliance_test.go index 3002d32b..dd5b8d57 100644 --- a/backtester/eventhandlers/portfolio/compliance/compliance_test.go +++ b/backtester/eventhandlers/portfolio/compliance/compliance_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" gctorder "github.com/thrasher-corp/gocryptotrader/exchanges/order" ) @@ -21,18 +22,16 @@ func TestAddSnapshot(t *testing.T) { err = m.AddSnapshot(&Snapshot{ Timestamp: tt, }, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(m.Snapshots) != 1 { t.Error("expected 1") } err = m.AddSnapshot(&Snapshot{ Timestamp: tt, }, true) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(m.Snapshots) != 1 { t.Error("expected 1") } @@ -54,14 +53,12 @@ func TestGetSnapshotAtTime(t *testing.T) { }, }, }, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + var snappySnap Snapshot snappySnap, err = m.GetSnapshotAtTime(tt) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(snappySnap.Orders) == 0 { t.Fatal("expected an order") } @@ -89,17 +86,15 @@ func TestGetLatestSnapshot(t *testing.T) { err := m.AddSnapshot(&Snapshot{ Timestamp: tt, }, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = m.AddSnapshot(&Snapshot{ Offset: 1, Timestamp: tt.Add(time.Hour), Orders: nil, }, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + snappySnap = m.GetLatestSnapshot() if snappySnap.Timestamp.Equal(tt) { t.Errorf("expected %v", tt.Add(time.Hour)) diff --git a/backtester/eventhandlers/portfolio/holdings/holdings_test.go b/backtester/eventhandlers/portfolio/holdings/holdings_test.go index 958fcfd9..a744bef9 100644 --- a/backtester/eventhandlers/portfolio/holdings/holdings_test.go +++ b/backtester/eventhandlers/portfolio/holdings/holdings_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/event" "github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/fill" @@ -63,16 +64,12 @@ func TestCreate(t *testing.T) { _, err = Create(&fill.Fill{ Base: &event.Base{AssetType: asset.Spot}, }, pair(t)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) _, err = Create(&fill.Fill{ Base: &event.Base{AssetType: asset.Futures}, }, collateral(t)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestUpdate(t *testing.T) { @@ -80,18 +77,16 @@ func TestUpdate(t *testing.T) { h, err := Create(&fill.Fill{ Base: &event.Base{AssetType: asset.Spot}, }, pair(t)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + t1 := h.Timestamp err = h.Update(&fill.Fill{ Base: &event.Base{ Time: time.Now(), }, }, pair(t)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if t1.Equal(h.Timestamp) { t.Errorf("expected '%v' received '%v'", h.Timestamp, t1) } @@ -103,9 +98,7 @@ func TestUpdateValue(t *testing.T) { h, err := Create(&fill.Fill{ Base: b, }, pair(t)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = h.UpdateValue(nil) if !errors.Is(err, gctcommon.ErrNilPointer) { @@ -117,9 +110,8 @@ func TestUpdateValue(t *testing.T) { Base: b, Close: decimal.NewFromInt(1337), }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if !h.BaseValue.Equal(decimal.NewFromInt(1337)) { t.Errorf("expected '%v' received '%v'", h.BaseSize, decimal.NewFromInt(1337)) } @@ -142,9 +134,7 @@ func TestUpdateBuyStats(t *testing.T) { h, err := Create(&fill.Fill{ Base: &event.Base{AssetType: asset.Spot}, }, pair(t)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = h.update(&fill.Fill{ Base: &event.Base{ @@ -176,9 +166,8 @@ func TestUpdateBuyStats(t *testing.T) { Fee: 1, }, }, p) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if !h.BaseSize.Equal(p.BaseAvailable()) { t.Errorf("expected '%v' received '%v'", 1, h.BaseSize) } @@ -231,9 +220,7 @@ func TestUpdateBuyStats(t *testing.T) { Fee: 0.5, }, }, p) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) if !h.BoughtAmount.Equal(decimal.NewFromFloat(1.5)) { t.Errorf("expected '%v' received '%v'", 1, h.BoughtAmount) @@ -264,9 +251,8 @@ func TestUpdateSellStats(t *testing.T) { h, err := Create(&fill.Fill{ Base: &event.Base{AssetType: asset.Spot}, }, p) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = h.update(&fill.Fill{ Base: &event.Base{ Exchange: testExchange, @@ -296,9 +282,8 @@ func TestUpdateSellStats(t *testing.T) { Fee: 1, }, }, p) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if !h.BaseSize.Equal(decimal.NewFromInt(1)) { t.Errorf("expected '%v' received '%v'", 1, h.BaseSize) } @@ -354,9 +339,7 @@ func TestUpdateSellStats(t *testing.T) { Fee: 1, }, }, p) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) if !h.BoughtAmount.Equal(decimal.NewFromInt(1)) { t.Errorf("expected '%v' received '%v'", 1, h.BoughtAmount) diff --git a/backtester/eventhandlers/portfolio/portfolio_test.go b/backtester/eventhandlers/portfolio/portfolio_test.go index 06bba5cd..4fe9cff8 100644 --- a/backtester/eventhandlers/portfolio/portfolio_test.go +++ b/backtester/eventhandlers/portfolio/portfolio_test.go @@ -6,6 +6,8 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/exchange" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio/compliance" @@ -38,9 +40,8 @@ func TestReset(t *testing.T) { exchangeAssetPairPortfolioSettings: make(map[key.ExchangePairAsset]*Settings), } err := p.Reset() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if p.exchangeAssetPairPortfolioSettings == nil { t.Error("expected a map") } @@ -70,9 +71,8 @@ func TestSetup(t *testing.T) { } var p *Portfolio p, err = Setup(&size.Size{}, &risk.Risk{}, decimal.NewFromInt(1)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if !p.riskFreeRate.Equal(decimal.NewFromInt(1)) { t.Error("expected 1") } @@ -104,9 +104,7 @@ func TestSetupCurrencySettingsMap(t *testing.T) { } err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewBTCUSDT()}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestSetHoldings(t *testing.T) { @@ -127,18 +125,7 @@ func TestSetHoldings(t *testing.T) { ff := &binance.Binance{} ff.Name = testExchange err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewBTCUSDT()}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } - err = p.SetHoldingsForTimestamp(&holdings.Holding{ - Exchange: testExchange, - Asset: asset.Spot, - Pair: currency.NewBTCUSDT(), - Timestamp: tt, - }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = p.SetHoldingsForTimestamp(&holdings.Holding{ Exchange: testExchange, @@ -146,9 +133,15 @@ func TestSetHoldings(t *testing.T) { Pair: currency.NewBTCUSDT(), Timestamp: tt, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + + err = p.SetHoldingsForTimestamp(&holdings.Holding{ + Exchange: testExchange, + Asset: asset.Spot, + Pair: currency.NewBTCUSDT(), + Timestamp: tt, + }) + assert.NoError(t, err) } func TestGetLatestHoldingsForAllCurrencies(t *testing.T) { @@ -172,9 +165,8 @@ func TestGetLatestHoldingsForAllCurrencies(t *testing.T) { ff := &binance.Binance{} ff.Name = testExchange err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewBTCUSDT()}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + h = p.GetLatestHoldingsForAllCurrencies() if len(h) != 0 { t.Errorf("received %v, expected %v", len(h), 0) @@ -186,9 +178,8 @@ func TestGetLatestHoldingsForAllCurrencies(t *testing.T) { Pair: currency.NewBTCUSDT(), Timestamp: tt, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + h = p.GetLatestHoldingsForAllCurrencies() if len(h) != 1 { t.Errorf("received %v, expected %v", len(h), 1) @@ -200,9 +191,8 @@ func TestGetLatestHoldingsForAllCurrencies(t *testing.T) { Pair: currency.NewBTCUSDT(), Timestamp: tt, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + h = p.GetLatestHoldingsForAllCurrencies() if len(h) != 1 { t.Errorf("received %v, expected %v", len(h), 1) @@ -229,9 +219,7 @@ func TestViewHoldingAtTimePeriod(t *testing.T) { ff := &binance.Binance{} ff.Name = testExchange err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewBTCUSDT()}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) _, err = p.ViewHoldingAtTimePeriod(s) if !errors.Is(err, errNoHoldings) { @@ -245,9 +233,8 @@ func TestViewHoldingAtTimePeriod(t *testing.T) { Pair: currency.NewBTCUSDT(), Timestamp: tt, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = p.SetHoldingsForTimestamp(&holdings.Holding{ Offset: 2, Exchange: testExchange, @@ -255,9 +242,8 @@ func TestViewHoldingAtTimePeriod(t *testing.T) { Pair: currency.NewBTCUSDT(), Timestamp: tt.Add(time.Hour), }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + var h *holdings.Holding h, err = p.ViewHoldingAtTimePeriod(s) if err != nil { @@ -289,9 +275,7 @@ func TestUpdate(t *testing.T) { t.Fatal(err) } pair, err := funding.CreatePair(bc, qc) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) b := &event.Base{} err = p.UpdateHoldings(&kline.Kline{ @@ -316,9 +300,8 @@ func TestUpdate(t *testing.T) { ff := &binance.Binance{} ff.Name = testExchange err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewBTCUSDT()}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + b.Time = tt b.Exchange = testExchange b.CurrencyPair = currency.NewBTCUSDT() @@ -326,9 +309,7 @@ func TestUpdate(t *testing.T) { err = p.UpdateHoldings(&kline.Kline{ Base: b, }, pair) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestGetComplianceManager(t *testing.T) { @@ -342,14 +323,12 @@ func TestGetComplianceManager(t *testing.T) { ff := &binance.Binance{} ff.Name = testExchange err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewBTCUSDT()}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + var cm *compliance.Manager cm, err = p.getComplianceManager(testExchange, asset.Spot, currency.NewBTCUSDT()) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if cm == nil { t.Error("expected not nil") } @@ -373,9 +352,7 @@ func TestAddComplianceSnapshot(t *testing.T) { ff := &binance.Binance{} ff.Name = testExchange err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewBTCUSDT()}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = p.addComplianceSnapshot(&fill.Fill{ Base: &event.Base{ @@ -389,9 +366,7 @@ func TestAddComplianceSnapshot(t *testing.T) { AssetType: asset.Spot, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestOnFill(t *testing.T) { @@ -421,9 +396,7 @@ func TestOnFill(t *testing.T) { ff := &binance.Binance{} ff.Name = testExchange err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewBTCUSDT()}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) b, err := funding.CreateItem(testExchange, asset.Spot, currency.BTC, decimal.NewFromInt(1), decimal.Zero) if err != nil { @@ -444,15 +417,11 @@ func TestOnFill(t *testing.T) { f.Time = time.Now() _, err = p.OnFill(f, pair) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) f.Direction = gctorder.Buy _, err = p.OnFill(f, pair) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestOnSignal(t *testing.T) { @@ -508,9 +477,8 @@ func TestOnSignal(t *testing.T) { ff := &binance.Binance{} ff.Name = testExchange err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewBTCUSD()}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + b.Exchange = testExchange b.CurrencyPair = currency.NewBTCUSD() b.AssetType = asset.Spot @@ -529,18 +497,15 @@ func TestOnSignal(t *testing.T) { s.Direction = gctorder.Sell _, err = p.OnSignal(s, &exchange.Settings{}, funds) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(resp.Reasons) != 4 { t.Error("expected issue") } s.Direction = gctorder.MissingData _, err = p.OnSignal(s, &exchange.Settings{}, funds) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) s.Direction = gctorder.Buy err = p.SetHoldingsForTimestamp(&holdings.Holding{ @@ -555,13 +520,11 @@ func TestOnSignal(t *testing.T) { } cs := &exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewBTCUSD()} err = p.SetCurrencySettingsMap(cs) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + resp, err = p.OnSignal(s, &exchange.Settings{}, funds) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if resp.Direction != gctorder.CouldNotBuy { t.Errorf("expected common.CouldNotBuy, received %v", resp.Direction) } @@ -570,9 +533,8 @@ func TestOnSignal(t *testing.T) { s.Direction = gctorder.Buy s.Amount = decimal.NewFromInt(1) resp, err = p.OnSignal(s, &exchange.Settings{}, funds) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if resp.Amount.IsZero() { t.Error("expected an amount to be sized") } @@ -586,9 +548,8 @@ func TestOnSignal(t *testing.T) { t.Fatal(err) } collateralFunds, err := funding.CreateCollateral(bc, qc) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + s.AssetType = asset.Futures cs.Asset = asset.Futures @@ -615,9 +576,8 @@ func TestOnSignal(t *testing.T) { CollateralCurrency: currency.USD, OfflineCalculation: true, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = exchangeSettings.FuturesTracker.TrackNewOrder(&gctorder.Detail{ Price: 1337, Amount: 1337, @@ -631,9 +591,8 @@ func TestOnSignal(t *testing.T) { Date: time.Now(), Pair: currency.NewBTCUSD(), }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + s.Direction = gctorder.ClosePosition _, err = p.OnSignal(s, cs, collateralFunds) if !errors.Is(err, errNoPortfolioSettings) { @@ -655,9 +614,8 @@ func TestGetLatestHoldings(t *testing.T) { s.HoldingsSnapshots[tt.UnixNano()] = &holdings.Holding{Timestamp: tt} h, err := s.GetLatestHoldings() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if !h.Timestamp.Equal(tt) { t.Errorf("expected %v, received %v", tt, h.Timestamp) } @@ -677,9 +635,8 @@ func TestGetSnapshotAtTime(t *testing.T) { ff := &binance.Binance{} ff.Name = testExchange err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: cp}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + tt := time.Now() s, ok := p.exchangeAssetPairPortfolioSettings[key.ExchangePairAsset{ Exchange: testExchange, @@ -702,9 +659,8 @@ func TestGetSnapshotAtTime(t *testing.T) { }, }, }, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + b.Exchange = testExchange b.Time = tt b.Interval = gctkline.OneDay @@ -715,9 +671,8 @@ func TestGetSnapshotAtTime(t *testing.T) { } ss, err := p.GetLatestOrderSnapshotForEvent(e) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(ss.Orders) != 1 { t.Fatal("expected 1") } @@ -737,9 +692,8 @@ func TestGetLatestSnapshot(t *testing.T) { ff := &binance.Binance{} ff.Name = testExchange err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: currency.NewPair(currency.XRP, currency.DOGE)}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + s, ok := p.exchangeAssetPairPortfolioSettings[key.ExchangePairAsset{ Exchange: testExchange, Base: cp.Base.Item, @@ -761,13 +715,10 @@ func TestGetLatestSnapshot(t *testing.T) { }, }, }, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + _, err = p.GetLatestOrderSnapshots() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = s.ComplianceManager.AddSnapshot(&compliance.Snapshot{ Orders: []compliance.SnapshotOrder{ @@ -781,14 +732,11 @@ func TestGetLatestSnapshot(t *testing.T) { }, }, }, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) ss, err := p.GetLatestOrderSnapshots() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(ss) != 1 { t.Fatal("expected 1") } @@ -811,9 +759,8 @@ func TestCalculatePNL(t *testing.T) { exch.Name = testExchange a := asset.Futures pair, err := currency.NewPairFromStrings("BTC", "1231") - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = p.SetCurrencySettingsMap(&exchange.Settings{ Exchange: exch, UseRealOrders: false, @@ -853,9 +800,8 @@ func TestCalculatePNL(t *testing.T) { CollateralCurrency: currency.USDT, OfflineCalculation: true, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + s := &Settings{ FuturesTracker: mpt, } @@ -876,9 +822,8 @@ func TestCalculatePNL(t *testing.T) { }, }, }, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + odCp := od.Copy() odCp.Price = od.Price - 1 odCp.Side = gctorder.Long @@ -894,18 +839,13 @@ func TestCalculatePNL(t *testing.T) { }, }, }, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = s.FuturesTracker.TrackNewOrder(od) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = p.UpdatePNL(ev, decimal.NewFromInt(1)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) pos := s.FuturesTracker.GetPositions() if len(pos) != 1 { @@ -962,33 +902,26 @@ func TestTrackFuturesOrder(t *testing.T) { od.OrderID = od.Exchange od.Date = time.Now() contract, err := funding.CreateItem(od.Exchange, od.AssetType, od.Pair.Base, decimal.NewFromInt(9999), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + collateral, err := funding.CreateItem(od.Exchange, od.AssetType, od.Pair.Quote, decimal.NewFromInt(9999), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + err = collateral.IncreaseAvailable(decimal.NewFromInt(9999)) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + err = contract.IncreaseAvailable(decimal.NewFromInt(9999)) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + err = collateral.Reserve(leet) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + err = contract.Reserve(leet) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + collat, err := funding.CreateCollateral(contract, collateral) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + _, err = p.TrackFuturesOrder(&fill.Fill{ Order: od, }, collat) @@ -1064,9 +997,8 @@ func TestGetHoldingsForTime(t *testing.T) { } h, err := s.GetHoldingsForTime(tt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if h.Timestamp.IsZero() && h.Offset != 1337 { t.Error("expected set holdings") } @@ -1135,9 +1067,8 @@ func TestGetLatestPNLForEvent(t *testing.T) { CollateralCurrency: currency.USDT, OfflineCalculation: true, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + s := &Settings{ FuturesTracker: mpt, } @@ -1446,9 +1377,7 @@ func TestCreateLiquidationOrdersForExchange(t *testing.T) { funds := &funding.FundManager{} _, err = p.CreateLiquidationOrdersForExchange(ev, funds) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) ff := &binance.Binance{} ff.Name = testExchange @@ -1458,14 +1387,11 @@ func TestCreateLiquidationOrdersForExchange(t *testing.T) { t.Errorf("received: %v, expected: %v", err, gctcommon.ErrNotYetImplemented) } err = p.SetCurrencySettingsMap(&exchange.Settings{Exchange: ff, Asset: asset.Spot, Pair: cp}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + ev.Exchange = ff.Name _, err = p.CreateLiquidationOrdersForExchange(ev, funds) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) _, err = p.getSettings(ff.Name, asset.Futures, cp) if !errors.Is(err, errNoPortfolioSettings) { @@ -1491,17 +1417,15 @@ func TestCreateLiquidationOrdersForExchange(t *testing.T) { CollateralCurrency: currency.USDT, OfflineCalculation: true, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + settings := &Settings{ FuturesTracker: mpt, } err = settings.FuturesTracker.TrackNewOrder(od) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + p.exchangeAssetPairPortfolioSettings = make(map[key.ExchangePairAsset]*Settings) p.exchangeAssetPairPortfolioSettings[key.ExchangePairAsset{ Exchange: testExchange, @@ -1514,27 +1438,21 @@ func TestCreateLiquidationOrdersForExchange(t *testing.T) { ev.AssetType = asset.Futures ev.CurrencyPair = cp _, err = p.CreateLiquidationOrdersForExchange(ev, funds) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) // spot order item, err := funding.CreateItem(ff.Name, asset.Spot, currency.BTC, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) + err = funds.AddItem(item) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) + err = item.IncreaseAvailable(leet) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) + orders, err := p.CreateLiquidationOrdersForExchange(ev, funds) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) + if len(orders) != 1 { t.Errorf("expected one order generated, received '%v'", len(orders)) } @@ -1572,17 +1490,13 @@ func TestCheckLiquidationStatus(t *testing.T) { item := asset.Futures pair := currency.NewBTCUSDT() contract, err := funding.CreateItem(testExchange, item, pair.Base, decimal.NewFromInt(100), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + collateral, err := funding.CreateItem(testExchange, item, pair.Quote, decimal.NewFromInt(100), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + collat, err := funding.CreateCollateral(contract, collateral) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) err = p.CheckLiquidationStatus(ev, collat, nil) if !errors.Is(err, gctcommon.ErrNilPointer) { @@ -1627,17 +1541,15 @@ func TestCheckLiquidationStatus(t *testing.T) { CollateralCurrency: currency.USDT, OfflineCalculation: true, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + settings := &Settings{ FuturesTracker: mpt, } err = settings.FuturesTracker.TrackNewOrder(od) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + p.exchangeAssetPairPortfolioSettings = make(map[key.ExchangePairAsset]*Settings) p.exchangeAssetPairPortfolioSettings[key.ExchangePairAsset{ Exchange: testExchange, @@ -1646,9 +1558,7 @@ func TestCheckLiquidationStatus(t *testing.T) { Asset: asset.Futures, }] = settings err = p.CheckLiquidationStatus(ev, collat, pnl) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestSetHoldingsForEvent(t *testing.T) { @@ -1660,13 +1570,11 @@ func TestSetHoldingsForEvent(t *testing.T) { } item, err := funding.CreateItem(testExchange, asset.Spot, currency.BTC, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + cp, err := funding.CreatePair(item, item) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = p.SetHoldingsForEvent(cp.FundReader(), nil) if !errors.Is(err, common.ErrNilEvent) { t.Errorf("received '%v', expected '%v'", err, common.ErrNilEvent) @@ -1693,13 +1601,10 @@ func TestSetHoldingsForEvent(t *testing.T) { Pair: ev.Pair(), Asset: ev.AssetType, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = p.SetHoldingsForEvent(cp.FundReader(), ev) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = p.SetHoldingsForTimestamp(&holdings.Holding{ Item: currency.BTC, @@ -1708,11 +1613,8 @@ func TestSetHoldingsForEvent(t *testing.T) { Exchange: ev.Exchange, Timestamp: tt, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = p.SetHoldingsForEvent(cp.FundReader(), ev) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } diff --git a/backtester/eventhandlers/portfolio/risk/risk_test.go b/backtester/eventhandlers/portfolio/risk/risk_test.go index 9107f116..d203e01d 100644 --- a/backtester/eventhandlers/portfolio/risk/risk_test.go +++ b/backtester/eventhandlers/portfolio/risk/risk_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio/compliance" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio/holdings" "github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/event" @@ -91,9 +92,7 @@ func TestEvaluateOrder(t *testing.T) { BaseSize: decimal.NewFromInt(1), }) _, err = r.EvaluateOrder(o, h, compliance.Snapshot{}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) h = append(h, holdings.Holding{ Pair: currency.NewPair(currency.DOGE, currency.USDT), @@ -123,9 +122,7 @@ func TestEvaluateOrder(t *testing.T) { Asset: a, }].MaxLeverageRate = decimal.NewFromInt(33) _, err = r.EvaluateOrder(o, h, compliance.Snapshot{}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) r.MaximumLeverage = decimal.NewFromInt(33) r.CurrencySettings[key.ExchangePairAsset{ @@ -156,9 +153,7 @@ func TestEvaluateOrder(t *testing.T) { Asset: a, }].MaximumHoldingRatio = decimal.NewFromFloat(0.1) _, err = r.EvaluateOrder(o, h, compliance.Snapshot{}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) h = append(h, holdings.Holding{Pair: currency.NewPair(currency.DOGE, currency.LTC), BaseValue: decimal.NewFromInt(1337)}) _, err = r.EvaluateOrder(o, h, compliance.Snapshot{}) diff --git a/backtester/eventhandlers/portfolio/size/size_test.go b/backtester/eventhandlers/portfolio/size/size_test.go index 8f240dd0..a7221c84 100644 --- a/backtester/eventhandlers/portfolio/size/size_test.go +++ b/backtester/eventhandlers/portfolio/size/size_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/exchange" "github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/event" "github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/order" @@ -32,9 +33,8 @@ func TestSizingAccuracy(t *testing.T) { feeRate := decimal.NewFromFloat(0.02) buyLimit := decimal.NewFromInt(1) amountWithoutFee, _, err := sizer.calculateBuySize(price, availableFunds, feeRate, buyLimit, globalMinMax) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + totalWithFee := (price.Mul(amountWithoutFee)).Add(globalMinMax.MaximumTotal.Mul(feeRate)) if !totalWithFee.Equal(globalMinMax.MaximumTotal) { t.Errorf("expected %v received %v", globalMinMax.MaximumTotal, totalWithFee) @@ -56,9 +56,8 @@ func TestSizingOverMaxSize(t *testing.T) { feeRate := decimal.NewFromFloat(0.02) buyLimit := decimal.NewFromInt(1) amount, _, err := sizer.calculateBuySize(price, availableFunds, feeRate, buyLimit, globalMinMax) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if amount.GreaterThan(globalMinMax.MaximumSize) { t.Error("greater than max") } @@ -173,9 +172,8 @@ func TestCalculateSellSize(t *testing.T) { price = decimal.NewFromInt(12) availableFunds = decimal.NewFromInt(1339) amount, fee, err := sizer.calculateSellSize(price, availableFunds, feeRate, sellLimit, globalMinMax) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if !amount.Equal(sellLimit) { t.Errorf("received '%v' expected '%v'", amount, sellLimit) } @@ -221,29 +219,21 @@ func TestSizeOrder(t *testing.T) { s.BuySide.MaximumSize = decimal.NewFromInt(1) s.BuySide.MinimumSize = decimal.NewFromInt(1) _, _, err = s.SizeOrder(o, decimal.NewFromInt(1337), cs) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) o.Amount = decimal.NewFromInt(1) o.Direction = gctorder.Sell _, _, err = s.SizeOrder(o, decimal.NewFromInt(1337), cs) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) s.SellSide.MaximumSize = decimal.NewFromInt(1) s.SellSide.MinimumSize = decimal.NewFromInt(1) _, _, err = s.SizeOrder(o, decimal.NewFromInt(1337), cs) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) o.Direction = gctorder.ClosePosition _, _, err = s.SizeOrder(o, decimal.NewFromInt(1337), cs) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) // spot futures sizing o.FillDependentEvent = &signal.Signal{ diff --git a/backtester/eventhandlers/statistics/currencystatistics_test.go b/backtester/eventhandlers/statistics/currencystatistics_test.go index c8a637bc..80e6eb99 100644 --- a/backtester/eventhandlers/statistics/currencystatistics_test.go +++ b/backtester/eventhandlers/statistics/currencystatistics_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio/compliance" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio/holdings" @@ -124,9 +125,8 @@ func TestCalculateResults(t *testing.T) { cs.Events = append(cs.Events, ev, ev2) err := cs.CalculateResults(decimal.NewFromFloat(0.03)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if !cs.MarketMovement.Equal(decimal.NewFromFloat(-33.15)) { t.Errorf("expected -33.15 received '%v'", cs.MarketMovement) } @@ -144,17 +144,13 @@ func TestCalculateResults(t *testing.T) { Base: even2, } err = cs.CalculateResults(decimal.NewFromFloat(0.03)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) cs.Events[1].DataEvent = &kline.Kline{ Base: even2, } err = cs.CalculateResults(decimal.NewFromFloat(0.03)) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestPrintResults(t *testing.T) { @@ -261,9 +257,8 @@ func TestCalculateHighestCommittedFunds(t *testing.T) { Asset: asset.Spot, } err := c.calculateHighestCommittedFunds() - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if !c.HighestCommittedFunds.Time.IsZero() { t.Error("expected no time with not committed funds") } @@ -276,9 +271,8 @@ func TestCalculateHighestCommittedFunds(t *testing.T) { DataAtOffset{DataEvent: &kline.Kline{Close: decimal.NewFromInt(1339)}, Time: tt3, Holdings: holdings.Holding{Timestamp: tt3, CommittedFunds: decimal.NewFromInt(11), BaseSize: decimal.NewFromInt(11)}}, ) err = c.calculateHighestCommittedFunds() - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if c.HighestCommittedFunds.Time != tt2 { t.Errorf("expected %v, received %v", tt2, c.HighestCommittedFunds.Time) } @@ -286,9 +280,7 @@ func TestCalculateHighestCommittedFunds(t *testing.T) { c.Asset = asset.Futures c.HighestCommittedFunds = ValueAtTime{} err = c.calculateHighestCommittedFunds() - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) c.Asset = asset.Binary err = c.calculateHighestCommittedFunds() diff --git a/backtester/eventhandlers/statistics/fundingstatistics_test.go b/backtester/eventhandlers/statistics/fundingstatistics_test.go index cca396d3..5119343c 100644 --- a/backtester/eventhandlers/statistics/fundingstatistics_test.go +++ b/backtester/eventhandlers/statistics/fundingstatistics_test.go @@ -7,6 +7,7 @@ import ( "github.com/gofrs/uuid" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/data" "github.com/thrasher-corp/gocryptotrader/backtester/data/kline" "github.com/thrasher-corp/gocryptotrader/backtester/funding" @@ -25,26 +26,19 @@ func TestCalculateFundingStatistics(t *testing.T) { t.Errorf("received %v expected %v", err, common.ErrNilPointer) } f, err := funding.SetupFundingManager(&engine.ExchangeManager{}, true, true, false) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + item, err := funding.CreateItem("binance", asset.Spot, currency.BTC, decimal.NewFromInt(1337), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + err = f.AddItem(item) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) item2, err := funding.CreateItem("binance", asset.Spot, currency.USD, decimal.NewFromInt(1337), decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + err = f.AddItem(item2) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) _, err = CalculateFundingStatistics(f, nil, decimal.Zero, gctkline.OneHour) if !errors.Is(err, common.ErrNilPointer) { @@ -70,9 +64,8 @@ func TestCalculateFundingStatistics(t *testing.T) { Item: &usdKline, } err = dfk.Load() - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + err = f.AddUSDTrackingData(dfk) if !errors.Is(err, funding.ErrUSDTrackingDisabled) { t.Errorf("received %v expected %v", err, funding.ErrUSDTrackingDisabled) @@ -80,26 +73,20 @@ func TestCalculateFundingStatistics(t *testing.T) { cs := make(map[key.ExchangePairAsset]*CurrencyPairStatistic) _, err = CalculateFundingStatistics(f, cs, decimal.Zero, gctkline.OneHour) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) f, err = funding.SetupFundingManager(&engine.ExchangeManager{}, true, false, false) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + err = f.AddItem(item) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + err = f.AddItem(item2) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + err = f.AddUSDTrackingData(dfk) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + cs[key.ExchangePairAsset{ Exchange: "binance", Base: currency.LTC.Item, @@ -111,13 +98,11 @@ func TestCalculateFundingStatistics(t *testing.T) { t.Errorf("received %v expected %v", err, errMissingSnapshots) } err = f.CreateSnapshot(usdKline.Candles[0].Time) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + err = f.CreateSnapshot(usdKline.Candles[1].Time) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + cs[key.ExchangePairAsset{ Exchange: "binance", Base: currency.LTC.Item, @@ -125,9 +110,7 @@ func TestCalculateFundingStatistics(t *testing.T) { Asset: asset.Spot, }] = &CurrencyPairStatistic{} _, err = CalculateFundingStatistics(f, cs, decimal.Zero, gctkline.OneHour) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) } func TestCalculateIndividualFundingStatistics(t *testing.T) { @@ -137,9 +120,7 @@ func TestCalculateIndividualFundingStatistics(t *testing.T) { } _, err = CalculateIndividualFundingStatistics(true, &funding.ReportItem{}, nil) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) _, err = CalculateIndividualFundingStatistics(false, &funding.ReportItem{}, nil) if !errors.Is(err, errMissingSnapshots) { @@ -198,25 +179,18 @@ func TestCalculateIndividualFundingStatistics(t *testing.T) { }, } err = ri.USDPairCandle.Load() - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + _, err = CalculateIndividualFundingStatistics(false, ri, rs) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) ri.Asset = asset.Futures _, err = CalculateIndividualFundingStatistics(false, ri, rs) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) ri.IsCollateral = true _, err = CalculateIndividualFundingStatistics(false, ri, rs) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) } func TestFundingStatisticsPrintResults(t *testing.T) { @@ -227,33 +201,25 @@ func TestFundingStatisticsPrintResults(t *testing.T) { } funds, err := funding.SetupFundingManager(&engine.ExchangeManager{}, true, true, false) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + item1, err := funding.CreateItem("test", asset.Spot, currency.BTC, decimal.NewFromInt(1337), decimal.NewFromFloat(0.04)) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + item2, err := funding.CreateItem("test", asset.Spot, currency.LTC, decimal.NewFromInt(1337), decimal.NewFromFloat(0.04)) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + p, err := funding.CreatePair(item1, item2) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + err = funds.AddPair(p) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + f.Report, err = funds.GenerateReport() - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + err = f.PrintResults(false) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) f.TotalUSDStatistics = &TotalFundingStatistics{} f.Report.DisableUSDTracking = false @@ -267,7 +233,5 @@ func TestFundingStatisticsPrintResults(t *testing.T) { ArithmeticRatios: &Ratios{}, } err = f.PrintResults(true) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) } diff --git a/backtester/eventhandlers/statistics/statistics_test.go b/backtester/eventhandlers/statistics/statistics_test.go index 7c5f3fef..bb4651d8 100644 --- a/backtester/eventhandlers/statistics/statistics_test.go +++ b/backtester/eventhandlers/statistics/statistics_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/data" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio" @@ -41,9 +42,8 @@ func TestReset(t *testing.T) { TotalOrders: 1, } err := s.Reset() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if s.TotalOrders != 0 { t.Error("expected 0") } @@ -80,9 +80,8 @@ func TestAddDataEventForTime(t *testing.T) { High: eleet, Volume: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if s.ExchangeAssetPairStatistics == nil { t.Error("expected not nil") } @@ -116,9 +115,8 @@ func TestAddSignalEventForTime(t *testing.T) { err = s.SetEventForOffset(&signal.Signal{ Base: b, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + b.Exchange = exch b.Time = tt b.Interval = gctkline.OneDay @@ -132,17 +130,14 @@ func TestAddSignalEventForTime(t *testing.T) { High: eleet, Volume: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = s.SetEventForOffset(&signal.Signal{ Base: b, ClosePrice: eleet, Direction: gctorder.Buy, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestAddExchangeEventForTime(t *testing.T) { @@ -176,9 +171,8 @@ func TestAddExchangeEventForTime(t *testing.T) { High: eleet, Volume: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = s.SetEventForOffset(&order.Order{ Base: b, ID: "elite", @@ -189,9 +183,7 @@ func TestAddExchangeEventForTime(t *testing.T) { OrderType: gctorder.Stop, Leverage: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestAddFillEventForTime(t *testing.T) { @@ -214,9 +206,7 @@ func TestAddFillEventForTime(t *testing.T) { err = s.SetEventForOffset(&fill.Fill{ Base: b, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) b.Exchange = exch b.Time = tt @@ -232,9 +222,8 @@ func TestAddFillEventForTime(t *testing.T) { High: eleet, Volume: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = s.SetEventForOffset(&fill.Fill{ Base: b, Direction: gctorder.Buy, @@ -245,9 +234,7 @@ func TestAddFillEventForTime(t *testing.T) { ExchangeFee: eleet, Slippage: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestAddHoldingsForTime(t *testing.T) { @@ -281,9 +268,8 @@ func TestAddHoldingsForTime(t *testing.T) { High: eleet, Volume: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = s.AddHoldingsForTime(&holdings.Holding{ Pair: p, Asset: a, @@ -304,9 +290,7 @@ func TestAddHoldingsForTime(t *testing.T) { TotalValueLostToSlippage: eleet, TotalValueLost: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestAddComplianceSnapshotForTime(t *testing.T) { @@ -349,17 +333,14 @@ func TestAddComplianceSnapshotForTime(t *testing.T) { High: eleet, Volume: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = s.AddComplianceSnapshotForTime(&compliance.Snapshot{ Timestamp: tt, }, &fill.Fill{ Base: b, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestSerialise(t *testing.T) { @@ -519,9 +500,7 @@ func TestPrintAllEventsChronologically(t *testing.T) { High: eleet, Volume: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = s.SetEventForOffset(&fill.Fill{ Base: &event.Base{ @@ -539,9 +518,7 @@ func TestPrintAllEventsChronologically(t *testing.T) { ExchangeFee: eleet, Slippage: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = s.SetEventForOffset(&signal.Signal{ Base: &event.Base{ @@ -554,9 +531,7 @@ func TestPrintAllEventsChronologically(t *testing.T) { ClosePrice: eleet, Direction: gctorder.Buy, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) s.PrintAllEventsChronologically() } @@ -594,9 +569,8 @@ func TestCalculateTheResults(t *testing.T) { High: eleet, Volume: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = s.SetEventForOffset(&signal.Signal{ Base: &event.Base{ Exchange: exch, @@ -613,9 +587,8 @@ func TestCalculateTheResults(t *testing.T) { Volume: eleet, Direction: gctorder.Buy, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = s.SetEventForOffset(&kline.Kline{ Base: &event.Base{ Exchange: exch, @@ -631,9 +604,7 @@ func TestCalculateTheResults(t *testing.T) { High: eleeb, Volume: eleeb, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = s.SetEventForOffset(&signal.Signal{ Base: &event.Base{ @@ -651,9 +622,7 @@ func TestCalculateTheResults(t *testing.T) { Volume: eleet, Direction: gctorder.Buy, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = s.SetEventForOffset(&kline.Kline{ Base: &event.Base{ @@ -670,9 +639,8 @@ func TestCalculateTheResults(t *testing.T) { High: eleeb, Volume: eleeb, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = s.SetEventForOffset(&signal.Signal{ Base: &event.Base{ Exchange: exch, @@ -689,9 +657,7 @@ func TestCalculateTheResults(t *testing.T) { Volume: eleeb, Direction: gctorder.Buy, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = s.SetEventForOffset(&kline.Kline{ Base: &event.Base{ @@ -708,9 +674,8 @@ func TestCalculateTheResults(t *testing.T) { High: eleeb, Volume: eleeb, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + signal4 := &signal.Signal{ Base: &event.Base{ Exchange: exch, @@ -728,9 +693,7 @@ func TestCalculateTheResults(t *testing.T) { Direction: gctorder.Buy, } err = s.SetEventForOffset(signal4) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) mapKey1 := key.ExchangePairAsset{ Exchange: exch, @@ -750,42 +713,32 @@ func TestCalculateTheResults(t *testing.T) { s.ExchangeAssetPairStatistics[mapKey2].Events[1].Holdings.TotalValue = eleeet funds, err := funding.SetupFundingManager(&engine.ExchangeManager{}, false, false, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + pBase, err := funding.CreateItem(exch, a, p.Base, eleeet, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + pQuote, err := funding.CreateItem(exch, a, p.Quote, eleeet, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) pair, err := funding.CreatePair(pBase, pQuote) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = funds.AddPair(pair) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + pBase2, err := funding.CreateItem(exch, a, p2.Base, eleeet, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + pQuote2, err := funding.CreateItem(exch, a, p2.Quote, eleeet, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + pair2, err := funding.CreatePair(pBase2, pQuote2) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = funds.AddPair(pair2) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + s.FundManager = funds err = s.CalculateAllResults() if !errors.Is(err, errMissingSnapshots) { @@ -797,17 +750,14 @@ func TestCalculateTheResults(t *testing.T) { } funds, err = funding.SetupFundingManager(&engine.ExchangeManager{}, false, true, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = funds.AddPair(pair) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = funds.AddPair(pair2) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + s.FundManager = funds err = s.CalculateAllResults() if !errors.Is(err, errMissingSnapshots) { @@ -815,9 +765,7 @@ func TestCalculateTheResults(t *testing.T) { } err = s.AddComplianceSnapshotForTime(&compliance.Snapshot{Timestamp: tt2}, signal4) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestCalculateBiggestEventDrawdown(t *testing.T) { @@ -904,9 +852,8 @@ func TestCalculateBiggestEventDrawdown(t *testing.T) { } resp, err := CalculateBiggestEventDrawdown(events) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if resp.Highest.Value != decimal.NewFromInt(1337) && !resp.Lowest.Value.Equal(decimal.NewFromInt(1238)) { t.Error("unexpected max drawdown") } @@ -976,9 +923,7 @@ func TestAddPNLForTime(t *testing.T) { High: eleet, Volume: eleet, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = s.AddPNLForTime(sum) if !errors.Is(err, errCurrencyStatisticsUnset) { @@ -995,7 +940,5 @@ func TestAddPNLForTime(t *testing.T) { sum.Offset = 1 err = s.AddPNLForTime(sum) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) } diff --git a/backtester/eventhandlers/strategies/base/base_test.go b/backtester/eventhandlers/strategies/base/base_test.go index 80675e26..75e67010 100644 --- a/backtester/eventhandlers/strategies/base/base_test.go +++ b/backtester/eventhandlers/strategies/base/base_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/data" datakline "github.com/thrasher-corp/gocryptotrader/backtester/data/kline" @@ -48,22 +49,17 @@ func TestGetBase(t *testing.T) { High: decimal.NewFromInt(1337), Volume: decimal.NewFromInt(1337), }}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + _, err = s.GetBaseData(&datakline.DataFromKline{ Item: &gctkline.Item{}, Base: d, RangeHolder: &gctkline.IntervalRangeHolder{}, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestSetSimultaneousProcessing(t *testing.T) { diff --git a/backtester/eventhandlers/strategies/binancecashandcarry/binancecashandcarry_test.go b/backtester/eventhandlers/strategies/binancecashandcarry/binancecashandcarry_test.go index 9c8fbcc9..8dc0ad3b 100644 --- a/backtester/eventhandlers/strategies/binancecashandcarry/binancecashandcarry_test.go +++ b/backtester/eventhandlers/strategies/binancecashandcarry/binancecashandcarry_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/data" datakline "github.com/thrasher-corp/gocryptotrader/backtester/data/kline" @@ -54,18 +55,15 @@ func TestSetCustomSettings(t *testing.T) { t.Parallel() s := Strategy{} err := s.SetCustomSettings(nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + float14 := float64(14) mappalopalous := make(map[string]any) mappalopalous[openShortDistancePercentageString] = float14 mappalopalous[closeShortDistancePercentageString] = float14 err = s.SetCustomSettings(mappalopalous) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) mappalopalous[openShortDistancePercentageString] = "14" err = s.SetCustomSettings(mappalopalous) @@ -132,13 +130,11 @@ func TestSortSignals(t *testing.T) { High: decimal.NewFromInt(1337), Volume: decimal.NewFromInt(1337), }}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + da := &datakline.DataFromKline{ Item: &gctkline.Item{}, Base: d, @@ -165,22 +161,18 @@ func TestSortSignals(t *testing.T) { High: decimal.NewFromInt(1337), Volume: decimal.NewFromInt(1337), }}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = d2.Next() - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + da2 := &datakline.DataFromKline{ Item: &gctkline.Item{}, Base: d2, RangeHolder: &gctkline.IntervalRangeHolder{}, } _, err = sortSignals([]data.Handler{da, da2}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestCreateSignals(t *testing.T) { @@ -361,14 +353,10 @@ func TestOnSimultaneousSignals(t *testing.T) { High: decimal.NewFromInt(1337), Volume: decimal.NewFromInt(1337), }}) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) signals := []data.Handler{ d, @@ -409,31 +397,26 @@ func TestOnSimultaneousSignals(t *testing.T) { High: decimal.NewFromInt(1337), Volume: decimal.NewFromInt(1337), }}) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) _, err = d2.Next() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + signals = []data.Handler{ d, d2, } resp, err := s.OnSimultaneousSignals(signals, f, p) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if len(resp) != 2 { t.Errorf("received '%v' expected '%v", len(resp), 2) } f.hasBeenLiquidated = true resp, err = s.OnSimultaneousSignals(signals, f, p) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if len(resp) != 2 { t.Fatalf("received '%v' expected '%v", len(resp), 2) } @@ -446,9 +429,8 @@ func TestCloseAllPositions(t *testing.T) { t.Parallel() s := Strategy{} _, err := s.CloseAllPositions(nil, nil) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + leet := decimal.NewFromInt(1337) cp := currency.NewBTCUSD() h := []holdings.Holding{ @@ -511,9 +493,8 @@ func TestCloseAllPositions(t *testing.T) { }, } positionsToClose, err := s.CloseAllPositions(h, p) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if len(positionsToClose) != 2 { t.Errorf("received '%v' expected '%v", len(positionsToClose), 2) } diff --git a/backtester/eventhandlers/strategies/dollarcostaverage/dollarcostaverage_test.go b/backtester/eventhandlers/strategies/dollarcostaverage/dollarcostaverage_test.go index 500be853..dfd8eb45 100644 --- a/backtester/eventhandlers/strategies/dollarcostaverage/dollarcostaverage_test.go +++ b/backtester/eventhandlers/strategies/dollarcostaverage/dollarcostaverage_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/data" "github.com/thrasher-corp/gocryptotrader/backtester/data/kline" @@ -68,13 +69,11 @@ func TestOnSignal(t *testing.T) { High: decimal.NewFromInt(1337), Volume: decimal.NewFromInt(1337), }}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + da := &kline.DataFromKline{ Item: &gctkline.Item{}, Base: d, @@ -82,9 +81,8 @@ func TestOnSignal(t *testing.T) { } var resp signal.Event resp, err = s.OnSignal(da, nil, nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if resp.GetDirection() != gctorder.MissingData { t.Error("expected missing data") } @@ -106,24 +104,18 @@ func TestOnSignal(t *testing.T) { }, } err = da.Load() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) ranger, err := gctkline.CalculateCandleDateRanges(dStart, dEnd, gctkline.OneDay, 100000) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + da.RangeHolder = ranger err = da.RangeHolder.SetHasDataFromCandles(da.Item.Candles) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) resp, err = s.OnSignal(da, nil, nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if resp.GetDirection() != gctorder.Buy { t.Errorf("expected buy, received %v", resp.GetDirection()) } @@ -156,13 +148,11 @@ func TestOnSignals(t *testing.T) { High: decimal.NewFromInt(1337), Volume: decimal.NewFromInt(1337), }}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + da := &kline.DataFromKline{ Item: &gctkline.Item{}, Base: d, @@ -170,9 +160,8 @@ func TestOnSignals(t *testing.T) { } var resp []signal.Event resp, err = s.OnSimultaneousSignals([]data.Handler{da}, nil, nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(resp) != 1 { t.Fatal("expected 1 response") } @@ -197,24 +186,18 @@ func TestOnSignals(t *testing.T) { }, } err = da.Load() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) ranger, err := gctkline.CalculateCandleDateRanges(dStart, dEnd, gctkline.OneDay, 100000) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + da.RangeHolder = ranger err = da.RangeHolder.SetHasDataFromCandles(da.Item.Candles) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) resp, err = s.OnSimultaneousSignals([]data.Handler{da}, nil, nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(resp) != 1 { t.Fatal("expected 1 response") } diff --git a/backtester/eventhandlers/strategies/rsi/rsi_test.go b/backtester/eventhandlers/strategies/rsi/rsi_test.go index 7e5ad180..8dff0f10 100644 --- a/backtester/eventhandlers/strategies/rsi/rsi_test.go +++ b/backtester/eventhandlers/strategies/rsi/rsi_test.go @@ -7,6 +7,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/data" "github.com/thrasher-corp/gocryptotrader/backtester/data/kline" @@ -40,9 +41,8 @@ func TestSetCustomSettings(t *testing.T) { t.Parallel() s := Strategy{} err := s.SetCustomSettings(nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + float14 := float64(14) mappalopalous := make(map[string]any) mappalopalous[rsiPeriodKey] = float14 @@ -50,9 +50,7 @@ func TestSetCustomSettings(t *testing.T) { mappalopalous[rsiHighKey] = float14 err = s.SetCustomSettings(mappalopalous) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) mappalopalous[rsiPeriodKey] = "14" err = s.SetCustomSettings(mappalopalous) @@ -110,13 +108,11 @@ func TestOnSignal(t *testing.T) { High: decimal.NewFromInt(1337), Volume: decimal.NewFromInt(1337), }}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + da := &kline.DataFromKline{ Item: &gctkline.Item{}, Base: d, @@ -130,9 +126,7 @@ func TestOnSignal(t *testing.T) { s.rsiPeriod = decimal.NewFromInt(1) _, err = s.OnSignal(da, nil, nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) da.Item = &gctkline.Item{ Exchange: exch, @@ -151,24 +145,18 @@ func TestOnSignal(t *testing.T) { }, } err = da.Load() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) ranger, err := gctkline.CalculateCandleDateRanges(dStart, dEnd, gctkline.OneDay, 100000) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + da.RangeHolder = ranger err = da.RangeHolder.SetHasDataFromCandles(da.Item.Candles) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) resp, err = s.OnSignal(da, nil, nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if resp.GetDirection() != order.DoNothing { t.Error("expected do nothing") } @@ -200,14 +188,11 @@ func TestOnSignals(t *testing.T) { High: decimal.NewFromInt(1337), Volume: decimal.NewFromInt(1337), }}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + da := &kline.DataFromKline{ Item: &gctkline.Item{}, Base: d, diff --git a/backtester/eventhandlers/strategies/strategies_test.go b/backtester/eventhandlers/strategies/strategies_test.go index 5f199360..dd1cb920 100644 --- a/backtester/eventhandlers/strategies/strategies_test.go +++ b/backtester/eventhandlers/strategies/strategies_test.go @@ -35,31 +35,26 @@ func TestLoadStrategyByName(t *testing.T) { } resp, err = LoadStrategyByName(dollarcostaverage.Name, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if resp.Name() != dollarcostaverage.Name { t.Error("expected dca") } resp, err = LoadStrategyByName(dollarcostaverage.Name, true) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if !resp.UsingSimultaneousProcessing() { t.Error("expected true") } resp, err = LoadStrategyByName(rsi.Name, false) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if resp.Name() != rsi.Name { t.Error("expected rsi") } _, err = LoadStrategyByName(rsi.Name, true) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) } func TestAddStrategy(t *testing.T) { @@ -74,9 +69,7 @@ func TestAddStrategy(t *testing.T) { } err = AddStrategy(new(customStrategy)) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestCreateNewStrategy(t *testing.T) { @@ -94,7 +87,7 @@ func TestCreateNewStrategy(t *testing.T) { // nil Handler var h Handler = (*customStrategy)(nil) _, err = createNewStrategy("custom-strategy", false, h) - assert.ErrorContains(t, err, "must be a non-nil pointer") + assert.ErrorContains(t, err, "be a non-nil pointer") // valid h = new(dollarcostaverage.Strategy) diff --git a/backtester/eventhandlers/strategies/top2bottom2/top2bottom2_test.go b/backtester/eventhandlers/strategies/top2bottom2/top2bottom2_test.go index f0ed6b9f..cddf9b14 100644 --- a/backtester/eventhandlers/strategies/top2bottom2/top2bottom2_test.go +++ b/backtester/eventhandlers/strategies/top2bottom2/top2bottom2_test.go @@ -7,6 +7,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/data" "github.com/thrasher-corp/gocryptotrader/backtester/data/kline" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/strategies/base" @@ -47,9 +48,8 @@ func TestSetCustomSettings(t *testing.T) { t.Parallel() s := Strategy{} err := s.SetCustomSettings(nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + float14 := float64(14) mappalopalous := make(map[string]any) mappalopalous[mfiPeriodKey] = float14 @@ -57,9 +57,7 @@ func TestSetCustomSettings(t *testing.T) { mappalopalous[mfiHighKey] = float14 err = s.SetCustomSettings(mappalopalous) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) mappalopalous[mfiPeriodKey] = "14" err = s.SetCustomSettings(mappalopalous) @@ -123,13 +121,11 @@ func TestOnSignals(t *testing.T) { High: decimal.NewFromInt(1337), Volume: decimal.NewFromInt(1337), }}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = d.Next() - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + da := &kline.DataFromKline{ Item: &gctkline.Item{}, Base: d, @@ -168,9 +164,8 @@ func TestSelectTopAndBottomPerformers(t *testing.T) { s := Strategy{} s.SetDefaults() _, err := s.selectTopAndBottomPerformers(nil, nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + b := &event.Base{} fundEvents := []mfiFundEvent{ { @@ -215,9 +210,8 @@ func TestSelectTopAndBottomPerformers(t *testing.T) { }, } resp, err := s.selectTopAndBottomPerformers(fundEvents, nil) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(resp) != 5 { t.Error("expected 5 events") } diff --git a/backtester/funding/funding_test.go b/backtester/funding/funding_test.go index 827fac67..8d78e027 100644 --- a/backtester/funding/funding_test.go +++ b/backtester/funding/funding_test.go @@ -6,6 +6,8 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/backtester/common" "github.com/thrasher-corp/gocryptotrader/backtester/data" "github.com/thrasher-corp/gocryptotrader/backtester/data/kline" @@ -35,9 +37,8 @@ var ( func TestSetupFundingManager(t *testing.T) { t.Parallel() f, err := SetupFundingManager(&engine.ExchangeManager{}, true, false, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !f.usingExchangeLevelFunding { t.Errorf("expected '%v received '%v'", true, false) } @@ -45,9 +46,8 @@ func TestSetupFundingManager(t *testing.T) { t.Errorf("expected '%v received '%v'", false, true) } f, err = SetupFundingManager(&engine.ExchangeManager{}, false, true, true) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if f.usingExchangeLevelFunding { t.Errorf("expected '%v received '%v'", false, true) } @@ -62,21 +62,17 @@ func TestSetupFundingManager(t *testing.T) { func TestReset(t *testing.T) { t.Parallel() f, err := SetupFundingManager(&engine.ExchangeManager{}, true, false, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + baseItem, err := CreateItem(exchName, a, base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddItem(baseItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.Reset() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if f.usingExchangeLevelFunding { t.Errorf("expected '%v received '%v'", false, true) } @@ -88,9 +84,8 @@ func TestReset(t *testing.T) { func TestIsUsingExchangeLevelFunding(t *testing.T) { t.Parallel() f, err := SetupFundingManager(&engine.ExchangeManager{}, true, false, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !f.IsUsingExchangeLevelFunding() { t.Errorf("expected '%v received '%v'", true, false) } @@ -133,9 +128,8 @@ func TestTransfer(t *testing.T) { item2.exchange = "moto" item2.currency = base err = f.Transfer(elite, item1, item2, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !item2.available.Equal(elite) { t.Errorf("received '%v' expected '%v'", item2.available, elite) } @@ -145,9 +139,8 @@ func TestTransfer(t *testing.T) { item2.transferFee = one err = f.Transfer(elite, item2, item1, true) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !item1.available.Equal(elite.Sub(item2.transferFee)) { t.Errorf("received '%v' expected '%v'", item2.available, elite.Sub(item2.transferFee)) } @@ -157,18 +150,13 @@ func TestAddItem(t *testing.T) { t.Parallel() f := FundManager{} err := f.AddItem(nil) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) baseItem, err := CreateItem(exchName, a, base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddItem(baseItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = f.AddItem(baseItem) if !errors.Is(err, ErrAlreadyExists) { @@ -183,36 +171,28 @@ func TestExists(t *testing.T) { t.Errorf("received '%v' expected '%v'", true, false) } conflictingSingleItem, err := CreateItem(exchName, a, base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddItem(conflictingSingleItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !f.Exists(conflictingSingleItem) { t.Errorf("received '%v' expected '%v'", false, true) } baseItem, err := CreateItem(exchName, a, base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + p, err := CreatePair(baseItem, quoteItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddPair(p) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = f.getFundingForEAP(exchName, a, pair) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) // demonstration that you don't need the original *Items // to check for existence, just matching fields @@ -239,29 +219,23 @@ func TestAddPair(t *testing.T) { t.Parallel() f := FundManager{} baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + p, err := CreatePair(baseItem, quoteItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddPair(p) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = f.getFundingForEAP(exchName, a, pair) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + p, err = CreatePair(baseItem, quoteItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddPair(p) if !errors.Is(err, ErrAlreadyExists) { t.Errorf("received '%v' expected '%v'", err, ErrAlreadyExists) @@ -277,25 +251,19 @@ func TestGetFundingForEvent(t *testing.T) { t.Errorf("received '%v' expected '%v'", err, ErrFundsNotFound) } baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + p, err := CreatePair(baseItem, quoteItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddPair(p) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = f.GetFundingForEvent(e) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetFundingForEAP(t *testing.T) { @@ -306,25 +274,19 @@ func TestGetFundingForEAP(t *testing.T) { t.Errorf("received '%v' expected '%v'", err, ErrFundsNotFound) } baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + p, err := CreatePair(baseItem, quoteItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddPair(p) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = f.getFundingForEAP(exchName, a, pair) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) _, err = CreatePair(baseItem, nil) if !errors.Is(err, gctcommon.ErrNilPointer) { @@ -335,9 +297,8 @@ func TestGetFundingForEAP(t *testing.T) { t.Errorf("received '%v' expected '%v'", err, gctcommon.ErrNilPointer) } p, err = CreatePair(baseItem, quoteItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddPair(p) if !errors.Is(err, ErrAlreadyExists) { t.Errorf("received '%v' expected '%v'", err, ErrAlreadyExists) @@ -348,9 +309,8 @@ func TestGenerateReport(t *testing.T) { t.Parallel() f := FundManager{} report, err := f.GenerateReport() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if report == nil { //nolint:staticcheck,nolintlint // SA5011 Ignore the nil warnings t.Fatal("shouldn't be nil") } @@ -369,9 +329,8 @@ func TestGenerateReport(t *testing.T) { t.Fatal(err) } report, err = f.GenerateReport() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(report.Items) != 1 { t.Fatal("expected 1") } @@ -406,23 +365,18 @@ func TestGenerateReport(t *testing.T) { }, } err = dfk.Load() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddUSDTrackingData(dfk) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + f.items[0].trackingCandles = dfk err = f.CreateSnapshot(dfk.Item.Candles[0].Time) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) report, err = f.GenerateReport() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(report.Items) != 2 { t.Fatal("expected 2") } @@ -469,9 +423,7 @@ func TestCreateSnapshot(t *testing.T) { trackingCandles: dfk, }) err = f.CreateSnapshot(dfk.Item.Candles[0].Time) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestAddUSDTrackingData(t *testing.T) { @@ -502,13 +454,10 @@ func TestAddUSDTrackingData(t *testing.T) { t.Errorf("received '%v' expected '%v'", err, data.ErrInvalidEventSupplied) } quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddItem(quoteItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) f.disableUSDTracking = true err = f.AddUSDTrackingData(dfk) @@ -537,26 +486,19 @@ func TestAddUSDTrackingData(t *testing.T) { }, } err = dfk.Load() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddUSDTrackingData(dfk) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) usdtItem, err := CreateItem(exchName, a, currency.USDT, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddItem(usdtItem) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = f.AddUSDTrackingData(dfk) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestUSDTrackingDisabled(t *testing.T) { @@ -592,9 +534,8 @@ func TestFundingLiquidate(t *testing.T) { CurrencyPair: currency.NewBTCUSDT(), }, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !f.items[0].available.IsZero() { t.Errorf("received '%v' expected '%v'", f.items[0].available, "0") } @@ -621,9 +562,8 @@ func TestHasExchangeBeenLiquidated(t *testing.T) { }, } err = f.Liquidate(ev) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !f.items[0].available.IsZero() { t.Errorf("received '%v' expected '%v'", f.items[0].available, "0") } @@ -636,9 +576,8 @@ func TestGetAllFunding(t *testing.T) { t.Parallel() f := FundManager{} resp, err := f.GetAllFunding() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(resp) != 0 { t.Errorf("received '%v' expected '%v'", len(resp), 0) } @@ -651,9 +590,8 @@ func TestGetAllFunding(t *testing.T) { }) resp, err = f.GetAllFunding() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(resp) != 1 { t.Errorf("received '%v' expected '%v'", len(resp), 1) } @@ -767,9 +705,8 @@ func TestUpdateCollateral(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + f.exchangeManager = em expectedError = nil @@ -820,9 +757,8 @@ func TestLinkCollateralCurrency(t *testing.T) { item.asset = asset.Futures err = f.LinkCollateralCurrency(item, currency.BTC) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if !item.pairedWith.currency.Equal(currency.BTC) { t.Errorf("received '%v', expected '%v'", currency.BTC, item.pairedWith.currency) } @@ -835,9 +771,7 @@ func TestLinkCollateralCurrency(t *testing.T) { f.items = append(f.items, item.pairedWith) item.pairedWith = nil err = f.LinkCollateralCurrency(item, currency.BTC) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestSetFunding(t *testing.T) { @@ -867,9 +801,8 @@ func TestSetFunding(t *testing.T) { bal.Currency = currency.BTC bal.Total = 1337 err = f.SetFunding(exchName, asset.Spot, bal, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(f.items) != 1 { t.Fatalf("received '%v' expected '%v'", len(f.items), 1) } @@ -882,9 +815,8 @@ func TestSetFunding(t *testing.T) { bal.Total = 1338 err = f.SetFunding(exchName, asset.Spot, bal, true) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if !f.items[0].available.Equal(decimal.NewFromFloat(bal.Total)) { t.Errorf("received '%v' expected '%v'", f.items[0].available, bal.Total) } @@ -903,16 +835,13 @@ func TestUpdateFundingFromLiveData(t *testing.T) { f.exchangeManager = engine.NewExchangeManager() err = f.UpdateFundingFromLiveData(false) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) ff := &binance.Binance{} ff.SetDefaults() err = f.exchangeManager.Add(ff) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + err = f.UpdateFundingFromLiveData(false) if !errors.Is(err, exchange.ErrCredentialsAreEmpty) { t.Errorf("received '%v', expected '%v'", err, exchange.ErrCredentialsAreEmpty) @@ -929,14 +858,10 @@ func TestUpdateFundingFromLiveData(t *testing.T) { ff.SetCredentials(apiKey, apiSec, "", subAccount, "", "") err = f.UpdateFundingFromLiveData(true) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = f.UpdateFundingFromLiveData(false) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestUpdateAllCollateral(t *testing.T) { @@ -949,16 +874,13 @@ func TestUpdateAllCollateral(t *testing.T) { f.exchangeManager = engine.NewExchangeManager() err = f.UpdateAllCollateral(false, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) ff := &binance.Binance{} ff.SetDefaults() err = f.exchangeManager.Add(ff) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + err = f.UpdateAllCollateral(false, false) if !errors.Is(err, gctcommon.ErrNotYetImplemented) { t.Errorf("received '%v', expected '%v'", err, gctcommon.ErrNotYetImplemented) @@ -981,9 +903,7 @@ func TestUpdateAllCollateral(t *testing.T) { err = f.items[0].trackingCandles.SetStream([]data.Event{ &fakeEvent{}, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = f.UpdateAllCollateral(false, false) if !errors.Is(err, gctcommon.ErrNotYetImplemented) { @@ -1005,9 +925,7 @@ func TestUpdateAllCollateral(t *testing.T) { } ff.SetCredentials(apiKey, apiSec, "", subAccount, "", "") err = f.UpdateAllCollateral(true, true) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } var leet = decimal.NewFromInt(1337) diff --git a/backtester/funding/item_test.go b/backtester/funding/item_test.go index 82d97158..b5e3f5aa 100644 --- a/backtester/funding/item_test.go +++ b/backtester/funding/item_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/currency" ) @@ -15,13 +16,11 @@ func TestMatchesExchange(t *testing.T) { t.Errorf("received '%v' expected '%v'", true, false) } baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !baseItem.MatchesExchange(quoteItem) { t.Errorf("received '%v' expected '%v'", false, true) } @@ -37,13 +36,11 @@ func TestMatchesItemCurrency(t *testing.T) { t.Errorf("received '%v' expected '%v'", true, false) } baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if baseItem.MatchesItemCurrency(quoteItem) { t.Errorf("received '%v' expected '%v'", true, false) } @@ -72,9 +69,7 @@ func TestReserve(t *testing.T) { i.available = elite err = i.Reserve(elite) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = i.Reserve(elite) if !errors.Is(err, errCannotAllocate) { @@ -91,9 +86,8 @@ func TestIncreaseAvailable(t *testing.T) { t.Parallel() i := Item{} err := i.IncreaseAvailable(elite) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !i.available.Equal(elite) { t.Errorf("expected %v", elite) } @@ -120,15 +114,11 @@ func TestRelease(t *testing.T) { } i.reserved = elite err = i.Release(elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) i.reserved = elite err = i.Release(elite, one) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = i.Release(neg, decimal.Zero) if !errors.Is(err, errZeroAmountReceived) { diff --git a/backtester/funding/spotpair_test.go b/backtester/funding/spotpair_test.go index 33cde86a..aa76d206 100644 --- a/backtester/funding/spotpair_test.go +++ b/backtester/funding/spotpair_test.go @@ -5,19 +5,18 @@ import ( "testing" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" gctorder "github.com/thrasher-corp/gocryptotrader/exchanges/order" ) func TestBaseInitialFunds(t *testing.T) { t.Parallel() baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + baseItem.pairedWith = quoteItem quoteItem.pairedWith = baseItem pairItems := SpotPair{base: baseItem, quote: quoteItem} @@ -30,13 +29,11 @@ func TestBaseInitialFunds(t *testing.T) { func TestQuoteInitialFunds(t *testing.T) { t.Parallel() baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + baseItem.pairedWith = quoteItem quoteItem.pairedWith = baseItem pairItems := SpotPair{base: baseItem, quote: quoteItem} @@ -49,13 +46,11 @@ func TestQuoteInitialFunds(t *testing.T) { func TestBaseAvailable(t *testing.T) { t.Parallel() baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + baseItem.pairedWith = quoteItem quoteItem.pairedWith = baseItem pairItems := SpotPair{base: baseItem, quote: quoteItem} @@ -68,13 +63,11 @@ func TestBaseAvailable(t *testing.T) { func TestQuoteAvailable(t *testing.T) { t.Parallel() baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + baseItem.pairedWith = quoteItem quoteItem.pairedWith = baseItem pairItems := SpotPair{base: baseItem, quote: quoteItem} @@ -87,13 +80,11 @@ func TestQuoteAvailable(t *testing.T) { func TestReservePair(t *testing.T) { t.Parallel() baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + baseItem.pairedWith = quoteItem quoteItem.pairedWith = baseItem pairItems := SpotPair{base: baseItem, quote: quoteItem} @@ -102,9 +93,8 @@ func TestReservePair(t *testing.T) { t.Errorf("received '%v' expected '%v'", err, errZeroAmountReceived) } err = pairItems.Reserve(elite, gctorder.Buy) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = pairItems.Reserve(decimal.Zero, gctorder.Sell) if !errors.Is(err, errZeroAmountReceived) { t.Errorf("received '%v' expected '%v'", err, errZeroAmountReceived) @@ -122,13 +112,11 @@ func TestReservePair(t *testing.T) { func TestReleasePair(t *testing.T) { t.Parallel() baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + baseItem.pairedWith = quoteItem quoteItem.pairedWith = baseItem pairItems := SpotPair{base: baseItem, quote: quoteItem} @@ -137,9 +125,8 @@ func TestReleasePair(t *testing.T) { t.Errorf("received '%v' expected '%v'", err, errZeroAmountReceived) } err = pairItems.Reserve(elite, gctorder.Buy) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = pairItems.Reserve(decimal.Zero, gctorder.Sell) if !errors.Is(err, errZeroAmountReceived) { t.Errorf("received '%v' expected '%v'", err, errZeroAmountReceived) @@ -154,9 +141,8 @@ func TestReleasePair(t *testing.T) { t.Errorf("received '%v' expected '%v'", err, errZeroAmountReceived) } err = pairItems.Release(elite, decimal.Zero, gctorder.Buy) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + err = pairItems.Release(elite, decimal.Zero, gctorder.Buy) if !errors.Is(err, errCannotAllocate) { t.Errorf("received '%v' expected '%v'", err, errCannotAllocate) @@ -180,13 +166,11 @@ func TestReleasePair(t *testing.T) { func TestIncreaseAvailablePair(t *testing.T) { t.Parallel() baseItem, err := CreateItem(exchName, a, pair.Base, decimal.Zero, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + quoteItem, err := CreateItem(exchName, a, pair.Quote, elite, decimal.Zero) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + baseItem.pairedWith = quoteItem quoteItem.pairedWith = baseItem pairItems := SpotPair{base: baseItem, quote: quoteItem} @@ -213,9 +197,8 @@ func TestIncreaseAvailablePair(t *testing.T) { t.Errorf("received '%v' expected '%v'", elite, pairItems.quote.available) } err = pairItems.IncreaseAvailable(elite, gctorder.Buy) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !pairItems.base.available.Equal(elite) { t.Errorf("received '%v' expected '%v'", elite, pairItems.base.available) } @@ -315,9 +298,8 @@ func TestPairReleaser(t *testing.T) { p := &SpotPair{ base: &Item{exchange: "hello"}, } - if _, err := p.PairReleaser(); !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + _, err := p.PairReleaser() + assert.NoError(t, err) } func TestCollateralReleaser(t *testing.T) { diff --git a/backtester/funding/trackingcurrencies/trackingcurrencies_test.go b/backtester/funding/trackingcurrencies/trackingcurrencies_test.go index e9cdbe54..55a37fee 100644 --- a/backtester/funding/trackingcurrencies/trackingcurrencies_test.go +++ b/backtester/funding/trackingcurrencies/trackingcurrencies_test.go @@ -4,6 +4,8 @@ import ( "errors" "testing" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/currency" "github.com/thrasher-corp/gocryptotrader/engine" "github.com/thrasher-corp/gocryptotrader/exchanges/asset" @@ -57,13 +59,11 @@ func TestCreateUSDTrackingPairs(t *testing.T) { eba.AssetEnabled = true err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + resp, err := CreateUSDTrackingPairs([]TrackingPair{s1}, em) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(resp) != 1 { t.Error("expected 1 currency setting as it contains a USDT equiv") } @@ -71,9 +71,8 @@ func TestCreateUSDTrackingPairs(t *testing.T) { s1.Quote = currency.BTC resp, err = CreateUSDTrackingPairs([]TrackingPair{s1}, em) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(resp) != 3 { t.Error("expected 3 currency settings as it did not contain a USDT equiv") } diff --git a/backtester/plugins/strategies/loader_test.go b/backtester/plugins/strategies/loader_test.go index cb19793f..be4a2f26 100644 --- a/backtester/plugins/strategies/loader_test.go +++ b/backtester/plugins/strategies/loader_test.go @@ -4,6 +4,7 @@ import ( "errors" "testing" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/data" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/strategies" @@ -26,9 +27,7 @@ func TestAddStrategies(t *testing.T) { } err = addStrategies([]strategies.Handler{&CustomStrategy{}}) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) } type CustomStrategy struct { diff --git a/backtester/report/chart_test.go b/backtester/report/chart_test.go index 9fe9cfdf..fc133a4c 100644 --- a/backtester/report/chart_test.go +++ b/backtester/report/chart_test.go @@ -6,6 +6,8 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/statistics" evkline "github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/kline" @@ -50,9 +52,8 @@ func TestCreateUSDTotalsChart(t *testing.T) { }, } resp, err := createUSDTotalsChart(items, stats) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) + if len(resp.Data) == 0 { t.Fatal("expected not nil") } @@ -90,9 +91,7 @@ func TestCreateHoldingsOverTimeChart(t *testing.T) { }, } resp, err := createHoldingsOverTimeChart(items) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if !resp.ShowZeroDisclaimer { t.Error("expected ShowZeroDisclaimer") @@ -149,18 +148,13 @@ func TestCreatePNLCharts(t *testing.T) { }, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = d.enhanceCandles() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) _, err = createPNLCharts(d.Statistics.ExchangeAssetPairStatistics) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestCreateFuturesSpotDiffChart(t *testing.T) { @@ -229,9 +223,8 @@ func TestCreateFuturesSpotDiffChart(t *testing.T) { } charty, err := createFuturesSpotDiffChart(d.Statistics.ExchangeAssetPairStatistics) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(charty.Data) == 0 { t.Error("expected data") } diff --git a/backtester/report/report_test.go b/backtester/report/report_test.go index 14be1168..8a7ce340 100644 --- a/backtester/report/report_test.go +++ b/backtester/report/report_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/backtester/config" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio/compliance" "github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/statistics" @@ -326,18 +327,15 @@ func TestEnhanceCandles(t *testing.T) { t.Errorf("received: %v, expected: %v", err, errNoCandles) } err = d.SetKlineData(&gctkline.Item{}) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = d.enhanceCandles() if !errors.Is(err, errStatisticsUnset) { t.Errorf("received: %v, expected: %v", err, errStatisticsUnset) } d.Statistics = &statistics.Statistic{} err = d.enhanceCandles() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) d.Statistics.ExchangeAssetPairStatistics = make(map[key.ExchangePairAsset]*statistics.CurrencyPairStatistic) d.Statistics.ExchangeAssetPairStatistics[key.ExchangePairAsset{ @@ -363,13 +361,10 @@ func TestEnhanceCandles(t *testing.T) { }, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + err = d.enhanceCandles() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = d.SetKlineData(&gctkline.Item{ Exchange: testExchange, @@ -395,14 +390,10 @@ func TestEnhanceCandles(t *testing.T) { }, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) err = d.enhanceCandles() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) d.Statistics.ExchangeAssetPairStatistics[key.ExchangePairAsset{ Exchange: testExchange, @@ -422,9 +413,7 @@ func TestEnhanceCandles(t *testing.T) { Timestamp: tt, } err = d.enhanceCandles() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) d.Statistics.ExchangeAssetPairStatistics[key.ExchangePairAsset{ Exchange: testExchange, @@ -447,9 +436,7 @@ func TestEnhanceCandles(t *testing.T) { Timestamp: tt, } err = d.enhanceCandles() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) d.Statistics.ExchangeAssetPairStatistics[key.ExchangePairAsset{ Exchange: testExchange, @@ -472,9 +459,7 @@ func TestEnhanceCandles(t *testing.T) { Timestamp: tt, } err = d.enhanceCandles() - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) if len(d.EnhancedCandles) == 0 { t.Error("expected enhanced candles") @@ -492,9 +477,8 @@ func TestUpdateItem(t *testing.T) { }, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(d.OriginalCandles) != 1 { t.Fatal("expected Original Candles len of 1") } @@ -508,9 +492,8 @@ func TestUpdateItem(t *testing.T) { }, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(d.OriginalCandles[0].Candles) != 1 { t.Error("expected one candle") } @@ -522,9 +505,8 @@ func TestUpdateItem(t *testing.T) { }, }, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v, expected: %v", err, nil) - } + assert.NoError(t, err) + if len(d.OriginalCandles[0].Candles) != 2 { t.Error("expected two candles") } diff --git a/cmd/exchange_template/wrapper_file.tmpl b/cmd/exchange_template/wrapper_file.tmpl index 0a1c82e1..c541257b 100644 --- a/cmd/exchange_template/wrapper_file.tmpl +++ b/cmd/exchange_template/wrapper_file.tmpl @@ -68,11 +68,11 @@ func ({{.Variable}} *{{.CapitalName}}) SetDefaults() { err = {{.Variable}}.SetAssetPairStore(asset.Spot, fmt1) if err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", {{.Variable}}.Name, asset.Spot, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", {{.Variable}}.Name, asset.Spot, err) } err = {{.Variable}}.SetAssetPairStore(asset.Margin, fmt2) if err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", {{.Variable}}.Name, asset.Margin, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", {{.Variable}}.Name, asset.Margin, err) } // Fill out the capabilities/features that the exchange supports diff --git a/cmd/exchange_wrapper_standards/exchange_wrapper_standards_test.go b/cmd/exchange_wrapper_standards/exchange_wrapper_standards_test.go index 6ccff329..3702ae5a 100644 --- a/cmd/exchange_wrapper_standards/exchange_wrapper_standards_test.go +++ b/cmd/exchange_wrapper_standards/exchange_wrapper_standards_test.go @@ -104,7 +104,7 @@ func setupExchange(ctx context.Context, t *testing.T, name string, cfg *config.C b := exch.GetBase() assets := b.CurrencyPairs.GetAssetTypes(false) - require.NotEmpty(t, assets, "exchange %s must have assets", name) + require.NotEmptyf(t, assets, "exchange %s must have assets", name) for _, a := range assets { require.NoErrorf(t, b.CurrencyPairs.SetAssetEnabled(a, true), "exchange %s SetAssetEnabled must not error for %s", name, a) } diff --git a/cmd/gctcli/validation.go b/cmd/gctcli/validation.go index cbdda6cb..86b9482c 100644 --- a/cmd/gctcli/validation.go +++ b/cmd/gctcli/validation.go @@ -29,7 +29,7 @@ func isFuturesAsset(a string) error { return err } if !i.IsFutures() { - return fmt.Errorf("%w '%s'", futures.ErrNotFuturesAsset, a) + return fmt.Errorf("%w %q", futures.ErrNotFuturesAsset, a) } return nil } diff --git a/cmd/websocket_client/main.go b/cmd/websocket_client/main.go index e15819a6..d3df30bf 100644 --- a/cmd/websocket_client/main.go +++ b/cmd/websocket_client/main.go @@ -85,8 +85,8 @@ func main() { } listenAddr := cfg.RemoteControl.WebsocketRPC.ListenAddress - wsHost := fmt.Sprintf("ws://%s/ws", net.JoinHostPort(common.ExtractHost(listenAddr), - strconv.Itoa(common.ExtractPort(listenAddr)))) + wsHost := fmt.Sprintf("ws://%s/ws", net.JoinHostPort(common.ExtractHostOrDefault(listenAddr), + strconv.Itoa(common.ExtractPortOrDefault(listenAddr)))) log.Printf("Connecting to websocket host: %s", wsHost) var dialer gws.Dialer diff --git a/common/common.go b/common/common.go index 0b5a3c63..fae7a984 100644 --- a/common/common.go +++ b/common/common.go @@ -318,8 +318,9 @@ func EncodeURLValues(urlPath string, values url.Values) string { return u } -// ExtractHost returns the hostname out of a string -func ExtractHost(address string) string { +// ExtractHostOrDefault extracts the hostname from an address string. +// If the host is empty, it defaults to "localhost". +func ExtractHostOrDefault(address string) string { host, _, _ := net.SplitHostPort(address) if host == "" { return "localhost" @@ -327,8 +328,9 @@ func ExtractHost(address string) string { return host } -// ExtractPort returns the port name out of a string -func ExtractPort(host string) int { +// ExtractPortOrDefault returns the port from an address string. +// If the port is empty, it defaults to 80. +func ExtractPortOrDefault(host string) int { _, port, _ := net.SplitHostPort(host) if port == "" { return 80 diff --git a/common/common_test.go b/common/common_test.go index 3e716111..2fe64d29 100644 --- a/common/common_test.go +++ b/common/common_test.go @@ -53,9 +53,7 @@ func TestSendHTTPRequest(t *testing.T) { } err = SetHTTPUserAgent("GCTbot/1337.69 (+http://www.lol.com/)") - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) _, err = SendHTTPRequest(t.Context(), methodDelete, "https://www.google.com", headers, @@ -88,9 +86,7 @@ func TestSetHTTPClientWithTimeout(t *testing.T) { } err = SetHTTPClientWithTimeout(time.Second * 15) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) } func TestSetHTTPUserAgent(t *testing.T) { @@ -101,9 +97,7 @@ func TestSetHTTPUserAgent(t *testing.T) { } err = SetHTTPUserAgent("testy test") - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) } func TestSetHTTPClient(t *testing.T) { @@ -114,9 +108,7 @@ func TestSetHTTPClient(t *testing.T) { } err = SetHTTPClient(new(http.Client)) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) } func TestIsEnabled(t *testing.T) { @@ -227,48 +219,19 @@ func TestEncodeURLValues(t *testing.T) { } } -func TestExtractHost(t *testing.T) { +func TestExtractHostOrDefault(t *testing.T) { t.Parallel() - address := "localhost:1337" - addresstwo := ":1337" - expectedOutput := "localhost" - actualResult := ExtractHost(address) - if expectedOutput != actualResult { - t.Errorf( - "Expected '%s'. Actual '%s'.", expectedOutput, actualResult) - } - actualResultTwo := ExtractHost(addresstwo) - if expectedOutput != actualResultTwo { - t.Errorf( - "Expected '%s'. Actual '%s'.", expectedOutput, actualResult) - } - address = "192.168.1.100:1337" - expectedOutput = "192.168.1.100" - actualResult = ExtractHost(address) - if expectedOutput != actualResult { - t.Errorf( - "Expected '%s'. Actual '%s'.", expectedOutput, actualResult) - } + assert.Equal(t, "localhost", ExtractHostOrDefault("localhost:1337")) + assert.Equal(t, "localhost", ExtractHostOrDefault(":1337")) + assert.Equal(t, "192.168.1.100", ExtractHostOrDefault("192.168.1.100:1337")) } -func TestExtractPort(t *testing.T) { +func TestExtractPortOrDefault(t *testing.T) { t.Parallel() - address := "localhost:1337" - expectedOutput := 1337 - actualResult := ExtractPort(address) - if expectedOutput != actualResult { - t.Errorf( - "Expected '%d'. Actual '%d'.", expectedOutput, actualResult) - } - address = "localhost" - expectedOutput = 80 - actualResult = ExtractPort(address) - if expectedOutput != actualResult { - t.Errorf( - "Expected '%d'. Actual '%d'.", expectedOutput, actualResult) - } + assert.Equal(t, 1337, ExtractPortOrDefault("localhost:1337")) + assert.Equal(t, 80, ExtractPortOrDefault("localhost")) } func TestGetURIPath(t *testing.T) { @@ -280,11 +243,7 @@ func TestGetURIPath(t *testing.T) { "http://www.google.com/accounts?!@#$%;^^": "", } for testInput, expectedOutput := range testTable { - actualOutput := GetURIPath(testInput) - if actualOutput != expectedOutput { - t.Errorf("Expected '%s'. Actual '%s'.", - expectedOutput, actualOutput) - } + assert.Equal(t, expectedOutput, GetURIPath(testInput)) } } @@ -523,7 +482,7 @@ func TestErrors(t *testing.T) { assert.NotErrorIs(t, ExcludeError(err, e5), e5, "e4 should be excluded") // Formatting retention - err = AppendError(e1, fmt.Errorf("%w: Run out of `%s`: %w", e3, "sausages", e5)) + err = AppendError(e1, fmt.Errorf("%w: Run out of %q: %w", e3, "sausages", e5)) assert.ErrorIs(t, err, e1, "Should be an e1") assert.ErrorIs(t, err, e3, "Should be an e3") assert.ErrorIs(t, err, e5, "Should be an e5") @@ -573,9 +532,7 @@ func TestParseStartEndDate(t *testing.T) { } err = StartEndTimeCheck(pt, et) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) } func TestGetAssertError(t *testing.T) { @@ -683,7 +640,7 @@ func TestBatch(t *testing.T) { assert.Len(t, b[3], 1) b[0][0] = 42 - assert.Equal(t, 1, s[0], "Changing the batches must not change the source") + assert.Equal(t, 1, s[0], "Changing the batches should not change the source") require.NotPanics(t, func() { Batch(s, -1) }, "Must not panic on negative batch size") done := make(chan any, 1) @@ -692,7 +649,7 @@ func TestBatch(t *testing.T) { for _, i := range []int{-1, 0, 50} { b = Batch(s, i) - require.Lenf(t, b, 1, "A batch size of %v should produce a single batch", i) + require.Lenf(t, b, 1, "A batch size of %v must produce a single batch", i) assert.Lenf(t, b[0], len(s), "A batch size of %v should produce a single batch", i) } } @@ -742,5 +699,5 @@ func TestNilGuard(t *testing.T) { assert.ErrorIs(t, NilGuard(nil), ErrNilPointer, "Unusual input of an untyped nil should still error correctly") err = NilGuard() - require.NoError(t, err, "NilGuard with no arguments should not panic") + require.NoError(t, err, "NilGuard with no arguments must not error") } diff --git a/common/convert/convert.go b/common/convert/convert.go index 1417fdd2..fc61f5a6 100644 --- a/common/convert/convert.go +++ b/common/convert/convert.go @@ -64,20 +64,6 @@ func TimeFromUnixTimestampDecimal(input float64) time.Time { return time.Unix(int64(i), int64(f*(1e9))).UTC() } -// UnixTimestampToTime returns time.time -func UnixTimestampToTime(timeint64 int64) time.Time { - return time.Unix(timeint64, 0) -} - -// UnixTimestampStrToTime returns a time.time and an error -func UnixTimestampStrToTime(timeStr string) (time.Time, error) { - i, err := strconv.ParseInt(timeStr, 10, 64) - if err != nil { - return time.Time{}, err - } - return time.Unix(i, 0), nil -} - // BoolPtr takes in boolean condition and returns pointer version of it func BoolPtr(condition bool) *bool { b := condition diff --git a/common/convert/convert_test.go b/common/convert/convert_test.go index fd0627f6..d3b5314d 100644 --- a/common/convert/convert_test.go +++ b/common/convert/convert_test.go @@ -111,37 +111,6 @@ func TestTimeFromUnixTimestampDecimal(t *testing.T) { } } -func TestUnixTimestampToTime(t *testing.T) { - t.Parallel() - testTime := int64(1489439831) - tm := time.Unix(testTime, 0) - expectedOutput := "2017-03-13 21:17:11 +0000 UTC" - actualResult := UnixTimestampToTime(testTime) - if tm.String() != actualResult.String() { - t.Errorf( - "Expected '%s'. Actual '%s'.", expectedOutput, actualResult) - } -} - -func TestUnixTimestampStrToTime(t *testing.T) { - t.Parallel() - testTime := "1489439831" - incorrectTime := "DINGDONG" - expectedOutput := "2017-03-13 21:17:11 +0000 UTC" - actualResult, err := UnixTimestampStrToTime(testTime) - if err != nil { - t.Error(err) - } - if actualResult.UTC().String() != expectedOutput { - t.Errorf( - "Expected '%s'. Actual '%s'.", expectedOutput, actualResult) - } - _, err = UnixTimestampStrToTime(incorrectTime) - if err == nil { - t.Error("should throw an error") - } -} - func TestBoolPtr(t *testing.T) { y := BoolPtr(true) if !*y { diff --git a/common/crypto/crypto.go b/common/crypto/crypto.go index f0188e57..e605fea7 100644 --- a/common/crypto/crypto.go +++ b/common/crypto/crypto.go @@ -103,11 +103,3 @@ func GetHMAC(hashType int, input, key []byte) ([]byte, error) { _, err := h.Write(input) return h.Sum(nil), err } - -// Sha1ToHex takes a string, sha1 hashes it and return a hex string of the -// result -func Sha1ToHex(data string) (string, error) { - h := sha1.New() //nolint:gosec // hash function used by some exchanges - _, err := h.Write([]byte(data)) - return hex.EncodeToString(h.Sum(nil)), err -} diff --git a/common/crypto/crypto_test.go b/common/crypto/crypto_test.go index 14c8934e..488e9e60 100644 --- a/common/crypto/crypto_test.go +++ b/common/crypto/crypto_test.go @@ -2,86 +2,56 @@ package crypto import ( "bytes" + "encoding/hex" "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestHexEncodeToString(t *testing.T) { t.Parallel() - originalInput := []byte("string") - expectedOutput := "737472696e67" - actualResult := HexEncodeToString(originalInput) - if actualResult != expectedOutput { - t.Errorf("Expected '%s'. Actual '%s'", - expectedOutput, actualResult) - } + assert.Equal(t, "737472696e67", HexEncodeToString([]byte("string"))) } func TestBase64Decode(t *testing.T) { t.Parallel() - originalInput := "aGVsbG8=" - expectedOutput := []byte("hello") - actualResult, err := Base64Decode(originalInput) - if !bytes.Equal(actualResult, expectedOutput) { - t.Errorf("Expected '%s'. Actual '%s'. Error: %s", - expectedOutput, actualResult, err) - } + + r, err := Base64Decode("aGVsbG8=") + require.NoError(t, err, "Base64Decode must not error") + assert.Equal(t, []byte("hello"), r, "Base64Decode should return the correct byte slice") _, err = Base64Decode("-") - if err == nil { - t.Error("Bad base64 string failed returned nil error") - } + assert.Error(t, err, "Base64Decode should error on invalid input") } func TestBase64Encode(t *testing.T) { t.Parallel() - originalInput := []byte("hello") - actualResult := Base64Encode(originalInput) - if expectedOutput := "aGVsbG8="; actualResult != expectedOutput { - t.Errorf("Expected '%s'. Actual '%s'", - expectedOutput, actualResult) - } + + assert.Equal(t, "aGVsbG8=", Base64Encode([]byte("hello")), + "Base64Encode should return the correct base64 string") } func TestGetRandomSalt(t *testing.T) { t.Parallel() _, err := GetRandomSalt(nil, -1) - if err == nil { - t.Fatal("Expected err on negative salt length") - } + assert.ErrorContains(t, err, "salt length is too small", "Expected error on negative salt length") salt, err := GetRandomSalt(nil, 10) - if err != nil { - t.Fatal(err) - } - - if len(salt) != 10 { - t.Fatal("Expected salt of len=10") - } + require.NoError(t, err, "GetRandomSalt must not error") + assert.Len(t, salt, 10, "GetRandomSalt should return a salt of the specified length") salt, err = GetRandomSalt([]byte("RAWR"), 12) - if err != nil { - t.Fatal(err) - } - - if len(salt) != 16 { - t.Fatal("Expected salt of len=16") - } + require.NoError(t, err, "GetRandomSalt must not error") + assert.Len(t, salt, 16, "GetRandomSalt should return a salt of the specified length plus input length") } func TestGetMD5(t *testing.T) { t.Parallel() - originalString := []byte("I am testing the MD5 function in common!") - expectedOutput := []byte("18fddf4a41ba90a7352765e62e7a8744") - actualOutput, err := GetMD5(originalString) - if err != nil { - t.Fatal(err) - } - actualStr := HexEncodeToString(actualOutput) - if !bytes.Equal(expectedOutput, []byte(actualStr)) { - t.Errorf("Expected '%s'. Actual '%s'", - expectedOutput, []byte(actualStr)) - } + r, err := GetMD5([]byte("I am testing the MD5 function in common!")) + require.NoError(t, err, "GetMD5 must not error") + assert.Equal(t, "18fddf4a41ba90a7352765e62e7a8744", hex.EncodeToString(r), "GetMD5 result should match the expected output") } func TestGetSHA512(t *testing.T) { @@ -190,16 +160,3 @@ func TestGetHMAC(t *testing.T) { ) } } - -func TestSha1Tohex(t *testing.T) { - t.Parallel() - expectedResult := "fcfbfcd7d31d994ef660f6972399ab5d7a890149" - actualResult, err := Sha1ToHex("Testing Sha1ToHex") - if err != nil { - t.Fatal(err) - } - if actualResult != expectedResult { - t.Errorf("Expected '%s'. Actual '%s'", - expectedResult, actualResult) - } -} diff --git a/common/file/archive/zip_test.go b/common/file/archive/zip_test.go index 466338e5..3c7d5473 100644 --- a/common/file/archive/zip_test.go +++ b/common/file/archive/zip_test.go @@ -39,17 +39,17 @@ func TestZip(t *testing.T) { tempDir := t.TempDir() outFile := filepath.Join(tempDir, "out.zip") err := Zip(filepath.Join("..", "..", "..", "testdata", "configtest.json"), outFile) - require.NoError(t, err, "Zip should not error") + require.NoError(t, err, "Zip must not error") o, err := UnZip(outFile, tempDir) - require.NoError(t, err, "UnZip should not error") + require.NoError(t, err, "UnZip must not error") assert.Len(t, o, 1, "Should extract 1 file") folder := filepath.Join("..", "..", "..", "testdata", "gctscript") outFolderZip := filepath.Join(tempDir, "out_folder.zip") err = Zip(folder, outFolderZip) - require.NoError(t, err, "Zip should not error") + require.NoError(t, err, "Zip must not error") o, err = UnZip(outFolderZip, tempDir) - require.NoError(t, err, "UnZip should not error") + require.NoError(t, err, "UnZip must not error") var found bool for i := range o { if filepath.Base(o[i]) == "timer.gct" { diff --git a/common/file/file_test.go b/common/file/file_test.go index 15ebe6de..8e4d3928 100644 --- a/common/file/file_test.go +++ b/common/file/file_test.go @@ -265,7 +265,7 @@ func TestWriterNoPermissionFails(t *testing.T) { tempDir := t.TempDir() err := os.Chmod(tempDir, 0o555) - require.NoError(t, err, "Chmod should not fail to set read-only permissions") + require.NoError(t, err, "Chmod must not fail to set read-only permissions") _, err = Writer(filepath.Join(tempDir, "path", "to", "somefile")) assert.Error(t, err, "Writer should fail with no write permissions") } diff --git a/communications/slack/slack.go b/communications/slack/slack.go index f7d6c89c..1f4f6057 100644 --- a/communications/slack/slack.go +++ b/communications/slack/slack.go @@ -314,7 +314,7 @@ func (s *Slack) handleErrorResponse(data WebsocketResponse) error { s.Connected = false return s.NewConnection() } - return fmt.Errorf("unknown error '%s'", data.Error.Msg) + return fmt.Errorf("unknown error %q", data.Error.Msg) } func (s *Slack) handleHelloResponse() { diff --git a/communications/slack/slack_test.go b/communications/slack/slack_test.go index 6bc00da6..9bd8b6c4 100644 --- a/communications/slack/slack_test.go +++ b/communications/slack/slack_test.go @@ -3,6 +3,8 @@ package slack import ( "testing" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/communications/base" "github.com/thrasher-corp/gocryptotrader/config" "github.com/thrasher-corp/gocryptotrader/encoding/json" @@ -98,47 +100,40 @@ func TestGetIDByName(t *testing.T) { t.Parallel() var s Slack id, err := s.GetIDByName("batman") - if err == nil || id != "" { - t.Error("slack GetIDByName() error") - } - + require.Error(t, err, "GetIDByName must return an error for non-existent name") + assert.Empty(t, id, "GetIDByName should return an empty string for non-existent name") s.Details.Groups = append(s.Details.Groups, group{ Name: "this is a group", ID: "210314", }) id, err = s.GetIDByName("this is a group") - if err != nil || id != "210314" { - t.Errorf("slack GetIDByName() Expected '210314' Actual '%s' Error: %s", - id, err) - } + + require.NoError(t, err, "GetIDByName must not return an error for existing name") + assert.Equal(t, "210314", id, "GetIDByName should return the correct ID for existing name") } func TestGetGroupIDByName(t *testing.T) { t.Parallel() var s Slack id, err := s.GetGroupIDByName("batman") - if err == nil || id != "" { - t.Error("slack GetGroupIDByName() error") - } + require.Error(t, err, "GetGroupIDByName must return an error for non-existent group name") + assert.Empty(t, id, "GetGroupIDByName should return an empty string for non-existent group name") s.Details.Groups = append(s.Details.Groups, group{ Name: "another group", ID: "11223344", }) id, err = s.GetGroupIDByName("another group") - if err != nil || id != "11223344" { - t.Errorf("slack GetGroupIDByName() Expected '11223344' Actual '%s' Error: %s", - id, err) - } + require.NoError(t, err, "GetGroupIDByName must not return an error for existing group name") + assert.Equal(t, "11223344", id, "GetGroupIDByName should return the correct ID for existing group name") } func TestGetChannelIDByName(t *testing.T) { t.Parallel() var s Slack id, err := s.GetChannelIDByName("1337") - if err == nil || id != "" { - t.Error("slack GetChannelIDByName() error") - } + require.Error(t, err, "GetChannelIDByName must return an error for non-existent channel name") + assert.Empty(t, id, "GetChannelIDByName should return an empty string for non-existent channel name") s.Details.Channels = append(s.Details.Channels, struct { ID string `json:"id"` @@ -151,19 +146,14 @@ func TestGetChannelIDByName(t *testing.T) { }) id, err = s.GetChannelIDByName("Slack Test") - if err != nil || id != "2048" { - t.Errorf("slack GetChannelIDByName() Expected '2048' Actual '%s' Error: %s", - id, err) - } + require.NoError(t, err, "GetChannelIDByName must not return an error for existing channel name") + assert.Equal(t, "2048", id, "GetChannelIDByName should return the correct ID for existing channel name") } func TestGetUsersInGroup(t *testing.T) { t.Parallel() var s Slack - username := s.GetUsersInGroup("supergroup") - if len(username) != 0 { - t.Error("slack GetUsersInGroup() error") - } + assert.Empty(t, s.GetUsersInGroup("supergroup"), "GetUsersInGroup should return an empty slice") s.Details.Groups = append(s.Details.Groups, group{ Name: "three guys", @@ -171,11 +161,7 @@ func TestGetUsersInGroup(t *testing.T) { Members: []string{"Guy one", "Guy two", "Guy three"}, }) - username = s.GetUsersInGroup("three guys") - if len(username) != 3 { - t.Errorf("slack GetUsersInGroup() Expected '3' Actual '%s'", - username) - } + assert.Len(t, s.GetUsersInGroup("three guys"), 3) } func TestNewConnection(t *testing.T) { @@ -286,25 +272,20 @@ func TestHandleReconnectResponse(t *testing.T) { t.Parallel() var s Slack err := s.handleReconnectResponse([]byte(`{"malformedjson}`)) - if err == nil { - t.Error("slack handleReconnectResponse(), unmarshalled malformed json") - } + assert.Error(t, err, "handleReconnectResponse should error on malformed JSON") - var testURL struct { + testURL := struct { URL string `json:"url"` + }{ + URL: "https://www.thrasher.io", } - testURL.URL = "https://www.thrasher.io" data, err := json.Marshal(testURL) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err, "json.Marshal must not error") err = s.handleReconnectResponse(data) - if err != nil || s.ReconnectURL != "https://www.thrasher.io" { - t.Errorf("slack handleReconnectResponse() Expected 'https://www.thrasher.io' Actual '%s' Error: %s", - s.ReconnectURL, err) - } + require.NoError(t, err, "handleReconnectResponse must not error") + assert.Equal(t, "https://www.thrasher.io", s.ReconnectURL) } func TestWebsocketSend(t *testing.T) { diff --git a/communications/telegram/telegram.go b/communications/telegram/telegram.go index ad51cff5..141feb5e 100644 --- a/communications/telegram/telegram.go +++ b/communications/telegram/telegram.go @@ -268,7 +268,7 @@ func (t *Telegram) SendMessage(text string, chatID int64) error { } if t.Verbose { - log.Debugf(log.CommunicationMgr, "Telegram: Sent '%s'\n", text) + log.Debugf(log.CommunicationMgr, "Telegram: Sent %q\n", text) } return nil } diff --git a/communications/telegram/telegram_test.go b/communications/telegram/telegram_test.go index af08406d..e147c85d 100644 --- a/communications/telegram/telegram_test.go +++ b/communications/telegram/telegram_test.go @@ -1,9 +1,9 @@ package telegram import ( - "errors" "testing" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/communications/base" "github.com/thrasher-corp/gocryptotrader/config" ) @@ -47,48 +47,24 @@ func TestPushEvent(t *testing.T) { t.Parallel() var T Telegram err := T.PushEvent(base.Event{}) - if !errors.Is(err, ErrNotConnected) { - t.Errorf("expected %s, got %s", ErrNotConnected, err) - } + assert.ErrorIs(t, err, ErrNotConnected) T.Connected = true T.AuthorisedClients = map[string]int64{"sender": 0} err = T.PushEvent(base.Event{}) - if err != nil { - t.Errorf("expected nil, got %s", err) - } + assert.NoError(t, err, "PushEvent should not error") T.AuthorisedClients = map[string]int64{"sender": 1337} err = T.PushEvent(base.Event{}) - if err.Error() != testErrNotFound { - t.Errorf("telegram PushEvent() error, expected 'Not found' got '%s'", - err) - } + assert.ErrorContains(t, err, testErrNotFound) } func TestHandleMessages(t *testing.T) { t.Parallel() var T Telegram - chatID := int64(1337) - err := T.HandleMessages(cmdHelp, chatID) - if err.Error() != testErrNotFound { - t.Errorf("telegram HandleMessages() error, expected 'Not found' got '%s'", - err) - } - err = T.HandleMessages(cmdStart, chatID) - if err.Error() != testErrNotFound { - t.Errorf("telegram HandleMessages() error, expected 'Not found' got '%s'", - err) - } - err = T.HandleMessages(cmdStatus, chatID) - if err.Error() != testErrNotFound { - t.Errorf("telegram HandleMessages() error, expected 'Not found' got '%s'", - err) - } - err = T.HandleMessages("Not a command", chatID) - if err.Error() != testErrNotFound { - t.Errorf("telegram HandleMessages() error, expected 'Not found' got '%s'", - err) + for _, c := range []string{cmdHelp, cmdStart, cmdStatus, "Not a command"} { + assert.ErrorContainsf(t, T.HandleMessages(c, 1337), testErrNotFound, + "HandleMessages with command %q should error correctly", c) } } @@ -111,11 +87,8 @@ func TestTestConnection(t *testing.T) { func TestSendMessage(t *testing.T) { t.Parallel() var T Telegram - err := T.SendMessage("Test message", int64(1337)) - if err.Error() != testErrNotFound { - t.Errorf("telegram SendMessage() error, expected 'Not found' got '%s'", - err) - } + err := T.SendMessage("Test message", 1337) + assert.ErrorContains(t, err, testErrNotFound, "SendMessage should error correctly") } func TestSendHTTPRequest(t *testing.T) { diff --git a/config/config.go b/config/config.go index 4bf5be05..38586137 100644 --- a/config/config.go +++ b/config/config.go @@ -946,7 +946,7 @@ func (c *Config) CheckExchangeConfigValues() error { } if !e.Features.Supports.RESTCapabilities.AutoPairUpdates && !e.Features.Supports.WebsocketCapabilities.AutoPairUpdates { - lastUpdated := convert.UnixTimestampToTime(e.CurrencyPairs.LastUpdated) + lastUpdated := time.Unix(e.CurrencyPairs.LastUpdated, 0) lastUpdated = lastUpdated.AddDate(0, 0, pairsLastUpdatedWarningThreshold) if lastUpdated.Unix() <= time.Now().Unix() { log.Warnf(log.ConfigMgr, @@ -1424,7 +1424,7 @@ func migrateConfig(configFile, targetDir string) (string, error) { return configFile, nil } if file.Exists(target) { - log.Warnf(log.ConfigMgr, "config file already found in '%s'; not overwriting, defaulting to %s", target, configFile) + log.Warnf(log.ConfigMgr, "Config file already found in %q; not overwriting, defaulting to %s", target, configFile) return configFile, nil } @@ -1587,8 +1587,8 @@ func (c *Config) CheckRemoteControlConfig() { defer m.Unlock() if c.Webserver != nil { - port := common.ExtractPort(c.Webserver.ListenAddress) - host := common.ExtractHost(c.Webserver.ListenAddress) + port := common.ExtractPortOrDefault(c.Webserver.ListenAddress) + host := common.ExtractHostOrDefault(c.Webserver.ListenAddress) c.RemoteControl = RemoteControlConfig{ Username: c.Webserver.AdminUsername, diff --git a/config/config_test.go b/config/config_test.go index edf07da4..b5895038 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -1640,12 +1640,12 @@ func TestCheckConfig(t *testing.T) { func TestUpdateConfig(t *testing.T) { var c Config - require.NoError(t, c.LoadConfig(TestFile, true), "LoadConfig should not error") + require.NoError(t, c.LoadConfig(TestFile, true), "LoadConfig must not error") newCfg := c - require.NoError(t, c.UpdateConfig(TestFile, &newCfg, true), "UpdateConfig should not error") + require.NoError(t, c.UpdateConfig(TestFile, &newCfg, true), "UpdateConfig must not error") if isGCTDocker := os.Getenv("GCT_DOCKER_CI"); isGCTDocker != "true" { - require.Error(t, c.UpdateConfig("//non-existentpath\\", &newCfg, false), "UpdateConfig should error on non-existent path") + require.Error(t, c.UpdateConfig("//non-existentpath\\", &newCfg, false), "UpdateConfig must error on non-existent path") } } @@ -1998,7 +1998,7 @@ func TestMigrateConfig(t *testing.T) { } else { require.NoError(t, err, "migrateConfig must not error") require.Equal(t, tt.want, got, "migrateConfig must return the correct file") - require.Truef(t, file.Exists(got), "migrateConfig return file `%s` must exist", got) + require.Truef(t, file.Exists(got), "migrateConfig return file %q must exist", got) } }) } @@ -2011,9 +2011,7 @@ func TestExchangeConfigValidate(t *testing.T) { } err = (&Exchange{}).Validate() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetDefaultSyncManagerConfig(t *testing.T) { diff --git a/config/versions/v4/v4.go b/config/versions/v4/v4.go index c9b124b8..f0e0d13f 100644 --- a/config/versions/v4/v4.go +++ b/config/versions/v4/v4.go @@ -41,11 +41,11 @@ func (*Version) UpgradeExchange(_ context.Context, e []byte) ([]byte, error) { case vT == jsonparser.Null, errors.Is(err, jsonparser.KeyPathNotFoundError): e, err = jsonparser.Set(e, []byte(`false`), "currencyPairs", "pairs", asset, "assetEnabled") case err == nil && vT != jsonparser.Boolean: - err = fmt.Errorf("assetEnabled: %w (`%s`)", jsonparser.UnknownValueTypeError, vT) + err = fmt.Errorf("assetEnabled: %w (%q)", jsonparser.UnknownValueTypeError, vT) } } if err != nil { - err = fmt.Errorf("%w for asset `%s`", err, asset) + err = fmt.Errorf("%w for asset %q", err, asset) } return err } diff --git a/config/versions/v4/v4_test.go b/config/versions/v4/v4_test.go index 37b12d90..4854eb88 100644 --- a/config/versions/v4/v4_test.go +++ b/config/versions/v4/v4_test.go @@ -59,8 +59,8 @@ func TestUpgradeExchange(t *testing.T) { in = []byte(`{"name":"Cracken","currencyPairs":{"assetTypes":["spot"],"pairs":{"margin":{"assetEnabled":{}}}}}`) _, err = new(v4.Version).UpgradeExchange(t.Context(), in) require.ErrorIs(t, err, jsonparser.UnknownValueTypeError) - require.ErrorContains(t, err, "`margin`") - require.ErrorContains(t, err, "`object`") + require.ErrorContains(t, err, "\"margin\"") + require.ErrorContains(t, err, "\"object\"") } func TestDowngradeExchange(t *testing.T) { diff --git a/config/versions/versions.go b/config/versions/versions.go index 384de27c..eb0039a3 100644 --- a/config/versions/versions.go +++ b/config/versions/versions.go @@ -187,12 +187,12 @@ func exchangeDeploy(ctx context.Context, patch ExchangeVersion, method func(Exch } exchNew, err := method(patch, ctx, exchOrig) if err != nil { - errs = common.AppendError(errs, fmt.Errorf("%w for `%s`: %w", errModifyingExchange, name, err)) + errs = common.AppendError(errs, fmt.Errorf("%w for %q: %w", errModifyingExchange, name, err)) continue } if !bytes.Equal(exchNew, exchOrig) { if j, err = jsonparser.Set(j, exchNew, "exchanges", "["+strconv.Itoa(i)+"]"); err != nil { - errs = common.AppendError(errs, fmt.Errorf("%w `%s`/exchanges[%d]: %w: %w", errModifyingExchange, name, i, common.ErrSettingField, err)) + errs = common.AppendError(errs, fmt.Errorf("%w %q/exchanges[%d]: %w: %w", errModifyingExchange, name, i, common.ErrSettingField, err)) } } } diff --git a/config/versions/versions_test.go b/config/versions/versions_test.go index be5aa2b1..2f4dbc04 100644 --- a/config/versions/versions_test.go +++ b/config/versions/versions_test.go @@ -62,7 +62,7 @@ func TestDeploy(t *testing.T) { _, err = m.Deploy(t.Context(), in, UseLatestVersion) require.Implements(t, (*ExchangeVersion)(nil), m.versions[1]) require.ErrorIs(t, err, errUpgrade) - require.ErrorContains(t, err, "for `Juan`") + require.ErrorContains(t, err, "for \"Juan\"") j2, err = m.Deploy(t.Context(), j, 0) require.NoError(t, err) diff --git a/currency/code_test.go b/currency/code_test.go index f22cdade..ec224275 100644 --- a/currency/code_test.go +++ b/currency/code_test.go @@ -4,6 +4,7 @@ import ( "errors" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/encoding/json" ) @@ -640,11 +641,7 @@ func TestItemString(t *testing.T) { AssocChain: "Silly", } - if expected := "HWORLD"; newItem.String() != expected { - t.Errorf("Currency String() error expected '%s' but received '%s'", - expected, - &newItem) - } + assert.Equal(t, "HWORLD", newItem.String()) } // 28848025 40.84 ns/op 8 B/op 1 allocs/op // Current diff --git a/currency/currency_test.go b/currency/currency_test.go index b524fc4b..cf86f1a4 100644 --- a/currency/currency_test.go +++ b/currency/currency_test.go @@ -3,6 +3,8 @@ package currency import ( "errors" "testing" + + "github.com/stretchr/testify/require" ) func TestGetDefaultExchangeRates(t *testing.T) { @@ -143,18 +145,14 @@ func TestGetForeignExchangeRate(t *testing.T) { } one, err := GetForeignExchangeRate(NewPair(USD, USD)) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if one != 1 { t.Fatal("unexpected value") } rate, err := GetForeignExchangeRate(NewPair(AUD, USD)) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if rate <= 0 { t.Fatal("unexpected value") diff --git a/currency/manager_test.go b/currency/manager_test.go index 1dbbfd52..cc613042 100644 --- a/currency/manager_test.go +++ b/currency/manager_test.go @@ -119,9 +119,7 @@ func TestPairsManagerMatch(t *testing.T) { } whatIgot, err := p.Match("bTCuSD", asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) whatIwant, err := NewPairFromString("btc-usd") if err != nil { @@ -275,9 +273,8 @@ func TestStoreFormat(t *testing.T) { } err = p.StoreFormat(asset.Spot, &PairFormat{Delimiter: "~"}, true) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) + ps, err := p.Get(asset.Spot) if err != nil { t.Fatal(err) @@ -288,9 +285,7 @@ func TestStoreFormat(t *testing.T) { } err = p.StoreFormat(asset.Spot, &PairFormat{Delimiter: "/"}, false) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) ps, err = p.Get(asset.Spot) if err != nil { @@ -319,9 +314,7 @@ func TestStorePairs(t *testing.T) { } err = p.StorePairs(asset.Spot, ethusdPairs, false) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) pairs, err := p.GetPairs(asset.Spot, false) if err != nil { @@ -339,9 +332,8 @@ func TestStorePairs(t *testing.T) { p = initTest(t) err = p.StorePairs(asset.Spot, ethusdPairs, false) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) + pairs, err = p.GetPairs(asset.Spot, false) if err != nil { t.Fatal(err) @@ -361,14 +353,10 @@ func TestStorePairs(t *testing.T) { } err = p.StorePairs(asset.Futures, ethkrwPairs, true) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) err = p.StorePairs(asset.Futures, ethkrwPairs, false) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) pairs, err = p.GetPairs(asset.Futures, true) if err != nil { @@ -522,9 +510,7 @@ func TestFullStoreUnmarshalMarshal(t *testing.T) { var another FullStore err = json.Unmarshal(data, &another) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if _, ok := another[asset.Spot]; !ok { t.Fatal("expected values to be associated with spot") @@ -532,9 +518,7 @@ func TestFullStoreUnmarshalMarshal(t *testing.T) { data = []byte(`{123:{"assetEnabled":null,"enabled":"","available":""}}`) err = json.Unmarshal(data, &another) - if errors.Is(err, nil) { - t.Fatalf("expected error") - } + assert.Error(t, err, "Unmarshal should error with invalid asset type") data = []byte(`{"bro":{"assetEnabled":null,"enabled":"","available":""}}`) err = json.Unmarshal(data, &another) @@ -629,9 +613,8 @@ func TestEnsureOnePairEnabled(t *testing.T) { }, } pair, item, err := pm.EnsureOnePairEnabled() - if !errors.Is(err, nil) { - t.Errorf("received: '%v' but expected: '%v'", err, nil) - } + assert.NoError(t, err) + if len(pm.Pairs[asset.Spot].Enabled) != 1 { t.Errorf("received: '%v' but expected: '%v'", len(pm.Pairs[asset.Spot].Enabled), 1) } @@ -640,9 +623,8 @@ func TestEnsureOnePairEnabled(t *testing.T) { } pair, item, err = pm.EnsureOnePairEnabled() - if !errors.Is(err, nil) { - t.Errorf("received: '%v' but expected: '%v'", err, nil) - } + assert.NoError(t, err) + if len(pm.Pairs[asset.Spot].Enabled) != 1 { t.Errorf("received: '%v' but expected: '%v'", len(pm.Pairs[asset.Spot].Enabled), 1) } @@ -671,9 +653,8 @@ func TestEnsureOnePairEnabled(t *testing.T) { }, } pair, item, err = pm.EnsureOnePairEnabled() - if !errors.Is(err, nil) { - t.Errorf("received: '%v' but expected: '%v'", err, nil) - } + assert.NoError(t, err) + if len(pm.Pairs[asset.Spot].Enabled) != 1 { t.Errorf("received: '%v' but expected: '%v'", len(pm.Pairs[asset.Spot].Enabled), 1) } @@ -697,9 +678,8 @@ func TestEnsureOnePairEnabled(t *testing.T) { }, } pair, item, err = pm.EnsureOnePairEnabled() - if !errors.Is(err, nil) { - t.Errorf("received: '%v' but expected: '%v'", err, nil) - } + assert.NoError(t, err) + if len(pm.Pairs[asset.Futures].Enabled) != 1 { t.Errorf("received: '%v' but expected: '%v'", len(pm.Pairs[asset.Futures].Enabled), 1) } diff --git a/currency/pair_test.go b/currency/pair_test.go index bbeb47c9..4907a0e5 100644 --- a/currency/pair_test.go +++ b/currency/pair_test.go @@ -554,9 +554,7 @@ func TestRandomPairFromPairs(t *testing.T) { var pairs Pairs pairs = append(pairs, NewBTCUSD()) result, err = pairs.GetRandomPair() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.IsEmpty() { t.Error("TestRandomPairFromPairs: Unexpected values") @@ -568,9 +566,8 @@ func TestRandomPairFromPairs(t *testing.T) { expectedResults := make(map[string]bool) for range 50 { result, err = pairs.GetRandomPair() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + expectedResults[result.String()] = true } diff --git a/currency/pairs_test.go b/currency/pairs_test.go index d250f505..cceb2d0d 100644 --- a/currency/pairs_test.go +++ b/currency/pairs_test.go @@ -61,9 +61,7 @@ func TestPairsFromString(t *testing.T) { } pairs, err := NewPairsFromString("ALGO-AUD,BAT-AUD,BCH-AUD,BSV-AUD,BTC-AUD,COMP-AUD,ENJ-AUD,ETC-AUD,ETH-AUD,ETH-BTC,GNT-AUD,LINK-AUD,LTC-AUD,LTC-BTC,MCAU-AUD,OMG-AUD,POWR-AUD,UNI-AUD,USDT-AUD,XLM-AUD,XRP-AUD,XRP-BTC", ",") - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) expected := []string{ "ALGO-AUD", "BAT-AUD", "BCH-AUD", "BSV-AUD", "BTC-AUD", @@ -212,8 +210,8 @@ func TestRemove(t *testing.T) { err := compare.ContainsAll(oldPairs, true) assert.NoError(t, err, "Remove should not affect the original pairs") - require.Len(t, newPairs, 1, "Remove should remove a pair") - require.Equal(t, oldPairs[2], newPairs[0], "Remove should leave the final pair") + require.Len(t, newPairs, 1, "Remove must remove a pair") + require.Equal(t, oldPairs[2], newPairs[0], "Remove must leave the final pair") newPairs = newPairs.Remove(oldPairs[0]) assert.Len(t, newPairs, 1, "Remove should have no effect on non-included pairs") @@ -280,14 +278,10 @@ func TestContainsAll(t *testing.T) { } err = pairs.ContainsAll(Pairs{NewBTCUSD()}, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = pairs.ContainsAll(Pairs{NewPair(USD, BTC)}, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = pairs.ContainsAll(Pairs{NewPair(XRP, BTC)}, false) if !errors.Is(err, ErrPairNotContainedInAvailablePairs) { @@ -300,14 +294,10 @@ func TestContainsAll(t *testing.T) { } err = pairs.ContainsAll(pairs, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = pairs.ContainsAll(pairs, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) duplication := Pairs{ NewBTCUSD(), @@ -347,9 +337,7 @@ func TestDeriveFrom(t *testing.T) { } got, err := testCases.DeriveFrom("USDCUSD") - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if got.Upper().String() != "USDCUSD" { t.Fatalf("received: '%v' but expected: '%v'", got.Upper().String(), "USDCUSD") @@ -447,18 +435,15 @@ func TestGetMatch(t *testing.T) { expected := NewBTCUSD() match, err := pairs.GetMatch(expected) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected '%v'", err, nil) - } + require.NoError(t, err) if !match.Equal(expected) { t.Fatalf("received: '%v' but expected '%v'", match, expected) } match, err = pairs.GetMatch(NewPair(USD, BTC)) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected '%v'", err, nil) - } + require.NoError(t, err) + if !match.Equal(expected) { t.Fatalf("received: '%v' but expected '%v'", match, expected) } @@ -679,9 +664,7 @@ func TestValidateAndConform(t *testing.T) { } formatted, err := conformMe.ValidateAndConform(EMPTYFORMAT, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected '%v'", err, nil) - } + require.NoError(t, err) expected := "btcusd,ltcusd,linkusdt,usdnzd,ltcusdt,ltcdai,usdtxrp" @@ -690,9 +673,7 @@ func TestValidateAndConform(t *testing.T) { } formatted, err = formatted.ValidateAndConform(PairFormat{Delimiter: DashDelimiter, Uppercase: true}, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected '%v'", err, nil) - } + require.NoError(t, err) expected = "BTC-USD,LTC-USD,LINK-USDT,USD-NZD,LTC-USDT,LTC-DAI,USDT-XRP" @@ -705,9 +686,7 @@ func TestValidateAndConform(t *testing.T) { Uppercase: false, }, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected '%v'", err, nil) - } + require.NoError(t, err) expected = "BTC-USD,LTC-USD,LINK-USDT,USD-NZD,LTC-USDT,LTC-DAI,USDT-XRP" @@ -777,18 +756,14 @@ func TestGetPairsByQuote(t *testing.T) { } got, err := available.GetPairsByQuote(USD) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected '%v'", err, nil) - } + require.NoError(t, err) if len(got) != 2 { t.Fatalf("received: '%v' but expected '%v'", len(got), 2) } got, err = available.GetPairsByQuote(BTC) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected '%v'", err, nil) - } + require.NoError(t, err) if len(got) != 0 { t.Fatalf("received: '%v' but expected '%v'", len(got), 0) @@ -818,18 +793,14 @@ func TestGetPairsByBase(t *testing.T) { } got, err := available.GetPairsByBase(USD) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected '%v'", err, nil) - } + require.NoError(t, err) if len(got) != 1 { t.Fatalf("received: '%v' but expected '%v'", len(got), 1) } got, err = available.GetPairsByBase(LTC) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected '%v'", err, nil) - } + require.NoError(t, err) if len(got) != 3 { t.Fatalf("received: '%v' but expected '%v'", len(got), 3) diff --git a/currency/storage_test.go b/currency/storage_test.go index a35b60dd..e283d4f9 100644 --- a/currency/storage_test.go +++ b/currency/storage_test.go @@ -83,7 +83,7 @@ func TestRunUpdater(t *testing.T) { assert.Nil(t, newStorage.fiatExchangeMarkets, "Forex should not be enabled with no providers") c.ForexProviders = AllFXSettings{{Name: n, Enabled: true, APIKey: "sudo shazam!"}} err = newStorage.RunUpdater(overrideForProvider(n), c, tempDir) - assert.NoError(t, err, "%s should not error on Setup with a bad apikey", n) + assert.NoErrorf(t, err, "%s should not error on Setup with a bad apikey", n) assert.NotNil(t, newStorage.fiatExchangeMarkets, "Forex should be enabled now we have a provider with a key") err = newStorage.Shutdown() assert.NoError(t, err, "Shutdown should not error") diff --git a/database/database_test.go b/database/database_test.go index 400ccd20..59eb0097 100644 --- a/database/database_test.go +++ b/database/database_test.go @@ -7,17 +7,15 @@ import ( "path/filepath" "testing" - // import sqlite3 driver _ "github.com/mattn/go-sqlite3" + "github.com/stretchr/testify/assert" ) func TestSetConfig(t *testing.T) { t.Parallel() inst := &Instance{} err := inst.SetConfig(&Config{Verbose: true}) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) err = inst.SetConfig(nil) if !errors.Is(err, ErrNilConfig) { @@ -40,9 +38,7 @@ func TestSetSQLiteConnection(t *testing.T) { } err = inst.SetSQLiteConnection(&sql.DB{}) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) inst = nil err = inst.SetSQLiteConnection(nil) @@ -59,21 +55,16 @@ func TestSetPostgresConnection(t *testing.T) { inst := &Instance{} databaseFullLocation := filepath.Join(DB.DataPath, "TestSetPostgresConnection") con, err := sql.Open("sqlite3", databaseFullLocation) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + err = inst.SetPostgresConnection(con) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + err = con.Close() - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + err = os.Remove(databaseFullLocation) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) } func TestSetConnected(t *testing.T) { @@ -94,17 +85,13 @@ func TestCloseConnection(t *testing.T) { inst := &Instance{} databaseFullLocation := filepath.Join(DB.DataPath, "TestCloseConnection") con, err := sql.Open("sqlite3", databaseFullLocation) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + err = inst.SetSQLiteConnection(con) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + err = inst.CloseConnection() - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) } func TestIsConnected(t *testing.T) { @@ -131,9 +118,7 @@ func TestGetConfig(t *testing.T) { } err := inst.SetConfig(&Config{Enabled: true}) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) cfg = inst.GetConfig() if cfg == nil { @@ -146,18 +131,15 @@ func TestPing(t *testing.T) { inst := &Instance{} databaseFullLocation := filepath.Join(DB.DataPath, "TestPing") con, err := sql.Open("sqlite3", databaseFullLocation) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + err = inst.SetSQLiteConnection(con) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + inst.SetConnected(true) err = inst.Ping() - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + inst.SQL = nil err = inst.Ping() if !errors.Is(err, errNilSQL) { @@ -174,13 +156,10 @@ func TestPing(t *testing.T) { t.Errorf("received %v, expected %v", err, ErrNilInstance) } err = con.Close() - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + err = os.Remove(databaseFullLocation) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) } func TestGetSQL(t *testing.T) { @@ -193,17 +172,13 @@ func TestGetSQL(t *testing.T) { databaseFullLocation := filepath.Join(DB.DataPath, "TestGetSQL") con, err := sql.Open("sqlite3", databaseFullLocation) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + err = inst.SetSQLiteConnection(con) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + _, err = inst.GetSQL() - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) inst = nil _, err = inst.GetSQL() diff --git a/database/repository/datahistoryjob/datahistoryjob_test.go b/database/repository/datahistoryjob/datahistoryjob_test.go index 608c401c..55a2d1b0 100644 --- a/database/repository/datahistoryjob/datahistoryjob_test.go +++ b/database/repository/datahistoryjob/datahistoryjob_test.go @@ -10,6 +10,7 @@ import ( "time" "github.com/gofrs/uuid" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/currency" "github.com/thrasher-corp/gocryptotrader/database" "github.com/thrasher-corp/gocryptotrader/database/drivers" @@ -176,9 +177,8 @@ func TestDataHistoryJob(t *testing.T) { } results, err := db.GetAllIncompleteJobsAndResults() - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if len(results) != 19 { t.Errorf("expected 19, received %v", len(results)) } @@ -192,38 +192,32 @@ func TestDataHistoryJob(t *testing.T) { } results, err = db.GetJobsBetween(time.Now().Add(-time.Hour), time.Now()) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if len(results) != 20 { t.Errorf("expected 20, received %v", len(results)) } jerb, err = db.GetJobAndAllResults(results[0].Nickname) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if !strings.EqualFold(jerb.Nickname, results[0].Nickname) { t.Errorf("expected %v, received %v", jerb.Nickname, jerberoos[0].Nickname) } err = db.SetRelationshipByID(results[0].ID, results[1].ID, 1337) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) jerb, err = db.GetByID(results[1].ID) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if jerb.Status != 1337 { t.Error("expected 1337") } rel, err := db.GetRelatedUpcomingJobs(results[0].Nickname) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if len(rel) != 1 { t.Fatal("expected 1") } @@ -232,13 +226,11 @@ func TestDataHistoryJob(t *testing.T) { } err = db.SetRelationshipByID(results[0].ID, results[2].ID, 1337) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + rel, err = db.GetRelatedUpcomingJobs(results[0].Nickname) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if len(rel) != 2 { t.Fatal("expected 2") } @@ -249,56 +241,47 @@ func TestDataHistoryJob(t *testing.T) { } jerb, err = db.GetPrerequisiteJob(results[1].Nickname) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if jerb.ID != results[0].ID { t.Errorf("received %v expected %v", jerb.ID, results[0].ID) } jerb, err = db.GetPrerequisiteJob(results[2].Nickname) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if jerb.ID != results[0].ID { t.Errorf("received %v expected %v", jerb.ID, results[0].ID) } err = db.SetRelationshipByNickname(results[4].Nickname, results[2].Nickname, 0) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + err = db.SetRelationshipByNickname(results[2].Nickname, results[2].Nickname, 0) if !errors.Is(err, errCannotSetSamePrerequisite) { t.Errorf("received %v expected %v", err, errCannotSetSamePrerequisite) } err = db.SetRelationshipByNickname(results[3].Nickname, results[2].Nickname, 0) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) // ensure only one prerequisite can be associated at once // after setting the prerequisite twice rel, err = db.GetRelatedUpcomingJobs(results[4].Nickname) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if len(rel) != 0 { t.Errorf("received %v expected %v", len(rel), 0) } rel, err = db.GetRelatedUpcomingJobs(results[3].Nickname) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if len(rel) != 1 { t.Errorf("received %v expected %v", len(rel), 1) } err = testhelpers.CloseDatabase(dbConn) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) }) } } diff --git a/dispatch/dispatch_test.go b/dispatch/dispatch_test.go index 0b221e35..1c6111a6 100644 --- a/dispatch/dispatch_test.go +++ b/dispatch/dispatch_test.go @@ -18,7 +18,7 @@ var ( func TestGlobalDispatcher(t *testing.T) { err := Start(0, 0) - require.NoError(t, err, "Start should not error") + require.NoError(t, err, "Start must not error") assert.True(t, IsRunning(), "IsRunning should return true") err = Stop() @@ -85,10 +85,10 @@ func TestSubscribe(t *testing.T) { assert.ErrorIs(t, err, ErrNotRunning, "subscribe should error correctly") err = d.start(0, 0) - require.NoError(t, err, "start should not error") + require.NoError(t, err, "start must not error") id, err := d.getNewID(uuid.NewV4) - require.NoError(t, err, "getNewID should not error") + require.NoError(t, err, "getNewID must not error") _, err = d.subscribe(nonEmptyUUID) assert.ErrorIs(t, err, errDispatcherUUIDNotFoundInRouteList, "subscribe should error correctly") @@ -123,25 +123,25 @@ func TestUnsubscribe(t *testing.T) { assert.NoError(t, err, "unsubscribe should not error") err = d.start(0, 0) - require.NoError(t, err, "start should not error") + require.NoError(t, err, "start must not error") err = d.unsubscribe(nonEmptyUUID, make(chan any)) assert.ErrorIs(t, err, errDispatcherUUIDNotFoundInRouteList, "unsubscribe should error correctly") id, err := d.getNewID(uuid.NewV4) - require.NoError(t, err, "getNewID should not error") + require.NoError(t, err, "getNewID must not error") err = d.unsubscribe(id, make(chan any)) assert.ErrorIs(t, err, errChannelNotFoundInUUIDRef, "unsubscribe should error correctly") ch, err := d.subscribe(id) - require.NoError(t, err, "subscribe should not error") + require.NoError(t, err, "subscribe must not error") err = d.unsubscribe(id, ch) assert.NoError(t, err, "unsubscribe should not error") ch2, err := d.subscribe(id) - require.NoError(t, err, "subscribe should not error") + require.NoError(t, err, "subscribe must not error") err = d.unsubscribe(id, ch2) assert.NoError(t, err, "unsubscribe should not error") @@ -160,7 +160,7 @@ func TestPublish(t *testing.T) { assert.NoError(t, err, "publish should not error") err = d.start(2, 10) - require.NoError(t, err, "start should not error") + require.NoError(t, err, "start must not error") err = d.publish(uuid.Nil, nil) assert.ErrorIs(t, err, errIDNotSet, "publish should error correctly") @@ -184,13 +184,13 @@ func TestPublishReceive(t *testing.T) { t.Parallel() d := NewDispatcher() err := d.start(0, 0) - require.NoError(t, err, "start should not error") + require.NoError(t, err, "start must not error") id, err := d.getNewID(uuid.NewV4) - require.NoError(t, err, "getNewID should not error") + require.NoError(t, err, "getNewID must not error") incoming, err := d.subscribe(id) - require.NoError(t, err, "subscribe should not error") + require.NoError(t, err, "subscribe must not error") go func(d *Dispatcher, id uuid.UUID) { for range 10 { @@ -214,7 +214,7 @@ func TestGetNewID(t *testing.T) { d = NewDispatcher() err = d.start(0, 0) - require.NoError(t, err, "start should not error") + require.NoError(t, err, "start must not error") _, err = d.getNewID(nil) assert.ErrorIs(t, err, errUUIDGeneratorFunctionIsNil, "getNewID should error correctly") @@ -246,7 +246,7 @@ func TestMux(t *testing.T) { d := NewDispatcher() err = d.start(0, 0) - require.NoError(t, err, "start should not error") + require.NoError(t, err, "start must not error") mux = GetNewMux(d) @@ -257,13 +257,13 @@ func TestMux(t *testing.T) { assert.ErrorIs(t, err, errNoIDs, "Publish should error correctly") id, err := mux.GetID() - require.NoError(t, err, "GetID should not error") + require.NoError(t, err, "GetID must not error") _, err = mux.Subscribe(uuid.Nil) assert.ErrorIs(t, err, errIDNotSet, "Subscribe should error correctly") pipe, err := mux.Subscribe(id) - require.NoError(t, err, "Subscribe should not error") + require.NoError(t, err, "Subscribe must not error") ready := make(chan bool) @@ -289,10 +289,10 @@ func TestMuxSubscribe(t *testing.T) { t.Parallel() d := NewDispatcher() err := d.start(0, 0) - require.NoError(t, err, "start should not error") + require.NoError(t, err, "start must not error") mux := GetNewMux(d) itemID, err := mux.GetID() - require.NoError(t, err, "GetID should not error") + require.NoError(t, err, "GetID must not error") pipes := make([]Pipe, 1000) for x := range 1000 { @@ -311,11 +311,11 @@ func TestMuxPublish(t *testing.T) { t.Parallel() d := NewDispatcher() err := d.start(0, 0) - require.NoError(t, err, "start should not error") + require.NoError(t, err, "start must not error") mux := GetNewMux(d) itemID, err := mux.GetID() - require.NoError(t, err, "GetID should not error") + require.NoError(t, err, "GetID must not error") overloadCeiling := DefaultMaxWorkers * DefaultJobsLimit * 2 @@ -329,7 +329,7 @@ func TestMuxPublish(t *testing.T) { ready := make(chan any) demux := make(chan any, 1) pipe, err := mux.Subscribe(itemID) - require.NoError(t, err, "Subscribe should not error") + require.NoError(t, err, "Subscribe must not error") // Subscribers must be actively selecting in order to receive anything go func() { @@ -381,10 +381,10 @@ func TestMuxPublish(t *testing.T) { func BenchmarkSubscribe(b *testing.B) { d := NewDispatcher() err := d.start(0, 0) - require.NoError(b, err, "start should not error") + require.NoError(b, err, "start must not error") mux := GetNewMux(d) newID, err := mux.GetID() - require.NoError(b, err, "GetID should not error") + require.NoError(b, err, "GetID must not error") for b.Loop() { _, err := mux.Subscribe(newID) diff --git a/engine/apiserver.go b/engine/apiserver.go index 2f46f32b..c6924762 100644 --- a/engine/apiserver.go +++ b/engine/apiserver.go @@ -111,11 +111,11 @@ func (m *apiServerManager) StopWebsocketServer() error { func (m *apiServerManager) newRouter(isREST bool) *mux.Router { router := mux.NewRouter().StrictSlash(true) var routes []Route - if common.ExtractPort(m.websocketListenAddress) == 80 { - m.websocketListenAddress = common.ExtractHost(m.websocketListenAddress) + if common.ExtractPortOrDefault(m.websocketListenAddress) == 80 { + m.websocketListenAddress = common.ExtractHostOrDefault(m.websocketListenAddress) } else { - m.websocketListenAddress = common.ExtractHost(m.websocketListenAddress) + ":" + - strconv.Itoa(common.ExtractPort(m.websocketListenAddress)) + m.websocketListenAddress = common.ExtractHostOrDefault(m.websocketListenAddress) + ":" + + strconv.Itoa(common.ExtractPortOrDefault(m.websocketListenAddress)) } if isREST { @@ -135,8 +135,9 @@ func (m *apiServerManager) newRouter(isREST bool) *mux.Router { } log.Debugf(log.RESTSys, "HTTP Go performance profiler (pprof) endpoint enabled: http://%s:%d/debug/pprof/\n", - common.ExtractHost(m.websocketListenAddress), - common.ExtractPort(m.websocketListenAddress)) + common.ExtractHostOrDefault(m.websocketListenAddress), + common.ExtractPortOrDefault(m.websocketListenAddress), + ) router.PathPrefix("/debug/pprof/").HandlerFunc(pprof.Index) } } else { @@ -167,7 +168,9 @@ func (m *apiServerManager) StartRESTServer() error { } log.Debugf(log.RESTSys, "Deprecated RPC handler support enabled. Listen URL: http://%s:%d\n", - common.ExtractHost(m.restListenAddress), common.ExtractPort(m.restListenAddress)) + common.ExtractHostOrDefault(m.restListenAddress), + common.ExtractPortOrDefault(m.restListenAddress), + ) m.restRouter = m.newRouter(true) if m.restHTTPServer == nil { m.restHTTPServer = &http.Server{ @@ -406,7 +409,9 @@ func (m *apiServerManager) StartWebsocketServer() error { } log.Debugf(log.APIServerMgr, "Websocket RPC support enabled. Listen URL: ws://%s:%d/ws\n", - common.ExtractHost(m.websocketListenAddress), common.ExtractPort(m.websocketListenAddress)) + common.ExtractHostOrDefault(m.websocketListenAddress), + common.ExtractPortOrDefault(m.websocketListenAddress), + ) m.websocketRouter = m.newRouter(false) if m.websocketHTTPServer == nil { m.websocketHTTPServer = &http.Server{ diff --git a/engine/apiserver_test.go b/engine/apiserver_test.go index c4051313..5d9bc565 100644 --- a/engine/apiserver_test.go +++ b/engine/apiserver_test.go @@ -43,18 +43,15 @@ func TestSetupAPIServerManager(t *testing.T) { wd, _ := os.Getwd() _, err = setupAPIServerManager(&config.RemoteControlConfig{}, &config.Profiler{}, &ExchangeManager{}, &fakeBot{}, nil, wd) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestStartRESTServer(t *testing.T) { t.Parallel() wd, _ := os.Getwd() m, err := setupAPIServerManager(&config.RemoteControlConfig{}, &config.Profiler{}, &ExchangeManager{}, &fakeBot{}, nil, wd) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.StartRESTServer() if !errors.Is(err, errServerDisabled) { t.Errorf("error '%v', expected '%v'", err, errServerDisabled) @@ -70,18 +67,15 @@ func TestStartWebsocketServer(t *testing.T) { t.Parallel() wd, _ := os.Getwd() m, err := setupAPIServerManager(&config.RemoteControlConfig{}, &config.Profiler{}, &ExchangeManager{}, &fakeBot{}, nil, wd) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.StartWebsocketServer() if !errors.Is(err, errServerDisabled) { t.Errorf("error '%v', expected '%v'", err, errServerDisabled) } m.remoteConfig.WebsocketRPC.Enabled = true err = m.StartWebsocketServer() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestStopRESTServer(t *testing.T) { @@ -93,9 +87,7 @@ func TestStopRESTServer(t *testing.T) { ListenAddress: "localhost:9051", }, }, &config.Profiler{}, &ExchangeManager{}, &fakeBot{}, nil, wd) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.StopRESTServer() if !errors.Is(err, ErrSubSystemNotStarted) { @@ -103,22 +95,17 @@ func TestStopRESTServer(t *testing.T) { } err = m.StartRESTServer() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.StopRESTServer() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + // do it again to ensure things have reset appropriately and no errors occur starting err = m.StartRESTServer() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.StopRESTServer() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestWebsocketStop(t *testing.T) { @@ -130,9 +117,7 @@ func TestWebsocketStop(t *testing.T) { ListenAddress: "localhost:9052", }, }, &config.Profiler{}, &ExchangeManager{}, &fakeBot{}, nil, wd) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.StopWebsocketServer() if !errors.Is(err, ErrSubSystemNotStarted) { @@ -140,22 +125,17 @@ func TestWebsocketStop(t *testing.T) { } err = m.StartWebsocketServer() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.StopWebsocketServer() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + // do it again to ensure things have reset appropriately and no errors occur starting err = m.StartWebsocketServer() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.StopWebsocketServer() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestIsRESTServerRunning(t *testing.T) { @@ -198,9 +178,8 @@ func TestGetAllActiveOrderbooks(t *testing.T) { } bs.SetDefaults() err = man.Add(bs) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + resp := getAllActiveOrderbooks(man) if resp == nil { t.Error("expected not nil") @@ -216,9 +195,8 @@ func TestGetAllActiveTickers(t *testing.T) { } bs.SetDefaults() err = man.Add(bs) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + resp := getAllActiveTickers(man) if resp == nil { t.Error("expected not nil") @@ -234,9 +212,8 @@ func TestGetAllActiveAccounts(t *testing.T) { } bs.SetDefaults() err = man.Add(bs) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + resp := getAllActiveAccounts(man) if resp == nil { t.Error("expected not nil") diff --git a/engine/communication_manager_test.go b/engine/communication_manager_test.go index e97eac53..f60ecfd4 100644 --- a/engine/communication_manager_test.go +++ b/engine/communication_manager_test.go @@ -4,6 +4,7 @@ import ( "errors" "testing" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/communications" "github.com/thrasher-corp/gocryptotrader/communications/base" ) @@ -25,9 +26,8 @@ func TestSetup(t *testing.T) { Enabled: true, }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m == nil { t.Error("expected manager") } @@ -40,13 +40,11 @@ func TestIsRunning(t *testing.T) { Enabled: true, }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if !m.IsRunning() { t.Error("expected true") } @@ -67,13 +65,11 @@ func TestStart(t *testing.T) { Enabled: true, }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + m.started = 1 err = m.Start() if !errors.Is(err, ErrSubSystemAlreadyStarted) { @@ -88,17 +84,14 @@ func TestGetStatus(t *testing.T) { Enabled: true, }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = m.GetStatus() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + m.started = 0 _, err = m.GetStatus() if !errors.Is(err, ErrSubSystemNotStarted) { @@ -113,17 +106,14 @@ func TestStop(t *testing.T) { Enabled: true, }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) @@ -142,13 +132,11 @@ func TestPushEvent(t *testing.T) { Enabled: true, }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + m.PushEvent(base.Event{}) m.PushEvent(base.Event{}) m = nil diff --git a/engine/connection_manager_test.go b/engine/connection_manager_test.go index f1c0095b..f769336c 100644 --- a/engine/connection_manager_test.go +++ b/engine/connection_manager_test.go @@ -4,6 +4,7 @@ import ( "errors" "testing" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/config" ) @@ -15,9 +16,8 @@ func TestSetupConnectionManager(t *testing.T) { } m, err := setupConnectionManager(&config.ConnectionMonitorConfig{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m == nil { t.Error("expected manager") } @@ -26,13 +26,11 @@ func TestSetupConnectionManager(t *testing.T) { func TestConnectionMonitorIsRunning(t *testing.T) { t.Parallel() m, err := setupConnectionManager(&config.ConnectionMonitorConfig{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if !m.IsRunning() { t.Error("expected true") } @@ -49,13 +47,11 @@ func TestConnectionMonitorIsRunning(t *testing.T) { func TestConnectionMonitorStart(t *testing.T) { t.Parallel() m, err := setupConnectionManager(&config.ConnectionMonitorConfig{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() if !errors.Is(err, ErrSubSystemAlreadyStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemAlreadyStarted) @@ -74,17 +70,14 @@ func TestConnectionMonitorStop(t *testing.T) { t.Errorf("error '%v', expected '%v'", err, errConnectionCheckerIsNil) } m, err := setupConnectionManager(&config.ConnectionMonitorConfig{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) @@ -99,13 +92,11 @@ func TestConnectionMonitorStop(t *testing.T) { func TestConnectionMonitorIsOnline(t *testing.T) { t.Parallel() m, err := setupConnectionManager(&config.ConnectionMonitorConfig{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + // If someone runs this offline, who are we to fail them? m.IsOnline() err = m.Stop() diff --git a/engine/currency_state_manager_test.go b/engine/currency_state_manager_test.go index bba25775..8550c99b 100644 --- a/engine/currency_state_manager_test.go +++ b/engine/currency_state_manager_test.go @@ -7,6 +7,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/common" "github.com/thrasher-corp/gocryptotrader/currency" exchange "github.com/thrasher-corp/gocryptotrader/exchanges" @@ -22,9 +23,7 @@ func TestSetupCurrencyStateManager(t *testing.T) { } cm, err := SetupCurrencyStateManager(0, &ExchangeManager{}) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if cm.sleep != DefaultStateManagerDelay { t.Fatal("unexpected value") @@ -141,9 +140,7 @@ func TestCurrencyStateManagerIsRunning(t *testing.T) { } err = (&CurrencyStateManager{started: 1, shutdown: make(chan struct{})}).Stop() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = (*CurrencyStateManager)(nil).Start() if !errors.Is(err, ErrNilSubsystem) { @@ -161,35 +158,25 @@ func TestCurrencyStateManagerIsRunning(t *testing.T) { sleep: time.Minute, } err = man.Start() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) time.Sleep(time.Millisecond) err = man.Stop() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) man.iExchangeManager = &fakeExchangeManagerino{ErrorMeOne: true} err = man.Start() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) time.Sleep(time.Millisecond) err = man.Stop() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) man.iExchangeManager = &fakeExchangeManagerino{ErrorMeOne: true} err = man.Start() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) time.Sleep(time.Millisecond) @@ -198,9 +185,7 @@ func TestCurrencyStateManagerIsRunning(t *testing.T) { } err = man.Stop() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if man.IsRunning() { t.Fatal("this should be stopped") @@ -234,9 +219,7 @@ func TestGetAllRPC(t *testing.T) { started: 1, iExchangeManager: &fakeExchangeManagerino{}, }).GetAllRPC("") - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestCanWithdrawRPC(t *testing.T) { @@ -266,9 +249,7 @@ func TestCanWithdrawRPC(t *testing.T) { started: 1, iExchangeManager: &fakeExchangeManagerino{}, }).CanWithdrawRPC("", currency.EMPTYCODE, asset.Empty) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestCanDepositRPC(t *testing.T) { @@ -298,9 +279,7 @@ func TestCanDepositRPC(t *testing.T) { started: 1, iExchangeManager: &fakeExchangeManagerino{}, }).CanDepositRPC("", currency.EMPTYCODE, asset.Empty) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestCanTradeRPC(t *testing.T) { @@ -330,9 +309,7 @@ func TestCanTradeRPC(t *testing.T) { started: 1, iExchangeManager: &fakeExchangeManagerino{}, }).CanTradeRPC("", currency.EMPTYCODE, asset.Empty) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestCanTradePairRPC(t *testing.T) { @@ -362,9 +339,7 @@ func TestCanTradePairRPC(t *testing.T) { started: 1, iExchangeManager: &fakeExchangeManagerino{}, }).CanTradePairRPC("", currency.EMPTYPAIR, asset.Empty) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestUpdate(_ *testing.T) { diff --git a/engine/database_connection_test.go b/engine/database_connection_test.go index 9418aa4f..1ea9d291 100644 --- a/engine/database_connection_test.go +++ b/engine/database_connection_test.go @@ -6,6 +6,7 @@ import ( "sync" "testing" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/database" "github.com/thrasher-corp/gocryptotrader/database/drivers" ) @@ -32,9 +33,8 @@ func TestSetupDatabaseConnectionManager(t *testing.T) { } m, err := SetupDatabaseConnectionManager(&database.Config{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m == nil { t.Error("expected manager") } @@ -43,18 +43,16 @@ func TestSetupDatabaseConnectionManager(t *testing.T) { func TestStartSQLite(t *testing.T) { CreateDatabase(t) m, err := SetupDatabaseConnectionManager(&database.Config{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + var wg sync.WaitGroup err = m.Start(&wg) if !errors.Is(err, database.ErrDatabaseSupportDisabled) { t.Errorf("error '%v', expected '%v'", err, database.ErrDatabaseSupportDisabled) } m, err = SetupDatabaseConnectionManager(&database.Config{Enabled: true}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start(&wg) if !errors.Is(err, database.ErrNoDatabaseProvided) { t.Errorf("error '%v', expected '%v'", err, database.ErrNoDatabaseProvided) @@ -72,17 +70,14 @@ func TestStartSQLite(t *testing.T) { Database: "test.db", }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } // This test does not care for a successful connection func TestStartPostgres(t *testing.T) { m, err := SetupDatabaseConnectionManager(&database.Config{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + var wg sync.WaitGroup err = m.Start(&wg) if !errors.Is(err, database.ErrDatabaseSupportDisabled) { @@ -110,17 +105,15 @@ func TestDatabaseConnectionManagerIsRunning(t *testing.T) { Database: "test.db", }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m.IsRunning() { t.Error("expected false") } var wg sync.WaitGroup err = m.Start(&wg) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if !m.IsRunning() { t.Error("expected true") } @@ -140,9 +133,8 @@ func TestDatabaseConnectionManagerStop(t *testing.T) { Database: "test.db", }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) @@ -150,14 +142,10 @@ func TestDatabaseConnectionManagerStop(t *testing.T) { var wg sync.WaitGroup err = m.Start(&wg) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) m = nil err = m.Stop() @@ -181,40 +169,32 @@ func TestCheckConnection(t *testing.T) { Database: "test.db", }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.checkConnection() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) } var wg sync.WaitGroup err = m.Start(&wg) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.checkConnection() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.checkConnection() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) } err = m.Start(&wg) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.checkConnection() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) m.dbConn.SetConnected(false) err = m.checkConnection() @@ -223,9 +203,7 @@ func TestCheckConnection(t *testing.T) { } err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetInstance(t *testing.T) { @@ -238,18 +216,16 @@ func TestGetInstance(t *testing.T) { Database: "test.db", }, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + db := m.GetInstance() if db != nil { t.Error("expected nil") } var wg sync.WaitGroup err = m.Start(&wg) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + db = m.GetInstance() if db == nil { t.Error("expected not nil") diff --git a/engine/datahistory_manager_test.go b/engine/datahistory_manager_test.go index adf8969a..75a297f7 100644 --- a/engine/datahistory_manager_test.go +++ b/engine/datahistory_manager_test.go @@ -10,6 +10,8 @@ import ( "time" "github.com/gofrs/uuid" + "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" @@ -47,22 +49,19 @@ func TestSetupDataHistoryManager(t *testing.T) { dbInst := &database.Instance{} err = dbInst.SetConfig(&database.Config{Enabled: true}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + dbInst.SetConnected(true) dbCM := &DatabaseConnectionManager{ dbConn: dbInst, started: 1, } err = dbInst.SetSQLiteConnection(&sql.DB{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + m, err := SetupDataHistoryManager(NewExchangeManager(), dbCM, &config.DataHistoryManager{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m == nil { t.Fatal("expected manager") } @@ -90,9 +89,7 @@ func TestDataHistoryManagerStart(t *testing.T) { m, _ := createDHM(t) m.started = 0 err := m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.Start() if !errors.Is(err, ErrSubSystemAlreadyStarted) { @@ -110,9 +107,8 @@ func TestDataHistoryManagerStop(t *testing.T) { m, _ := createDHM(t) m.shutdown = make(chan struct{}) err := m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) @@ -170,9 +166,8 @@ func TestUpsertJob(t *testing.T) { dhj.StartDate = time.Now().Add(-time.Hour) dhj.EndDate = time.Now() err = m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.UpsertJob(dhj, true) if !errors.Is(err, errNicknameInUse) { t.Errorf("error '%v', expected '%v'", err, errNicknameInUse) @@ -205,9 +200,7 @@ func TestUpsertJob(t *testing.T) { newJob.DataType = dataHistoryTradeDataType err = m.UpsertJob(newJob, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestSetJobStatus(t *testing.T) { @@ -223,9 +216,7 @@ func TestSetJobStatus(t *testing.T) { Interval: kline.OneMin, } err := m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.SetJobStatus("", "", 0) if !errors.Is(err, errNicknameIDUnset) { @@ -238,9 +229,8 @@ func TestSetJobStatus(t *testing.T) { } err = m.SetJobStatus(dhj.Nickname, "", dataHistoryStatusRemoved) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.SetJobStatus("", dhj.ID.String(), dataHistoryStatusActive) if !errors.Is(err, errBadStatus) { t.Errorf("error '%v', expected '%v'", err, errBadStatus) @@ -248,9 +238,7 @@ func TestSetJobStatus(t *testing.T) { j.Status = int64(dataHistoryStatusActive) err = m.SetJobStatus("", dhj.ID.String(), dataHistoryStatusPaused) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.SetJobStatus("", dhj.ID.String(), dataHistoryStatusFailed) if !errors.Is(err, errBadStatus) { @@ -259,9 +247,7 @@ func TestSetJobStatus(t *testing.T) { dhj.Status = dataHistoryStatusPaused err = m.SetJobStatus(dhj.Nickname, "", dataHistoryStatusActive) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) dhj.Status = dataHistoryStatusRemoved err = m.SetJobStatus(dhj.Nickname, "", dataHistoryStatusActive) @@ -271,9 +257,7 @@ func TestSetJobStatus(t *testing.T) { dhj.Status = dataHistoryStatusPaused err = m.SetJobStatus(dhj.Nickname, "", dataHistoryStatusRemoved) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) atomic.StoreInt32(&m.started, 0) err = m.SetJobStatus("", dhj.ID.String(), 0) @@ -301,22 +285,16 @@ func TestGetByNickname(t *testing.T) { Interval: kline.OneMin, } err := m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } - _, err = m.GetByNickname(dhj.Nickname, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } - _, err = m.GetByNickname(dhj.Nickname, true) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) _, err = m.GetByNickname(dhj.Nickname, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + + _, err = m.GetByNickname(dhj.Nickname, true) + assert.NoError(t, err) + + _, err = m.GetByNickname(dhj.Nickname, false) + assert.NoError(t, err) atomic.StoreInt32(&m.started, 0) _, err = m.GetByNickname("test123", false) @@ -344,13 +322,10 @@ func TestGetByID(t *testing.T) { Interval: kline.OneMin, } err := m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = m.GetByID(dhj.ID) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) _, err = m.GetByID(uuid.UUID{}) if !errors.Is(err, errEmptyID) { @@ -358,9 +333,7 @@ func TestGetByID(t *testing.T) { } _, err = m.GetByID(dhj.ID) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) atomic.StoreInt32(&m.started, 0) _, err = m.GetByID(dhj.ID) @@ -388,14 +361,11 @@ func TestRetrieveJobs(t *testing.T) { Interval: kline.OneMin, } err := m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) jobs, err := m.retrieveJobs() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(jobs) != 1 { t.Error("expected job") } @@ -427,23 +397,19 @@ func TestGetActiveJobs(t *testing.T) { Interval: kline.OneMin, } err := m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) jobs, err := m.GetActiveJobs() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(jobs) != 1 { t.Error("expected 1 job") } j.Status = int64(dataHistoryStatusFailed) jobs, err = m.GetActiveJobs() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(jobs) != 0 { t.Error("expected 0 jobs") } @@ -509,22 +475,17 @@ func TestValidateJob(t *testing.T) { dhj.StartDate = time.Now().Add(-time.Hour * 60) dhj.EndDate = time.Now().Add(-time.Minute) err = m.validateJob(dhj) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) dhj.DataType = dataHistoryCandleValidationDataType dhj.Interval = kline.OneDay dhj.RequestSizeLimit = 999 err = m.validateJob(dhj) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + dhj.DataType = dataHistoryTradeDataType err = m.validateJob(dhj) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) dhj.DataType = dataHistoryCandleValidationSecondarySourceType err = m.validateJob(dhj) @@ -553,22 +514,17 @@ func TestGetAllJobStatusBetween(t *testing.T) { Interval: kline.OneMin, } err := m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) jobs, err := m.GetAllJobStatusBetween(time.Now().Add(-time.Minute*5), time.Now().Add(time.Minute)) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(jobs) != 1 { t.Error("expected 1 job") } _, err = m.GetAllJobStatusBetween(time.Now().Add(-time.Hour), time.Now().Add(-time.Minute*30)) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) m.started = 0 _, err = m.GetAllJobStatusBetween(time.Now().Add(-time.Hour), time.Now().Add(-time.Minute*30)) @@ -587,9 +543,8 @@ func TestPrepareJobs(t *testing.T) { t.Parallel() m, _ := createDHM(t) jobs, err := m.PrepareJobs() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(jobs) != 1 { t.Errorf("expected 1 job, received %v", len(jobs)) } @@ -620,15 +575,11 @@ func TestCompareJobsToData(t *testing.T) { ConversionInterval: kline.FiveMin, } err := m.compareJobsToData(dhj) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) dhj.DataType = dataHistoryTradeDataType err = m.compareJobsToData(dhj) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) dhj.DataType = 1337 err = m.compareJobsToData(dhj) @@ -638,9 +589,7 @@ func TestCompareJobsToData(t *testing.T) { dhj.DataType = dataHistoryConvertCandlesDataType err = m.compareJobsToData(dhj) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) m.started = 0 err = m.compareJobsToData(dhj) @@ -731,9 +680,8 @@ func TestRunJob(t *testing.T) { //nolint:tparallel // There is a race condition test := testCases[x] t.Run(test.Nickname, func(t *testing.T) { err := m.UpsertJob(test, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + test.Status = dataHistoryIntervalIssuesFound err = m.runJob(test) if !errors.Is(err, errJobInvalid) { @@ -750,9 +698,7 @@ func TestRunJob(t *testing.T) { //nolint:tparallel // There is a race condition test.rangeHolder = rh err = m.runJob(test) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) }) } var badM *DataHistoryManager @@ -780,14 +726,11 @@ func TestGenerateJobSummaryTest(t *testing.T) { Interval: kline.OneMin, } err := m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) summary, err := m.GenerateJobSummary("TestGenerateJobSummary") - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(summary.ResultRanges) == 0 { t.Error("expected result ranges") } @@ -809,9 +752,8 @@ func TestRunJobs(t *testing.T) { t.Parallel() m, _ := createDHM(t) err := m.runJobs() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + atomic.StoreInt32(&m.started, 0) err = m.runJobs() if !errors.Is(err, ErrSubSystemNotStarted) { @@ -829,13 +771,10 @@ func TestConverters(t *testing.T) { t.Parallel() m, _ := createDHM(t) id, err := uuid.NewV4() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + id2, err := uuid.NewV4() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) dhj := &DataHistoryJob{ ID: id, @@ -859,9 +798,8 @@ func TestConverters(t *testing.T) { } convertBack, err := m.convertDBModelToJob(dbJob) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if dhj.ID != convertBack.ID || dhj.Nickname != convertBack.Nickname || !dhj.StartDate.Equal(convertBack.StartDate) || @@ -893,9 +831,8 @@ func TestConverters(t *testing.T) { } andBackAgain, err := m.convertDBResultToJobResult(result) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if jr.ID != andBackAgain[dhj.StartDate.Unix()][0].ID || jr.JobID != andBackAgain[dhj.StartDate.Unix()][0].JobID || jr.Result != andBackAgain[dhj.StartDate.Unix()][0].Result || @@ -912,9 +849,8 @@ func createDHM(t *testing.T) (*DataHistoryManager, *datahistoryjob.DataHistoryJo t.Helper() em := NewExchangeManager() exch, err := em.NewExchangeByName(testExchange) - if !errors.Is(err, nil) { - t.Fatalf("error '%v', expected '%v'", err, nil) - } + require.NoError(t, err) + cp := currency.NewBTCUSD() cp2 := currency.NewBTCUSDT() exch.SetDefaults() @@ -926,14 +862,11 @@ func createDHM(t *testing.T) (*DataHistoryManager, *datahistoryjob.DataHistoryJo AssetEnabled: true, } err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) exch2, err := em.NewExchangeByName("Binance") - if !errors.Is(err, nil) { - t.Fatalf("error '%v', expected '%v'", err, nil) - } + require.NoError(t, err) + exch2.SetDefaults() b = exch2.GetBase() b.CurrencyPairs.Pairs = make(map[asset.Item]*currency.PairStore) @@ -946,9 +879,7 @@ func createDHM(t *testing.T) (*DataHistoryManager, *datahistoryjob.DataHistoryJo } err = em.Add(exch2) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) j := &datahistoryjob.DataHistoryJob{ ID: jobID, @@ -1023,9 +954,8 @@ func TestProcessCandleData(t *testing.T) { em := NewExchangeManager() exch, err := em.NewExchangeByName(testExchange) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + exch.SetDefaults() fakeExchange := dhmExchange{ IBotExchange: exch, @@ -1041,16 +971,14 @@ func TestProcessCandleData(t *testing.T) { t.Error(err) } r, err := m.processCandleData(j, fakeExchange, j.StartDate, j.EndDate, 0) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if r.Status != dataHistoryStatusComplete { t.Errorf("received %v expected %v", r.Status, dataHistoryStatusComplete) } r, err = m.processCandleData(j, exch, j.StartDate, j.EndDate, 0) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if r.Status != dataHistoryStatusFailed { t.Errorf("received %v expected %v", r.Status, dataHistoryStatusFailed) } @@ -1079,9 +1007,8 @@ func TestProcessTradeData(t *testing.T) { em := NewExchangeManager() exch, err := em.NewExchangeByName(testExchange) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + exch.SetDefaults() fakeExchange := dhmExchange{ IBotExchange: exch, @@ -1096,16 +1023,14 @@ func TestProcessTradeData(t *testing.T) { } m.tradeSaver = dataHistoryTradeSaver r, err := m.processTradeData(j, fakeExchange, j.StartDate, j.EndDate, 0) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if r.Status != dataHistoryStatusFailed { t.Errorf("received %v expected %v", r.Status, dataHistoryStatusFailed) } r, err = m.processTradeData(j, exch, j.StartDate, j.EndDate, 0) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if r.Status != dataHistoryStatusFailed { t.Errorf("received %v expected %v", r.Status, dataHistoryStatusFailed) } @@ -1134,9 +1059,8 @@ func TestConvertJobTradesToCandles(t *testing.T) { m.tradeLoader = dataHistoryTraderLoader m.candleSaver = dataHistoryCandleSaver r, err := m.convertTradesToCandles(j, j.StartDate, j.EndDate) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if r.Status != dataHistoryStatusComplete { t.Errorf("received %v expected %v", r.Status, dataHistoryStatusComplete) } @@ -1166,9 +1090,8 @@ func TestUpscaleJobCandleData(t *testing.T) { } r, err := m.convertCandleData(j, j.StartDate, j.EndDate) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if r.Status != dataHistoryStatusComplete { t.Errorf("received %v expected %v", r.Status, dataHistoryStatusComplete) } @@ -1198,9 +1121,8 @@ func TestValidateCandles(t *testing.T) { em := NewExchangeManager() exch, err := em.NewExchangeByName(testExchange) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + exch.SetDefaults() fakeExchange := dhmExchange{ IBotExchange: exch, @@ -1214,16 +1136,14 @@ func TestValidateCandles(t *testing.T) { t.Error(err) } r, err := m.validateCandles(j, fakeExchange, j.StartDate, j.EndDate) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if r.Status != dataHistoryIntervalIssuesFound { t.Errorf("received %v expected %v", r.Status, dataHistoryIntervalIssuesFound) } r, err = m.validateCandles(j, exch, j.StartDate, j.EndDate) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if r.Status != dataHistoryStatusFailed { t.Errorf("received %v expected %v", r.Status, dataHistoryStatusFailed) } @@ -1233,21 +1153,16 @@ func TestSetJobRelationship(t *testing.T) { t.Parallel() m, j := createDHM(t) err := m.SetJobRelationship("test", "123") - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) jID, err := uuid.NewV4() - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + j.ID = jID.String() j.PrerequisiteJobID = "" j.PrerequisiteJobNickname = "" err = m.SetJobRelationship("", "123") - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) err = m.SetJobRelationship("", "") if !errors.Is(err, errNicknameUnset) { @@ -1347,25 +1262,22 @@ func TestCompletionCheck(t *testing.T) { Status: dataHistoryStatusActive, } err = m.completeJob(j, false, false) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if j.Status != dataHistoryIntervalIssuesFound { t.Errorf("received %v expected %v", j.Status, dataHistoryIntervalIssuesFound) } err = m.completeJob(j, true, false) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if j.Status != dataHistoryStatusComplete { t.Errorf("received %v expected %v", j.Status, dataHistoryStatusComplete) } err = m.completeJob(j, false, true) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + if j.Status != dataHistoryStatusFailed { t.Errorf("received %v expected %v", j.Status, dataHistoryStatusFailed) } @@ -1406,9 +1318,7 @@ func TestSaveCandlesInBatches(t *testing.T) { result := &DataHistoryJobResult{} err = dhm.saveCandlesInBatches(job, candles, result) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) for i := range 10000 { candles.Candles = append(candles.Candles, kline.Candle{ @@ -1417,9 +1327,7 @@ func TestSaveCandlesInBatches(t *testing.T) { } dhm.maxResultInsertions = 1337 err = dhm.saveCandlesInBatches(job, candles, result) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) } // these structs and function implementations are used diff --git a/engine/depositaddress_test.go b/engine/depositaddress_test.go index 17ef5419..b0a210c6 100644 --- a/engine/depositaddress_test.go +++ b/engine/depositaddress_test.go @@ -4,6 +4,7 @@ import ( "errors" "testing" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/currency" "github.com/thrasher-corp/gocryptotrader/exchanges/deposit" ) @@ -157,9 +158,7 @@ func TestGetDepositAddressByExchangeAndCurrency(t *testing.T) { t.Error("unexpected values") } _, err = m.GetDepositAddressByExchangeAndCurrency(bitStamp, "", currency.BTC) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) } func TestGetDepositAddressesByExchange(t *testing.T) { @@ -185,7 +184,5 @@ func TestGetDepositAddressesByExchange(t *testing.T) { } _, err = m.GetDepositAddressesByExchange(bitStamp) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) } diff --git a/engine/engine.go b/engine/engine.go index 5a36438d..7c405959 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -345,7 +345,7 @@ func (bot *Engine) Start() error { } bot.uptime = time.Now() - gctlog.Debugf(gctlog.Global, "Bot '%s' started.\n", bot.Config.Name) + gctlog.Debugf(gctlog.Global, "Bot %q started.\n", bot.Config.Name) gctlog.Debugf(gctlog.Global, "Using data dir: %s\n", bot.Settings.DataDir) if *bot.Config.Logging.Enabled && strings.Contains(bot.Config.Logging.Output, "file") { gctlog.Debugf(gctlog.Global, diff --git a/engine/engine_test.go b/engine/engine_test.go index ee158ee8..1d793845 100644 --- a/engine/engine_test.go +++ b/engine/engine_test.go @@ -164,15 +164,13 @@ func TestGetExchangeByName(t *testing.T) { em := NewExchangeManager() exch, err := em.NewExchangeByName(testExchange) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) + exch.SetDefaults() exch.SetEnabled(true) err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + e := &Engine{ExchangeManager: em} if !exch.IsEnabled() { @@ -201,15 +199,13 @@ func TestUnloadExchange(t *testing.T) { t.Parallel() em := NewExchangeManager() exch, err := em.NewExchangeByName(testExchange) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) + exch.SetDefaults() exch.SetEnabled(true) err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + e := &Engine{ ExchangeManager: em, Config: &config.Config{Exchanges: []config.Exchange{{Name: testExchange}}}, @@ -327,9 +323,7 @@ func TestRegisterWebsocketDataHandler(t *testing.T) { e = &Engine{WebsocketRoutineManager: &WebsocketRoutineManager{}} err = e.RegisterWebsocketDataHandler(func(_ string, _ any) error { return nil }, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestSetDefaultWebsocketDataHandler(t *testing.T) { @@ -342,9 +336,7 @@ func TestSetDefaultWebsocketDataHandler(t *testing.T) { e = &Engine{WebsocketRoutineManager: &WebsocketRoutineManager{}} err = e.SetDefaultWebsocketDataHandler() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestSettingsPrint(t *testing.T) { diff --git a/engine/event_manager_test.go b/engine/event_manager_test.go index 6d888dee..5e8531bf 100644 --- a/engine/event_manager_test.go +++ b/engine/event_manager_test.go @@ -27,9 +27,8 @@ func TestSetupEventManager(t *testing.T) { } m, err := setupEventManager(&CommunicationManager{}, &ExchangeManager{}, 0, false) - if !errors.Is(err, nil) { - t.Fatalf("error '%v', expected '%v'", err, nil) - } + require.NoError(t, err) + if m == nil { //nolint:staticcheck,nolintlint // SA5011 Ignore the nil warnings t.Fatal("expected manager") } @@ -40,13 +39,10 @@ func TestSetupEventManager(t *testing.T) { func TestEventManagerStart(t *testing.T) { m, err := setupEventManager(&CommunicationManager{}, &ExchangeManager{}, 0, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.Start() if !errors.Is(err, ErrSubSystemAlreadyStarted) { @@ -63,13 +59,11 @@ func TestEventManagerStart(t *testing.T) { func TestEventManagerIsRunning(t *testing.T) { t.Parallel() m, err := setupEventManager(&CommunicationManager{}, &ExchangeManager{}, 0, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if !m.IsRunning() { t.Error("expected true") } @@ -86,17 +80,14 @@ func TestEventManagerIsRunning(t *testing.T) { func TestEventManagerStop(t *testing.T) { t.Parallel() m, err := setupEventManager(&CommunicationManager{}, &ExchangeManager{}, 0, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) @@ -112,17 +103,15 @@ func TestEventManagerAdd(t *testing.T) { t.Parallel() em := NewExchangeManager() m, err := setupEventManager(&CommunicationManager{}, em, 0, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = m.Add("", "", EventConditionParams{}, currency.NewPair(currency.BTC, currency.USDC), asset.Spot, "") if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = m.Add("", "", EventConditionParams{}, currency.NewPair(currency.BTC, currency.USDC), asset.Spot, "") if !errors.Is(err, errExchangeDisabled) { t.Errorf("error '%v', expected '%v'", err, errExchangeDisabled) @@ -133,9 +122,8 @@ func TestEventManagerAdd(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + _, err = m.Add(testExchange, "", EventConditionParams{}, currency.NewPair(currency.BTC, currency.USDC), asset.Spot, "") if !errors.Is(err, errInvalidItem) { t.Errorf("error '%v', expected '%v'", err, errInvalidItem) @@ -152,31 +140,25 @@ func TestEventManagerAdd(t *testing.T) { } _, err = m.Add(testExchange, ItemPrice, cond, currency.NewPair(currency.BTC, currency.USDC), asset.Spot, ActionTest) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) action := ActionSMSNotify + "," + ActionTest _, err = m.Add(testExchange, ItemPrice, cond, currency.NewPair(currency.BTC, currency.USDC), asset.Spot, action) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestEventManagerRemove(t *testing.T) { t.Parallel() em := NewExchangeManager() m, err := setupEventManager(&CommunicationManager{}, em, 0, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m.Remove(0) { t.Error("expected false") } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m.Remove(0) { t.Error("expected false") } @@ -192,13 +174,10 @@ func TestEventManagerRemove(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + id, err := m.Add(testExchange, ItemPrice, cond, currency.NewPair(currency.BTC, currency.USDC), asset.Spot, action) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) if !m.Remove(id) { t.Error("expected true") @@ -209,17 +188,15 @@ func TestGetEventCounter(t *testing.T) { t.Parallel() em := NewExchangeManager() m, err := setupEventManager(&CommunicationManager{}, em, 0, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + total, executed := m.getEventCounter() if total != 0 && executed != 0 { t.Error("expected 0") } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + total, executed = m.getEventCounter() if total != 0 && executed != 0 { t.Error("expected 0") @@ -236,13 +213,10 @@ func TestGetEventCounter(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + _, err = m.Add(testExchange, ItemPrice, cond, currency.NewPair(currency.BTC, currency.USDC), asset.Spot, action) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) total, _ = m.getEventCounter() if total == 0 { diff --git a/engine/exchange_manager_test.go b/engine/exchange_manager_test.go index 421df449..02d82863 100644 --- a/engine/exchange_manager_test.go +++ b/engine/exchange_manager_test.go @@ -6,6 +6,7 @@ import ( "strings" "testing" + "github.com/stretchr/testify/require" exchange "github.com/thrasher-corp/gocryptotrader/exchanges" "github.com/thrasher-corp/gocryptotrader/exchanges/bitfinex" "github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues" @@ -44,9 +45,8 @@ func TestExchangeManagerAdd(t *testing.T) { b := new(bitfinex.Bitfinex) b.SetDefaults() err = m.Add(b) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + err = m.Add(b) if !errors.Is(err, ErrExchangeAlreadyLoaded) { t.Fatalf("received: '%v' but expected: '%v'", err, ErrExchangeAlreadyLoaded) @@ -79,9 +79,8 @@ func TestExchangeManagerGetExchanges(t *testing.T) { b := new(bitfinex.Bitfinex) b.SetDefaults() err = m.Add(b) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + exchanges, err = m.GetExchanges() if err != nil { t.Error("no exchange manager found") @@ -114,9 +113,7 @@ func TestExchangeManagerRemoveExchange(t *testing.T) { b := new(bitfinex.Bitfinex) b.SetDefaults() err = m.Add(b) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = m.RemoveExchange("Bitstamp") if !errors.Is(err, ErrExchangeNotFound) { @@ -124,9 +121,7 @@ func TestExchangeManagerRemoveExchange(t *testing.T) { } err = m.RemoveExchange("BiTFiNeX") - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(m.exchanges) != 0 { t.Error("exchange manager len should be 0") @@ -136,9 +131,7 @@ func TestExchangeManagerRemoveExchange(t *testing.T) { brokenExch.SetDefaults() err = m.Add(brokenExch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = m.RemoveExchange("BiTFiNeX") if !errors.Is(err, errExpectedTestError) { @@ -179,9 +172,7 @@ func TestNewExchangeByName(t *testing.T) { load.SetDefaults() err = m.Add(load) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) _, err = m.NewExchangeByName("bitfinex") if !errors.Is(err, ErrExchangeAlreadyLoaded) { @@ -230,20 +221,14 @@ func TestExchangeManagerShutdown(t *testing.T) { m = NewExchangeManager() err = m.Shutdown(-1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) brokenExch := &broken{} brokenExch.SetDefaults() err = m.Add(brokenExch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = m.Shutdown(-1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } diff --git a/engine/helpers.go b/engine/helpers.go index 168215c1..3b1c12b0 100644 --- a/engine/helpers.go +++ b/engine/helpers.go @@ -1015,7 +1015,7 @@ func NewSupportedExchangeByName(name string) (exchange.IBotExchange, error) { case "yobit": return new(yobit.Yobit), nil default: - return nil, fmt.Errorf("'%s', %w", name, ErrExchangeNotFound) + return nil, fmt.Errorf("%q, %w", name, ErrExchangeNotFound) } } diff --git a/engine/helpers_test.go b/engine/helpers_test.go index 17b12e2e..ff15cd71 100644 --- a/engine/helpers_test.go +++ b/engine/helpers_test.go @@ -112,9 +112,8 @@ func TestGetRPCEndpoints(t *testing.T) { } m, err := (&Engine{Config: &config.Config{}}).GetRPCEndpoints() - if !errors.Is(err, nil) { - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) + if len(m) != 4 { t.Fatalf("expected length: %d but received: %d", 4, len(m)) } @@ -1094,9 +1093,7 @@ func TestGetExchangeNames(t *testing.T) { if exch != nil { exch.SetDefaults() err = bot.ExchangeManager.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } } if e := bot.GetExchangeNames(false); len(e) != len(bot.Config.Exchanges) { diff --git a/engine/ntp_manager_test.go b/engine/ntp_manager_test.go index 94cde679..03e0a1d0 100644 --- a/engine/ntp_manager_test.go +++ b/engine/ntp_manager_test.go @@ -5,6 +5,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/thrasher-corp/gocryptotrader/config" ) @@ -23,9 +24,8 @@ func TestSetupNTPManager(t *testing.T) { AllowedNegativeDifference: &sec, } m, err := setupNTPManager(cfg, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m == nil { t.Error("expected manager") } @@ -44,9 +44,8 @@ func TestNTPManagerIsRunning(t *testing.T) { Level: 1, } m, err := setupNTPManager(cfg, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m.IsRunning() { t.Error("expected false") } @@ -73,9 +72,7 @@ func TestNTPManagerStart(t *testing.T) { AllowedNegativeDifference: &sec, } m, err = setupNTPManager(cfg, true) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.Start() if !errors.Is(err, errNTPManagerDisabled) { @@ -84,9 +81,7 @@ func TestNTPManagerStart(t *testing.T) { m.level = 1 err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.Start() if !errors.Is(err, ErrSubSystemAlreadyStarted) { @@ -108,22 +103,18 @@ func TestNTPManagerStop(t *testing.T) { Level: 1, } m, err = setupNTPManager(cfg, true) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestFetchNTPTime(t *testing.T) { @@ -139,32 +130,27 @@ func TestFetchNTPTime(t *testing.T) { Level: 1, } m, err = setupNTPManager(cfg, true) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = m.FetchNTPTime() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) tt, err := m.FetchNTPTime() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if tt.IsZero() { t.Error("expected time") } m.pools = []string{"0.pool.ntp.org:123"} tt, err = m.FetchNTPTime() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if tt.IsZero() { t.Error("expected time") } @@ -179,28 +165,21 @@ func TestProcessTime(t *testing.T) { Pool: []string{"0.pool.ntp.org:123"}, } m, err := setupNTPManager(cfg, true) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.processTime() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.processTime() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) m.allowedDifference = time.Duration(1) m.allowedNegativeDifference = time.Duration(1) err = m.processTime() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } diff --git a/engine/order_manager_test.go b/engine/order_manager_test.go index 6e70aee7..896362e5 100644 --- a/engine/order_manager_test.go +++ b/engine/order_manager_test.go @@ -188,13 +188,11 @@ func TestOrderManagerStart(t *testing.T) { } var wg sync.WaitGroup m, err = SetupOrderManager(NewExchangeManager(), &CommunicationManager{}, &wg, &config.OrderManager{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() if !errors.Is(err, ErrSubSystemAlreadyStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemAlreadyStarted) @@ -209,17 +207,15 @@ func TestOrderManagerIsRunning(t *testing.T) { var wg sync.WaitGroup m, err := SetupOrderManager(NewExchangeManager(), &CommunicationManager{}, &wg, &config.OrderManager{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m.IsRunning() { t.Error("expected false") } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if !m.IsRunning() { t.Error("expected true") } @@ -234,22 +230,18 @@ func TestOrderManagerStop(t *testing.T) { var wg sync.WaitGroup m, err = SetupOrderManager(NewExchangeManager(), &CommunicationManager{}, &wg, &config.OrderManager{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func OrdersSetup(t *testing.T) *OrderManager { @@ -274,13 +266,11 @@ func OrdersSetup(t *testing.T) *OrderManager { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + m, err := SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + m.started = 1 return m } @@ -480,9 +470,7 @@ func TestCancelOrder(t *testing.T) { Pair: btcusdPair, } err = m.Cancel(t.Context(), cancel) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) if o.Status != order.Cancelled { t.Error("Failed to cancel") @@ -616,9 +604,7 @@ func TestSubmit(t *testing.T) { Exchange: testExchange, OrderID: "FakePassingExchangeOrder", }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) o2, err := m.orderStore.getByExchangeAndID(testExchange, "FakePassingExchangeOrder") if err != nil { @@ -762,13 +748,11 @@ func TestProcessOrders(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + m, err := SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + m.started = 1 pairs := currency.Pairs{ currency.Pair{Base: currency.BTC, Quote: currency.USD}, @@ -1187,13 +1171,11 @@ func TestGetFuturesPositionsForExchange(t *testing.T) { Amount: 1, Price: 1, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + resp, err := o.GetFuturesPositionsForExchange("test", asset.Futures, cp) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(resp) != 1 { t.Error("expected 1 position") } @@ -1235,17 +1217,14 @@ func TestClearFuturesPositionsForExchange(t *testing.T) { Amount: 1, Price: 1, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = o.ClearFuturesTracking("test", asset.Futures, cp) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + resp, err := o.GetFuturesPositionsForExchange("test", asset.Futures, cp) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(resp) != 0 { t.Errorf("expected no position, received '%v'", len(resp)) } @@ -1287,13 +1266,11 @@ func TestUpdateOpenPositionUnrealisedPNL(t *testing.T) { Amount: 1, Price: 1, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + unrealised, err := o.UpdateOpenPositionUnrealisedPNL("test", asset.Futures, cp, 2, time.Now()) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if !unrealised.Equal(decimal.NewFromInt(1)) { t.Errorf("received '%v', expected '%v'", unrealised, 1) } @@ -1323,9 +1300,8 @@ func TestSubmitFakeOrder(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + o.orderStore.exchangeManager = em ord := &order.Submit{} @@ -1348,9 +1324,7 @@ func TestSubmitFakeOrder(t *testing.T) { o.orderStore.commsManager = &CommunicationManager{} o.orderStore.Orders = make(map[string][]*order.Detail) _, err = o.SubmitFakeOrder(ord, resp, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetOrdersSnapshot(t *testing.T) { @@ -1405,17 +1379,14 @@ func TestUpdateExisting(t *testing.T) { } s.futuresPositionController = futures.SetupPositionController() err = s.futuresPositionController.TrackNewOrder(od) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = s.updateExisting(od) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + pos, err := s.futuresPositionController.GetPositionsForExchange(testExchange, asset.Futures, od.Pair) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(pos) != 1 { t.Error("expected 1") } @@ -1462,9 +1433,8 @@ func TestGetAllOpenFuturesPositions(t *testing.T) { t.Parallel() wg := &sync.WaitGroup{} o, err := SetupOrderManager(NewExchangeManager(), &CommunicationManager{}, wg, &config.OrderManager{FuturesTrackingSeekDuration: time.Hour}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + o.started = 0 _, err = o.GetAllOpenFuturesPositions() if !errors.Is(err, ErrSubSystemNotStarted) { @@ -1490,9 +1460,8 @@ func TestGetOpenFuturesPosition(t *testing.T) { t.Parallel() wg := &sync.WaitGroup{} o, err := SetupOrderManager(NewExchangeManager(), &CommunicationManager{}, wg, &config.OrderManager{FuturesTrackingSeekDuration: time.Hour}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + o.started = 0 cp := currency.NewPair(currency.BTC, currency.PERP) _, err = o.GetOpenFuturesPosition(testExchange, asset.Spot, cp) @@ -1534,18 +1503,16 @@ func TestGetOpenFuturesPosition(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + o, err = SetupOrderManager(em, &CommunicationManager{}, wg, &config.OrderManager{ Enabled: true, FuturesTrackingSeekDuration: time.Hour, Verbose: true, ActivelyTrackFuturesPositions: true, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + o.started = 1 _, err = o.GetOpenFuturesPosition(testExchange, asset.Spot, cp) @@ -1568,13 +1535,10 @@ func TestGetOpenFuturesPosition(t *testing.T) { Amount: 1337, Exchange: testExchange, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = o.GetOpenFuturesPosition(testExchange, asset.Futures, cp) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) o = nil _, err = o.GetOpenFuturesPosition(testExchange, asset.Spot, cp) @@ -1628,14 +1592,12 @@ func TestProcessFuturesPositions(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + var wg sync.WaitGroup o, err = SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{ActivelyTrackFuturesPositions: true, FuturesTrackingSeekDuration: time.Hour}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + o.started = 1 err = o.processFuturesPositions(fakeExchange, nil) @@ -1674,15 +1636,11 @@ func TestProcessFuturesPositions(t *testing.T) { position.Orders[0].AssetType = asset.Futures position.Asset = asset.Futures err = o.processFuturesPositions(fakeExchange, position) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) b.Features.Supports.FuturesCapabilities.FundingRates = true err = o.processFuturesPositions(fakeExchange, position) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } // TestGetByDetail tests orderstore.getByDetail diff --git a/engine/portfolio_manager_test.go b/engine/portfolio_manager_test.go index 6ebecae7..e8b73913 100644 --- a/engine/portfolio_manager_test.go +++ b/engine/portfolio_manager_test.go @@ -4,6 +4,9 @@ import ( "errors" "sync" "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestSetupPortfolioManager(t *testing.T) { @@ -13,9 +16,8 @@ func TestSetupPortfolioManager(t *testing.T) { } m, err := setupPortfolioManager(NewExchangeManager(), 0, nil) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m == nil { t.Error("expected manager") } @@ -28,9 +30,8 @@ func TestIsPortfolioManagerRunning(t *testing.T) { } m, err := setupPortfolioManager(NewExchangeManager(), 0, nil) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m.IsRunning() { t.Error("expected false") } @@ -53,9 +54,7 @@ func TestPortfolioManagerStart(t *testing.T) { } m, err = setupPortfolioManager(NewExchangeManager(), 0, nil) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.Start(nil) if !errors.Is(err, errNilWaitGroup) { @@ -63,9 +62,7 @@ func TestPortfolioManagerStart(t *testing.T) { } err = m.Start(&wg) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.Start(&wg) if !errors.Is(err, ErrSubSystemAlreadyStarted) { @@ -82,39 +79,31 @@ func TestPortfolioManagerStop(t *testing.T) { } m, err = setupPortfolioManager(NewExchangeManager(), 0, nil) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) } err = m.Start(&wg) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestProcessPortfolio(t *testing.T) { em := NewExchangeManager() exch, err := em.NewExchangeByName("Bitstamp") - if !errors.Is(err, nil) { - t.Fatalf("error '%v', expected '%v'", err, nil) - } + require.NoError(t, err) + exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + m, err := setupPortfolioManager(em, 0, nil) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) m.processPortfolio() } diff --git a/engine/rpcserver.go b/engine/rpcserver.go index a357f7f2..586817c9 100644 --- a/engine/rpcserver.go +++ b/engine/rpcserver.go @@ -5145,7 +5145,7 @@ func (s *RPCServer) GetTechnicalAnalysis(ctx context.Context, r *gctrpc.GetTechn } signals["RSI"] = &gctrpc.ListOfSignals{Signals: prices} default: - return nil, fmt.Errorf("%w '%s'", errInvalidStrategy, r.AlgorithmType) + return nil, fmt.Errorf("%w %q", errInvalidStrategy, r.AlgorithmType) } return &gctrpc.GetTechnicalAnalysisResponse{Signals: signals}, nil diff --git a/engine/rpcserver_test.go b/engine/rpcserver_test.go index f32698c0..9075d448 100644 --- a/engine/rpcserver_test.go +++ b/engine/rpcserver_test.go @@ -489,9 +489,7 @@ func RPCTestSetup(t *testing.T) *Engine { RequestFormat: ¤cy.PairFormat{Uppercase: true}, } err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) exch, err = em.NewExchangeByName("Binance") if err != nil { @@ -509,9 +507,8 @@ func RPCTestSetup(t *testing.T) *Engine { RequestFormat: ¤cy.PairFormat{Uppercase: true}, } err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + engerino.ExchangeManager = em engerino.Config.Database = dbConf @@ -1149,9 +1146,8 @@ func TestSetExchangeTradeProcessing(t *testing.T) { Features: &config.FeaturesConfig{Enabled: config.FeaturesEnabledConfig{SaveTradeData: false}}, } err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + s := RPCServer{Engine: &Engine{ExchangeManager: em}} _, err = s.SetExchangeTradeProcessing(t.Context(), &gctrpc.SetExchangeTradeProcessingRequest{Exchange: testExchange, Status: true}) if err != nil { @@ -1275,14 +1271,11 @@ func TestGetAccountInfo(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + s := RPCServer{Engine: &Engine{ExchangeManager: em}} _, err = s.GetAccountInfo(t.Context(), &gctrpc.GetAccountInfoRequest{Exchange: fakeExchangeName, AssetType: asset.Spot.String()}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestUpdateAccountInfo(t *testing.T) { @@ -1303,15 +1296,12 @@ func TestUpdateAccountInfo(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + s := RPCServer{Engine: &Engine{ExchangeManager: em}} _, err = s.GetAccountInfo(t.Context(), &gctrpc.GetAccountInfoRequest{Exchange: fakeExchangeName, AssetType: asset.Spot.String()}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) _, err = s.UpdateAccountInfo(t.Context(), &gctrpc.GetAccountInfoRequest{Exchange: fakeExchangeName, AssetType: asset.Futures.String()}) if !errors.Is(err, currency.ErrAssetNotFound) { @@ -1322,9 +1312,7 @@ func TestUpdateAccountInfo(t *testing.T) { Exchange: fakeExchangeName, AssetType: asset.Spot.String(), }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetOrders(t *testing.T) { @@ -1348,14 +1336,12 @@ func TestGetOrders(t *testing.T) { RequestFormat: ¤cy.PairFormat{Uppercase: true}, } err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + var wg sync.WaitGroup om, err := SetupOrderManager(em, engerino.CommunicationsManager, &wg, &config.OrderManager{}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + om.started = 1 s := RPCServer{Engine: &Engine{ExchangeManager: em, OrderManager: om}} @@ -1459,18 +1445,15 @@ func TestGetOrder(t *testing.T) { RequestFormat: ¤cy.PairFormat{Uppercase: true}, } err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + var wg sync.WaitGroup om, err := SetupOrderManager(em, engerino.CommunicationsManager, &wg, &config.OrderManager{}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + om.started = 1 - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + s := RPCServer{Engine: &Engine{ExchangeManager: em, OrderManager: om}} p := &gctrpc.CurrencyPair{ Delimiter: "-", @@ -1666,9 +1649,8 @@ func TestRPCServerUpsertDataHistoryJob(t *testing.T) { AssetEnabled: true, } err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + s := RPCServer{Engine: &Engine{dataHistoryManager: m, ExchangeManager: em}} _, err = s.UpsertDataHistoryJob(t.Context(), nil) if !errors.Is(err, errNilRequestData) { @@ -1699,9 +1681,7 @@ func TestRPCServerUpsertDataHistoryJob(t *testing.T) { } _, err = s.UpsertDataHistoryJob(t.Context(), job) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) } func TestGetDataHistoryJobDetails(t *testing.T) { @@ -1719,9 +1699,7 @@ func TestGetDataHistoryJobDetails(t *testing.T) { Interval: kline.OneMin, } err := m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) _, err = s.GetDataHistoryJobDetails(t.Context(), nil) if !errors.Is(err, errNilRequestData) { @@ -1739,19 +1717,14 @@ func TestGetDataHistoryJobDetails(t *testing.T) { } _, err = s.GetDataHistoryJobDetails(t.Context(), &gctrpc.GetDataHistoryJobDetailsRequest{Nickname: "TestGetDataHistoryJobDetails"}) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) _, err = s.GetDataHistoryJobDetails(t.Context(), &gctrpc.GetDataHistoryJobDetailsRequest{Id: dhj.ID.String()}) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) resp, err := s.GetDataHistoryJobDetails(t.Context(), &gctrpc.GetDataHistoryJobDetailsRequest{Nickname: "TestGetDataHistoryJobDetails", FullDetails: true}) - if !errors.Is(err, nil) { - t.Fatalf("received %v, expected %v", err, nil) - } + require.NoError(t, err) + if resp == nil { //nolint:staticcheck,nolintlint // SA5011 Ignore the nil warnings t.Fatal("expected job") } @@ -1775,9 +1748,8 @@ func TestSetDataHistoryJobStatus(t *testing.T) { Interval: kline.OneMin, } err := m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Fatalf("received %v, expected %v", err, nil) - } + require.NoError(t, err) + _, err = s.SetDataHistoryJobStatus(t.Context(), nil) if !errors.Is(err, errNilRequestData) { t.Errorf("received %v, expected %v", err, errNilRequestData) @@ -1795,24 +1767,21 @@ func TestSetDataHistoryJobStatus(t *testing.T) { id := dhj.ID _, err = s.SetDataHistoryJobStatus(t.Context(), &gctrpc.SetDataHistoryJobStatusRequest{Nickname: "TestDeleteDataHistoryJob", Status: int64(dataHistoryStatusRemoved)}) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + dhj.ID = id j.Status = int64(dataHistoryStatusActive) _, err = s.SetDataHistoryJobStatus(t.Context(), &gctrpc.SetDataHistoryJobStatusRequest{Id: id.String(), Status: int64(dataHistoryStatusRemoved)}) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + _, err = s.SetDataHistoryJobStatus(t.Context(), &gctrpc.SetDataHistoryJobStatusRequest{Id: id.String(), Status: int64(dataHistoryStatusActive)}) if !errors.Is(err, errBadStatus) { t.Errorf("received %v, expected %v", err, errBadStatus) } j.Status = int64(dataHistoryStatusActive) _, err = s.SetDataHistoryJobStatus(t.Context(), &gctrpc.SetDataHistoryJobStatusRequest{Id: id.String(), Status: int64(dataHistoryStatusPaused)}) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + if j.Status != int64(dataHistoryStatusPaused) { t.Errorf("received %v, expected %v", dataHistoryStatus(j.Status), dataHistoryStatusPaused) } @@ -1832,15 +1801,11 @@ func TestGetActiveDataHistoryJobs(t *testing.T) { EndDate: time.Now().UTC(), Interval: kline.OneMin, } - - if err := m.UpsertJob(dhj, false); !errors.Is(err, nil) { - t.Fatalf("received %v, expected %v", err, nil) - } + require.NoError(t, m.UpsertJob(dhj, false)) r, err := s.GetActiveDataHistoryJobs(t.Context(), nil) - if !errors.Is(err, nil) { - t.Fatalf("received %v, expected %v", err, nil) - } + require.NoError(t, err) + if len(r.Results) != 1 { t.Fatalf("received %v, expected %v", len(r.Results), 1) } @@ -1875,17 +1840,14 @@ func TestGetDataHistoryJobsBetween(t *testing.T) { } err = m.UpsertJob(dhj, false) - if !errors.Is(err, nil) { - t.Fatalf("received %v, expected %v", err, nil) - } + require.NoError(t, err) r, err := s.GetDataHistoryJobsBetween(t.Context(), &gctrpc.GetDataHistoryJobsBetweenRequest{ StartDate: time.Now().Add(-time.Minute).UTC().Format(common.SimpleTimeFormatWithTimezone), EndDate: time.Now().Add(time.Minute).UTC().Format(common.SimpleTimeFormatWithTimezone), }) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + if len(r.Results) != 1 { t.Errorf("received %v, expected %v", len(r.Results), 1) } @@ -1939,14 +1901,12 @@ func TestGetManagedOrders(t *testing.T) { RequestFormat: ¤cy.PairFormat{Uppercase: true}, } err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + var wg sync.WaitGroup om, err := SetupOrderManager(em, engerino.CommunicationsManager, &wg, &config.OrderManager{}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + om.started = 1 s := RPCServer{Engine: &Engine{ExchangeManager: em, OrderManager: om}} @@ -2139,17 +2099,13 @@ func TestUpdateDataHistoryJobPrerequisite(t *testing.T) { _, err = s.UpdateDataHistoryJobPrerequisite(t.Context(), &gctrpc.UpdateDataHistoryJobPrerequisiteRequest{ Nickname: "test456", }) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) _, err = s.UpdateDataHistoryJobPrerequisite(t.Context(), &gctrpc.UpdateDataHistoryJobPrerequisiteRequest{ Nickname: "test456", PrerequisiteJobNickname: "test123", }) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) } func TestCurrencyStateGetAll(t *testing.T) { @@ -2249,9 +2205,8 @@ func TestCurrencyStateTradingPair(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + s := RPCServer{Engine: &Engine{ ExchangeManager: em, currencyStateManager: &CurrencyStateManager{started: 1, iExchangeManager: em}, @@ -2263,9 +2218,7 @@ func TestCurrencyStateTradingPair(t *testing.T) { Pair: "btc-usd", Asset: "spot", }) - if !errors.Is(err, nil) { - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) } func TestGetFuturesPositionsOrders(t *testing.T) { @@ -2305,14 +2258,12 @@ func TestGetFuturesPositionsOrders(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + var wg sync.WaitGroup om, err := SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{FuturesTrackingSeekDuration: time.Hour}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + om.started = 1 s := RPCServer{ Engine: &Engine{ @@ -2334,9 +2285,7 @@ func TestGetFuturesPositionsOrders(t *testing.T) { Quote: cp.Quote.String(), }, }) - if !errors.Is(err, nil) { - t.Fatalf("received '%v', expected '%v'", err, nil) - } + require.NoError(t, err) _, err = s.GetFuturesPositionsOrders(t.Context(), &gctrpc.GetFuturesPositionsOrdersRequest{ Exchange: fakeExchangeName, @@ -2364,9 +2313,7 @@ func TestGetCollateral(t *testing.T) { b.Enabled = true cp, err := currency.NewPairFromString("btc-usd") - if !errors.Is(err, nil) { - t.Fatalf("received '%v', expected '%v'", err, nil) - } + require.NoError(t, err) b.CurrencyPairs.Pairs = make(map[asset.Item]*currency.PairStore) b.CurrencyPairs.Pairs[asset.Futures] = ¤cy.PairStore{ @@ -2386,9 +2333,8 @@ func TestGetCollateral(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + s := RPCServer{ Engine: &Engine{ ExchangeManager: em, @@ -2425,9 +2371,8 @@ func TestGetCollateral(t *testing.T) { Asset: asset.Futures.String(), IncludeBreakdown: true, }) - if !errors.Is(err, nil) { - t.Fatalf("received '%v', expected '%v'", err, nil) - } + require.NoError(t, err) + if len(r.CurrencyBreakdown) != 3 { t.Errorf("expected 3 currencies, received '%v'", len(r.CurrencyBreakdown)) } @@ -2450,9 +2395,7 @@ func TestGetCollateral(t *testing.T) { IncludeBreakdown: true, CalculateOffline: true, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestShutdown(t *testing.T) { @@ -2471,9 +2414,7 @@ func TestShutdown(t *testing.T) { s.Engine.GRPCShutdownSignal = make(chan struct{}, 1) _, err = s.Shutdown(t.Context(), &gctrpc.ShutdownRequest{}) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetTechnicalAnalysis(t *testing.T) { @@ -2489,9 +2430,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { b.Enabled = true cp, err := currency.NewPairFromString("btc-usd") - if !errors.Is(err, nil) { - t.Fatalf("received '%v', expected '%v'", err, nil) - } + require.NoError(t, err) b.CurrencyPairs.Pairs = make(map[asset.Item]*currency.PairStore) b.CurrencyPairs.Pairs[asset.Futures] = ¤cy.PairStore{ @@ -2509,9 +2448,8 @@ func TestGetTechnicalAnalysis(t *testing.T) { b.Features.Enabled.Kline.Intervals = kline.DeployExchangeIntervals(kline.IntervalCapacity{Interval: kline.OneDay}) err = em.Add(fExchange{IBotExchange: exch}) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + s := RPCServer{ Engine: &Engine{ ExchangeManager: em, @@ -2560,9 +2498,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { Interval: int64(kline.OneDay), AlgorithmType: "twap", }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if resp.Signals["TWAP"].Signals[0] != 1337 { t.Fatalf("received: '%v' but expected: '%v'", resp.Signals["TWAP"].Signals[0], 1337) @@ -2575,9 +2511,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { Interval: int64(kline.OneDay), AlgorithmType: "vwap", }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(resp.Signals["VWAP"].Signals) != 33 { t.Fatalf("received: '%v' but expected: '%v'", len(resp.Signals["VWAP"].Signals), 33) @@ -2591,9 +2525,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { AlgorithmType: "atr", Period: 9, }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(resp.Signals["ATR"].Signals) != 33 { t.Fatalf("received: '%v' but expected: '%v'", len(resp.Signals["ATR"].Signals), 33) @@ -2609,9 +2541,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { StandardDeviationUp: 0.5, StandardDeviationDown: 0.5, }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(resp.Signals["UPPER"].Signals) != 33 { t.Fatalf("received: '%v' but expected: '%v'", len(resp.Signals["UPPER"].Signals), 33) @@ -2634,9 +2564,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { AlgorithmType: "COCO", Period: 9, }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(resp.Signals["COCO"].Signals) != 33 { t.Fatalf("received: '%v' but expected: '%v'", len(resp.Signals["COCO"].Signals), 33) @@ -2650,9 +2578,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { AlgorithmType: "sma", Period: 9, }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(resp.Signals["SMA"].Signals) != 33 { t.Fatalf("received: '%v' but expected: '%v'", len(resp.Signals["SMA"].Signals), 33) @@ -2666,9 +2592,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { AlgorithmType: "ema", Period: 9, }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(resp.Signals["EMA"].Signals) != 33 { t.Fatalf("received: '%v' but expected: '%v'", len(resp.Signals["EMA"].Signals), 33) @@ -2684,9 +2608,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { FastPeriod: 12, SlowPeriod: 26, }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(resp.Signals["MACD"].Signals) != 33 { t.Fatalf("received: '%v' but expected: '%v'", len(resp.Signals["MACD"].Signals), 33) @@ -2708,9 +2630,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { AlgorithmType: "mfi", Period: 9, }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(resp.Signals["MFI"].Signals) != 33 { t.Fatalf("received: '%v' but expected: '%v'", len(resp.Signals["MFI"].Signals), 33) @@ -2724,9 +2644,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { AlgorithmType: "obv", Period: 9, }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(resp.Signals["OBV"].Signals) != 33 { t.Fatalf("received: '%v' but expected: '%v'", len(resp.Signals["OBV"].Signals), 33) @@ -2740,9 +2658,7 @@ func TestGetTechnicalAnalysis(t *testing.T) { AlgorithmType: "rsi", Period: 9, }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(resp.Signals["RSI"].Signals) != 33 { t.Fatalf("received: '%v' but expected: '%v'", len(resp.Signals["RSI"].Signals), 33) @@ -2761,9 +2677,7 @@ func TestGetMarginRatesHistory(t *testing.T) { b.Enabled = true cp, err := currency.NewPairFromString("btc-usd") - if !errors.Is(err, nil) { - t.Fatalf("received '%v', expected '%v'", err, nil) - } + require.NoError(t, err) b.CurrencyPairs.Pairs = make(map[asset.Item]*currency.PairStore) b.CurrencyPairs.Pairs[asset.Spot] = ¤cy.PairStore{ @@ -2776,9 +2690,8 @@ func TestGetMarginRatesHistory(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + s := RPCServer{ Engine: &Engine{ ExchangeManager: em, @@ -2812,9 +2725,7 @@ func TestGetMarginRatesHistory(t *testing.T) { request.Currency = "usd" _, err = s.GetMarginRatesHistory(t.Context(), request) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) request.GetBorrowRates = true request.GetLendingPayments = true @@ -2822,9 +2733,8 @@ func TestGetMarginRatesHistory(t *testing.T) { request.GetPredictedRate = true request.IncludeAllRates = true resp, err := s.GetMarginRatesHistory(t.Context(), request) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(resp.Rates) == 0 { t.Errorf("received '%v' expected '%v'", len(resp.Rates), 1) } @@ -2872,9 +2782,7 @@ func TestGetMarginRatesHistory(t *testing.T) { }, } _, err = s.GetMarginRatesHistory(t.Context(), request) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) request.Rates = []*gctrpc.MarginRate{ { @@ -2885,9 +2793,7 @@ func TestGetMarginRatesHistory(t *testing.T) { }, } _, err = s.GetMarginRatesHistory(t.Context(), request) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetFundingRates(t *testing.T) { @@ -2935,14 +2841,12 @@ func TestGetFundingRates(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + var wg sync.WaitGroup om, err := SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{FuturesTrackingSeekDuration: time.Hour}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + om.started = 1 s := RPCServer{ Engine: &Engine{ @@ -2993,9 +2897,7 @@ func TestGetFundingRates(t *testing.T) { request.IncludePredicted = true request.IncludePayments = true _, err = s.GetFundingRates(t.Context(), request) - if !errors.Is(err, nil) { - t.Errorf("received: '%v' but expected: '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetLatestFundingRate(t *testing.T) { @@ -3041,14 +2943,12 @@ func TestGetLatestFundingRate(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + var wg sync.WaitGroup om, err := SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{FuturesTrackingSeekDuration: time.Hour}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + om.started = 1 s := RPCServer{ Engine: &Engine{ @@ -3095,9 +2995,7 @@ func TestGetLatestFundingRate(t *testing.T) { } request.IncludePredicted = true _, err = s.GetLatestFundingRate(t.Context(), request) - if !errors.Is(err, nil) { - t.Errorf("received: '%v' but expected: '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetManagedPosition(t *testing.T) { @@ -3141,14 +3039,12 @@ func TestGetManagedPosition(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + var wg sync.WaitGroup om, err := SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{FuturesTrackingSeekDuration: time.Hour}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + om.started = 1 s := RPCServer{ Engine: &Engine{ @@ -3195,9 +3091,8 @@ func TestGetManagedPosition(t *testing.T) { request.Asset = asset.Futures.String() s.OrderManager, err = SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{FuturesTrackingSeekDuration: time.Hour}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + s.OrderManager.started = 1 s.OrderManager.activelyTrackFuturesPositions = true _, err = s.GetManagedPosition(t.Context(), request) @@ -3233,13 +3128,10 @@ func TestGetManagedPosition(t *testing.T) { }, }, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + _, err = s.GetManagedPosition(t.Context(), request) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetAllManagedPositions(t *testing.T) { @@ -3283,14 +3175,12 @@ func TestGetAllManagedPositions(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + var wg sync.WaitGroup om, err := SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{FuturesTrackingSeekDuration: time.Hour}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + om.started = 1 s := RPCServer{ Engine: &Engine{ @@ -3309,9 +3199,8 @@ func TestGetAllManagedPositions(t *testing.T) { request := &gctrpc.GetAllManagedPositionsRequest{} s.OrderManager, err = SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{FuturesTrackingSeekDuration: time.Hour, ActivelyTrackFuturesPositions: true}) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + s.OrderManager.started = 1 _, err = s.GetAllManagedPositions(t.Context(), request) if !errors.Is(err, futures.ErrNoPositionsFound) { @@ -3340,17 +3229,14 @@ func TestGetAllManagedPositions(t *testing.T) { LastUpdated: time.Now(), Pair: cp2, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + request.IncludePredictedRate = true request.GetFundingPayments = true request.IncludeFullFundingRates = true request.IncludeFullOrderData = true _, err = s.GetAllManagedPositions(t.Context(), request) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetOrderbookMovement(t *testing.T) { @@ -3383,9 +3269,7 @@ func TestGetOrderbookMovement(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) s := RPCServer{Engine: &Engine{ExchangeManager: em}} @@ -3446,9 +3330,7 @@ func TestGetOrderbookMovement(t *testing.T) { req.Amount = 11 move, err := s.GetOrderbookMovement(t.Context(), req) - if !errors.Is(err, nil) { - t.Fatalf("received: '%+v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if move.Bought != 1 { t.Fatalf("received: '%v' but expected: '%v'", move.Bought, 1) @@ -3457,9 +3339,7 @@ func TestGetOrderbookMovement(t *testing.T) { req.Sell = true req.Amount = 1 move, err = s.GetOrderbookMovement(t.Context(), req) - if !errors.Is(err, nil) { - t.Fatalf("received: '%+v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if move.Bought != 10 { t.Fatalf("received: '%v' but expected: '%v'", move.Bought, 10) @@ -3496,9 +3376,7 @@ func TestGetOrderbookAmountByNominal(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) s := RPCServer{Engine: &Engine{ExchangeManager: em}} @@ -3553,9 +3431,7 @@ func TestGetOrderbookAmountByNominal(t *testing.T) { } nominal, err := s.GetOrderbookAmountByNominal(t.Context(), req) - if !errors.Is(err, nil) { - t.Fatalf("received: '%+v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if nominal.AmountRequired != 11 { t.Fatalf("received: '%v' but expected: '%v'", nominal.AmountRequired, 11) @@ -3563,9 +3439,7 @@ func TestGetOrderbookAmountByNominal(t *testing.T) { req.Sell = true nominal, err = s.GetOrderbookAmountByNominal(t.Context(), req) - if !errors.Is(err, nil) { - t.Fatalf("received: '%+v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if nominal.AmountRequired != 1 { t.Fatalf("received: '%v' but expected: '%v'", nominal.AmountRequired, 1) @@ -3602,9 +3476,7 @@ func TestGetOrderbookAmountByImpact(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) s := RPCServer{Engine: &Engine{ExchangeManager: em}} @@ -3660,9 +3532,7 @@ func TestGetOrderbookAmountByImpact(t *testing.T) { req.ImpactPercentage = 9.090909090909092 impact, err := s.GetOrderbookAmountByImpact(t.Context(), req) - if !errors.Is(err, nil) { - t.Fatalf("received: '%+v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if impact.AmountRequired != 11 { t.Fatalf("received: '%v' but expected: '%v'", impact.AmountRequired, 11) @@ -3671,9 +3541,7 @@ func TestGetOrderbookAmountByImpact(t *testing.T) { req.Sell = true req.ImpactPercentage = 10 impact, err = s.GetOrderbookAmountByImpact(t.Context(), req) - if !errors.Is(err, nil) { - t.Fatalf("received: '%+v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if impact.AmountRequired != 1 { t.Fatalf("received: '%v' but expected: '%v'", impact.AmountRequired, 1) @@ -3710,9 +3578,7 @@ func TestChangePositionMargin(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) s := RPCServer{Engine: &Engine{ExchangeManager: em}} _, err = s.ChangePositionMargin(t.Context(), nil) @@ -3738,9 +3604,7 @@ func TestChangePositionMargin(t *testing.T) { req.NewAllocatedMargin = 1338 req.MarginType = "isolated" _, err = s.ChangePositionMargin(t.Context(), req) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestSetLeverage(t *testing.T) { @@ -3773,9 +3637,7 @@ func TestSetLeverage(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) s := RPCServer{Engine: &Engine{ExchangeManager: em}} _, err = s.SetLeverage(t.Context(), nil) @@ -3804,9 +3666,7 @@ func TestSetLeverage(t *testing.T) { req.MarginType = "isolated" req.Leverage = 1337 _, err = s.SetLeverage(t.Context(), req) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) req.OrderSide = "lol" _, err = s.SetLeverage(t.Context(), req) @@ -3816,9 +3676,7 @@ func TestSetLeverage(t *testing.T) { req.OrderSide = order.Long.String() _, err = s.SetLeverage(t.Context(), req) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) } func TestGetLeverage(t *testing.T) { @@ -3851,9 +3709,7 @@ func TestGetLeverage(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) s := RPCServer{Engine: &Engine{ExchangeManager: em}} _, err = s.GetLeverage(t.Context(), nil) @@ -3881,9 +3737,8 @@ func TestGetLeverage(t *testing.T) { req.Asset = asset.USDTMarginedFutures.String() req.MarginType = "isolated" lev, err := s.GetLeverage(t.Context(), req) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if lev.Leverage != 1337 { t.Errorf("received '%v' expected '%v'", lev, 1337) } @@ -3896,9 +3751,7 @@ func TestGetLeverage(t *testing.T) { req.OrderSide = order.Long.String() _, err = s.GetLeverage(t.Context(), req) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) } func TestSetMarginType(t *testing.T) { @@ -3931,9 +3784,7 @@ func TestSetMarginType(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) s := RPCServer{Engine: &Engine{ExchangeManager: em}} _, err = s.SetMarginType(t.Context(), nil) @@ -3956,9 +3807,7 @@ func TestSetMarginType(t *testing.T) { req.Asset = asset.USDTMarginedFutures.String() req.MarginType = "isolated" _, err = s.SetMarginType(t.Context(), req) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) } func TestSetCollateralMode(t *testing.T) { @@ -3991,9 +3840,7 @@ func TestSetCollateralMode(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) s := RPCServer{Engine: &Engine{ExchangeManager: em}} _, err = s.SetCollateralMode(t.Context(), nil) @@ -4011,9 +3858,7 @@ func TestSetCollateralMode(t *testing.T) { req.Asset = asset.USDTMarginedFutures.String() req.CollateralMode = "single" _, err = s.SetCollateralMode(t.Context(), req) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) } func TestGetCollateralMode(t *testing.T) { @@ -4036,9 +3881,7 @@ func TestGetCollateralMode(t *testing.T) { IBotExchange: exch, } err = em.Add(fakeExchange) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) s := RPCServer{Engine: &Engine{ExchangeManager: em}} _, err = s.GetCollateralMode(t.Context(), nil) @@ -4055,9 +3898,7 @@ func TestGetCollateralMode(t *testing.T) { req.Exchange = fakeExchangeName req.Asset = asset.USDTMarginedFutures.String() _, err = s.GetCollateralMode(t.Context(), req) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) } func TestGetOpenInterest(t *testing.T) { @@ -4146,10 +3987,10 @@ func TestStartRPCRESTProxy(t *testing.T) { certFile := filepath.Join(tempDirTLS, "cert.pem") caCert, err := os.ReadFile(certFile) - require.NoError(t, err, "ReadFile should not error") + require.NoError(t, err, "ReadFile must not error") caCertPool := x509.NewCertPool() ok := caCertPool.AppendCertsFromPEM(caCert) - require.True(t, ok, "AppendCertsFromPEM should return true") + require.True(t, ok, "AppendCertsFromPEM must return true") client := &http.Client{Transport: &http.Transport{TLSClientConfig: &tls.Config{RootCAs: caCertPool, MinVersion: tls.VersionTLS12}}} for _, creds := range []struct { @@ -4166,23 +4007,23 @@ func TestStartRPCRESTProxy(t *testing.T) { t.Parallel() req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, "https://localhost:"+strconv.Itoa(gRPCProxyPort)+"/v1/getinfo", http.NoBody) - require.NoError(t, err, "NewRequestWithContext should not error") + require.NoError(t, err, "NewRequestWithContext must not error") req.SetBasicAuth(creds.username, creds.password) resp, err := client.Do(req) - require.NoError(t, err, "Do should not error") + require.NoError(t, err, "Do must not error") defer resp.Body.Close() if creds.username == "bobmarley" && creds.password == "Sup3rdup3rS3cr3t" { var info gctrpc.GetInfoResponse err = json.NewDecoder(resp.Body).Decode(&info) - require.NoError(t, err, "Decode should not error") + require.NoError(t, err, "Decode must not error") uptimeDuration, err := time.ParseDuration(info.Uptime) - require.NoError(t, err, "ParseDuration should not error") + require.NoError(t, err, "ParseDuration must not error") assert.InDelta(t, time.Since(fakeTime).Seconds(), uptimeDuration.Seconds(), 1.0, "Uptime should be within 1 second of the expected duration") } else { respBody, err := io.ReadAll(resp.Body) - require.NoError(t, err, "ReadAll should not error") + require.NoError(t, err, "ReadAll must not error") assert.Equal(t, http.StatusUnauthorized, resp.StatusCode, "HTTP status code should be 401") assert.Equal(t, "Access denied\n", string(respBody), "Response body should be 'Access denied\n'") } @@ -4225,7 +4066,7 @@ func TestRPCProxyAuthClient(t *testing.T) { t.Parallel() req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, "/", http.NoBody) - require.NoError(t, err, "NewRequestWithContext should not error") + require.NoError(t, err, "NewRequestWithContext must not error") req.SetBasicAuth(creds.username, creds.password) rr := httptest.NewRecorder() handler.ServeHTTP(rr, req) diff --git a/engine/sync_manager_test.go b/engine/sync_manager_test.go index c377b38b..6db28364 100644 --- a/engine/sync_manager_test.go +++ b/engine/sync_manager_test.go @@ -5,6 +5,8 @@ import ( "sync/atomic" "testing" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/common" "github.com/thrasher-corp/gocryptotrader/common/key" "github.com/thrasher-corp/gocryptotrader/config" @@ -52,9 +54,8 @@ func TestSetupSyncManager(t *testing.T) { } m, err := SetupSyncManager(&config.SyncManagerConfig{SynchronizeTrades: true, FiatDisplayCurrency: currency.USD, PairFormatDisplay: ¤cy.EMPTYFORMAT}, &ExchangeManager{}, &config.RemoteControlConfig{}, true) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m == nil { t.Error("expected manager") } @@ -63,9 +64,8 @@ func TestSetupSyncManager(t *testing.T) { func TestSyncManagerStart(t *testing.T) { t.Parallel() m, err := SetupSyncManager(&config.SyncManagerConfig{SynchronizeTrades: true, FiatDisplayCurrency: currency.USD, PairFormatDisplay: ¤cy.EMPTYFORMAT}, &ExchangeManager{}, &config.RemoteControlConfig{}, true) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + em := NewExchangeManager() exch, err := em.NewExchangeByName("Bitstamp") if err != nil { @@ -73,15 +73,12 @@ func TestSyncManagerStart(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + m.exchangeManager = em m.config.SynchronizeContinuously = true err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.Start() if !errors.Is(err, ErrSubSystemAlreadyStarted) { @@ -110,13 +107,10 @@ func TestSyncManagerStop(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + m, err = SetupSyncManager(&config.SyncManagerConfig{SynchronizeTrades: true, SynchronizeContinuously: true, FiatDisplayCurrency: currency.USD, PairFormatDisplay: ¤cy.EMPTYFORMAT}, em, &config.RemoteControlConfig{}, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = m.Stop() if !errors.Is(err, ErrSubSystemNotStarted) { @@ -124,13 +118,10 @@ func TestSyncManagerStop(t *testing.T) { } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestPrintCurrencyFormat(t *testing.T) { @@ -161,13 +152,11 @@ func TestPrintTickerSummary(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + m, err = SetupSyncManager(&config.SyncManagerConfig{SynchronizeTrades: true, SynchronizeContinuously: true, FiatDisplayCurrency: currency.USD, PairFormatDisplay: ¤cy.EMPTYFORMAT}, em, &config.RemoteControlConfig{}, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + atomic.StoreInt32(&m.started, 1) m.PrintTickerSummary(&ticker.Price{ Pair: currency.NewBTCUSDT(), @@ -203,13 +192,11 @@ func TestPrintOrderbookSummary(t *testing.T) { } exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + m, err = SetupSyncManager(&config.SyncManagerConfig{SynchronizeTrades: true, SynchronizeContinuously: true, FiatDisplayCurrency: currency.USD, PairFormatDisplay: ¤cy.EMPTYFORMAT}, em, &config.RemoteControlConfig{}, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + atomic.StoreInt32(&m.started, 1) m.PrintOrderbookSummary(&orderbook.Base{ Pair: currency.NewPair(currency.AUD, currency.USD), @@ -257,9 +244,7 @@ func TestWaitForInitialSync(t *testing.T) { m.started = 1 err = m.WaitForInitialSync() - if !errors.Is(err, nil) { - t.Fatalf("received %v, but expected: %v", err, nil) - } + require.NoError(t, err) } func TestSyncManagerWebsocketUpdate(t *testing.T) { @@ -279,30 +264,22 @@ func TestSyncManagerWebsocketUpdate(t *testing.T) { m.started = 1 // not started initial sync err = m.WebsocketUpdate("", currency.EMPTYPAIR, 1, 47, nil) - if !errors.Is(err, nil) { - t.Fatalf("received %v, but expected: %v", err, nil) - } + require.NoError(t, err) m.initSyncStarted = 1 // orderbook not enabled err = m.WebsocketUpdate("", currency.EMPTYPAIR, asset.Spot, SyncItemOrderbook, nil) - if !errors.Is(err, nil) { - t.Fatalf("received %v, but expected: %v", err, nil) - } + require.NoError(t, err) m.config.SynchronizeOrderbook = true // ticker not enabled err = m.WebsocketUpdate("", currency.EMPTYPAIR, asset.Spot, SyncItemTicker, nil) - if !errors.Is(err, nil) { - t.Fatalf("received %v, but expected: %v", err, nil) - } + require.NoError(t, err) m.config.SynchronizeTicker = true // trades not enabled err = m.WebsocketUpdate("", currency.EMPTYPAIR, asset.Spot, SyncItemTrade, nil) - if !errors.Is(err, nil) { - t.Fatalf("received %v, but expected: %v", err, nil) - } + require.NoError(t, err) m.config.SynchronizeTrades = true err = m.WebsocketUpdate("", currency.EMPTYPAIR, asset.Spot, 1336, nil) @@ -321,19 +298,13 @@ func TestSyncManagerWebsocketUpdate(t *testing.T) { m.initSyncWG.Add(3) // orderbook match err = m.WebsocketUpdate("", currency.EMPTYPAIR, asset.Spot, SyncItemOrderbook, errors.New("test")) - if !errors.Is(err, nil) { - t.Fatalf("received %v, but expected: %v", err, nil) - } + require.NoError(t, err) // ticker match err = m.WebsocketUpdate("", currency.EMPTYPAIR, asset.Spot, SyncItemTicker, errors.New("test")) - if !errors.Is(err, nil) { - t.Fatalf("received %v, but expected: %v", err, nil) - } + require.NoError(t, err) // trades match err = m.WebsocketUpdate("", currency.EMPTYPAIR, asset.Spot, SyncItemTrade, errors.New("test")) - if !errors.Is(err, nil) { - t.Fatalf("received %v, but expected: %v", err, nil) - } + require.NoError(t, err) } diff --git a/engine/websocketroutine_manager_test.go b/engine/websocketroutine_manager_test.go index cb15c540..1b65438c 100644 --- a/engine/websocketroutine_manager_test.go +++ b/engine/websocketroutine_manager_test.go @@ -7,6 +7,8 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/config" "github.com/thrasher-corp/gocryptotrader/currency" "github.com/thrasher-corp/gocryptotrader/exchange/websocket" @@ -37,9 +39,8 @@ func TestWebsocketRoutineManagerSetup(t *testing.T) { } m, err := setupWebsocketRoutineManager(NewExchangeManager(), &OrderManager{}, &SyncManager{}, ¤cy.Config{CurrencyPairFormat: ¤cy.PairFormat{}}, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m == nil { t.Error("expecting manager") } @@ -56,13 +57,11 @@ func TestWebsocketRoutineManagerStart(t *testing.T) { Delimiter: "-", }} m, err = setupWebsocketRoutineManager(NewExchangeManager(), &OrderManager{}, &SyncManager{}, cfg, true) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() if !errors.Is(err, ErrSubSystemAlreadyStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemAlreadyStarted) @@ -76,17 +75,15 @@ func TestWebsocketRoutineManagerIsRunning(t *testing.T) { } m, err := setupWebsocketRoutineManager(NewExchangeManager(), &OrderManager{}, &SyncManager{}, ¤cy.Config{CurrencyPairFormat: ¤cy.PairFormat{}}, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + if m.IsRunning() { t.Error("expected false") } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + for atomic.LoadInt32(&m.state) == startingState { <-time.After(time.Second / 100) } @@ -103,22 +100,18 @@ func TestWebsocketRoutineManagerStop(t *testing.T) { } m, err = setupWebsocketRoutineManager(NewExchangeManager(), &OrderManager{}, &SyncManager{}, ¤cy.Config{CurrencyPairFormat: ¤cy.PairFormat{}}, false) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() if !errors.Is(err, ErrSubSystemNotStarted) { t.Errorf("error '%v', expected '%v'", err, ErrSubSystemNotStarted) } err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Stop() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestWebsocketRoutineManagerHandleData(t *testing.T) { @@ -126,34 +119,28 @@ func TestWebsocketRoutineManagerHandleData(t *testing.T) { var wg sync.WaitGroup em := NewExchangeManager() exch, err := em.NewExchangeByName(exchName) - if !errors.Is(err, nil) { - t.Fatalf("error '%v', expected '%v'", err, nil) - } + require.NoError(t, err) + exch.SetDefaults() err = em.Add(exch) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + om, err := SetupOrderManager(em, &CommunicationManager{}, &wg, &config.OrderManager{}) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = om.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + cfg := ¤cy.Config{CurrencyPairFormat: ¤cy.PairFormat{ Uppercase: false, Delimiter: "-", }} m, err := setupWebsocketRoutineManager(em, om, &SyncManager{}, cfg, true) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.Start() - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + orderID := "1337" err = m.websocketDataHandler(exchName, errors.New("error")) if err == nil { @@ -168,9 +155,8 @@ func TestWebsocketRoutineManagerHandleData(t *testing.T) { Pair: currency.NewPair(currency.BTC, currency.USDC), AssetType: asset.Spot, }) - if !errors.Is(err, nil) { - t.Errorf("error '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = m.websocketDataHandler(exchName, websocket.KlineData{}) if err != nil { t.Error(err) @@ -285,9 +271,7 @@ func TestRegisterWebsocketDataHandlerWithFunctionality(t *testing.T) { } err = m.registerWebsocketDataHandler(fn, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(m.dataHandlers) != 1 { t.Fatal("unexpected data handlers registered") @@ -330,28 +314,20 @@ func TestSetWebsocketDataHandler(t *testing.T) { } err = m.registerWebsocketDataHandler(m.websocketDataHandler, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = m.registerWebsocketDataHandler(m.websocketDataHandler, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = m.registerWebsocketDataHandler(m.websocketDataHandler, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(m.dataHandlers) != 3 { t.Fatal("unexpected data handler count") } err = m.setWebsocketDataHandler(m.websocketDataHandler) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if len(m.dataHandlers) != 1 { t.Fatal("unexpected data handler count") diff --git a/engine/withdraw_manager_test.go b/engine/withdraw_manager_test.go index 4ae55a9a..7ff30898 100644 --- a/engine/withdraw_manager_test.go +++ b/engine/withdraw_manager_test.go @@ -6,6 +6,8 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/common" "github.com/thrasher-corp/gocryptotrader/currency" exchange "github.com/thrasher-corp/gocryptotrader/exchanges" @@ -32,9 +34,8 @@ func withdrawManagerTestHelper(t *testing.T) (*ExchangeManager, *portfolioManage t.Fatal(err) } err = em.Add(b) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + pm, err := setupPortfolioManager(em, 0, &portfolio.Base{Addresses: []portfolio.Address{}}) if err != nil { t.Fatal(err) @@ -102,9 +103,8 @@ func TestSubmitWithdrawal(t *testing.T) { } adds := pm.GetAddresses() adds[0].WhiteListed = true - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) + _, err = m.SubmitWithdrawal(t.Context(), req) if !errors.Is(err, withdraw.ErrStrExchangeNotSupportedByAddress) { t.Errorf("received %v, expected %v", err, withdraw.ErrStrExchangeNotSupportedByAddress) @@ -123,9 +123,7 @@ func TestSubmitWithdrawal(t *testing.T) { m.isDryRun = true _, err = m.SubmitWithdrawal(t.Context(), req) - if !errors.Is(err, nil) { - t.Errorf("received %v, expected %v", err, nil) - } + assert.NoError(t, err) } func TestWithdrawEventByID(t *testing.T) { @@ -145,9 +143,8 @@ func TestWithdrawEventByID(t *testing.T) { withdraw.Cache.Add(withdraw.DryRunID.String(), tempResp) v, err := m.WithdrawalEventByID(withdraw.DryRunID.String()) - if !errors.Is(err, nil) { - t.Errorf("expected %v, received %v", nil, err) - } + assert.NoError(t, err) + if v == nil { t.Error("expected WithdrawalEventByID() to return data from cache") } diff --git a/exchange/websocket/manager.go b/exchange/websocket/manager.go index 6762b63e..0fafdfc9 100644 --- a/exchange/websocket/manager.go +++ b/exchange/websocket/manager.go @@ -461,7 +461,7 @@ func (m *Manager) connect() error { } if missing := m.subscriptions.Missing(subs); len(missing) > 0 { - return fmt.Errorf("%v %w `%s`", m.exchangeName, ErrSubscriptionsNotAdded, missing) + return fmt.Errorf("%v %w %q", m.exchangeName, ErrSubscriptionsNotAdded, missing) } } return nil @@ -549,7 +549,7 @@ func (m *Manager) connect() error { } if missing := m.connectionManager[i].subscriptions.Missing(subs); len(missing) > 0 { - subscriptionError = common.AppendError(subscriptionError, fmt.Errorf("%v %w `%s`", m.exchangeName, ErrSubscriptionsNotAdded, missing)) + subscriptionError = common.AppendError(subscriptionError, fmt.Errorf("%v %w %q", m.exchangeName, ErrSubscriptionsNotAdded, missing)) continue } diff --git a/exchange/websocket/subscriptions.go b/exchange/websocket/subscriptions.go index 5ff2df4e..8cea5353 100644 --- a/exchange/websocket/subscriptions.go +++ b/exchange/websocket/subscriptions.go @@ -333,7 +333,7 @@ func (m *Manager) updateChannelSubscriptions(c Connection, store *subscription.S } if contained := store.Contained(unsubs); len(contained) > 0 { - return fmt.Errorf("%v %w `%s`", m.exchangeName, ErrSubscriptionsNotRemoved, contained) + return fmt.Errorf("%v %w %q", m.exchangeName, ErrSubscriptionsNotRemoved, contained) } } if len(subs) != 0 { @@ -342,7 +342,7 @@ func (m *Manager) updateChannelSubscriptions(c Connection, store *subscription.S } if missing := store.Missing(subs); len(missing) > 0 { - return fmt.Errorf("%v %w `%s`", m.exchangeName, ErrSubscriptionsNotAdded, missing) + return fmt.Errorf("%v %w %q", m.exchangeName, ErrSubscriptionsNotAdded, missing) } } return nil diff --git a/exchanges/account/account.go b/exchanges/account/account.go index 8f7d20b2..a405cf7e 100644 --- a/exchanges/account/account.go +++ b/exchanges/account/account.go @@ -124,7 +124,7 @@ func GetHoldings(exch string, creds *Credentials, assetType asset.Item) (Holding defer service.mu.Unlock() accounts, ok := service.exchangeAccounts[exch] if !ok { - return Holdings{}, fmt.Errorf("%s %w: `%s`", exch, ErrExchangeHoldingsNotFound, assetType) + return Holdings{}, fmt.Errorf("%s %w: %q", exch, ErrExchangeHoldingsNotFound, assetType) } subAccountHoldings, ok := accounts.subAccounts[*creds] @@ -288,7 +288,7 @@ func (s *Service) Save(incoming *Holdings, creds *Credentials) error { bal = &ProtectedBalance{} } if err := bal.load(accBal); err != nil { - errs = common.AppendError(errs, fmt.Errorf("%w for account ID `%s` [%s %s]: %w", + errs = common.AppendError(errs, fmt.Errorf("%w for account ID %q [%s %s]: %w", errLoadingBalance, incoming.Accounts[x].ID, incoming.Accounts[x].AssetType, diff --git a/exchanges/account/account_test.go b/exchanges/account/account_test.go index 6c7d458e..e2e768cf 100644 --- a/exchanges/account/account_test.go +++ b/exchanges/account/account_test.go @@ -256,17 +256,14 @@ func TestBalanceInternalWait(t *testing.T) { bi = &ProtectedBalance{} waiter, _, err := bi.Wait(time.Nanosecond) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + if !<-waiter { t.Fatal("should been alerted by timeout") } waiter, _, err = bi.Wait(0) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) go bi.notice.Alert() if <-waiter { diff --git a/exchanges/account/credentials_test.go b/exchanges/account/credentials_test.go index 0cf3508a..8a5c490e 100644 --- a/exchanges/account/credentials_test.go +++ b/exchanges/account/credentials_test.go @@ -4,6 +4,7 @@ import ( "errors" "testing" + "github.com/stretchr/testify/require" "google.golang.org/grpc/metadata" ) @@ -32,9 +33,7 @@ func TestParseCredentialsMetadata(t *testing.T) { } _, err = ParseCredentialsMetadata(t.Context(), metadata.MD{}) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) ctx := metadata.AppendToOutgoingContext(t.Context(), string(ContextCredentialsFlag), "wow", string(ContextCredentialsFlag), "wow2") @@ -68,9 +67,7 @@ func TestParseCredentialsMetadata(t *testing.T) { lovelyMD, _ := metadata.FromOutgoingContext(ctx) ctx, err = ParseCredentialsMetadata(t.Context(), lovelyMD) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) store, ok := ctx.Value(ContextCredentialsFlag).(*ContextCredentialsStore) if !ok { @@ -98,9 +95,7 @@ func TestParseCredentialsMetadata(t *testing.T) { lovelyMD, _ = metadata.FromOutgoingContext(ctx) ctx, err = ParseCredentialsMetadata(t.Context(), lovelyMD) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) sa, ok := ctx.Value(ContextSubAccountFlag).(string) if !ok { diff --git a/exchanges/alert/alert_test.go b/exchanges/alert/alert_test.go index cee75bd5..f7ac362a 100644 --- a/exchanges/alert/alert_test.go +++ b/exchanges/alert/alert_test.go @@ -6,6 +6,8 @@ import ( "sync" "testing" "time" + + "github.com/stretchr/testify/require" ) func TestWait(t *testing.T) { @@ -131,9 +133,7 @@ func TestSetPreAllocationCommsBuffer(t *testing.T) { } err = SetPreAllocationCommsBuffer(7) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected '%v'", err, nil) - } + require.NoError(t, err) if getSize() != 7 { t.Fatal("unexpected amount") diff --git a/exchanges/asset/asset_test.go b/exchanges/asset/asset_test.go index a83ffb89..b2256995 100644 --- a/exchanges/asset/asset_test.go +++ b/exchanges/asset/asset_test.go @@ -151,18 +151,14 @@ func TestSupported(t *testing.T) { func TestUnmarshalMarshal(t *testing.T) { t.Parallel() data, err := json.Marshal(Item(0)) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if string(data) != `""` { t.Fatal("unexpected value") } data, err = json.Marshal(Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if string(data) != `"spot"` { t.Fatal("unexpected value") @@ -171,9 +167,7 @@ func TestUnmarshalMarshal(t *testing.T) { var spot Item err = json.Unmarshal(data, &spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if spot != Spot { t.Fatal("unexpected value") @@ -185,14 +179,10 @@ func TestUnmarshalMarshal(t *testing.T) { } err = json.Unmarshal([]byte(`""`), &spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = json.Unmarshal([]byte(`123`), &spot) - if errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", nil, "an error") - } + assert.Error(t, err, "Unmarshal should error correctly") } func TestUseDefault(t *testing.T) { diff --git a/exchanges/binance/binance_live_test.go b/exchanges/binance/binance_live_test.go index e21d570f..a2831504 100644 --- a/exchanges/binance/binance_live_test.go +++ b/exchanges/binance/binance_live_test.go @@ -36,7 +36,7 @@ func TestMain(m *testing.M) { exchange.RestSpot: testnetSpotURL, } { if err := b.API.Endpoints.SetRunning(k.String(), v); err != nil { - log.Fatalf("Testnet `%s` URL error with `%s`: %s", k, v, err) + log.Fatalf("Testnet %q URL error with %q: %s", k, v, err) } } } diff --git a/exchanges/binance/binance_test.go b/exchanges/binance/binance_test.go index 1bbb9874..b974b738 100644 --- a/exchanges/binance/binance_test.go +++ b/exchanges/binance/binance_test.go @@ -85,27 +85,21 @@ func TestWrapperGetServerTime(t *testing.T) { } st, err := b.GetServerTime(t.Context(), asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if st.IsZero() { t.Fatal("expected a time") } st, err = b.GetServerTime(t.Context(), asset.USDTMarginedFutures) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if st.IsZero() { t.Fatal("expected a time") } st, err = b.GetServerTime(t.Context(), asset.CoinMarginedFutures) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if st.IsZero() { t.Fatal("expected a time") @@ -1083,7 +1077,7 @@ func TestGetExchangeInfo(t *testing.T) { require.NoError(t, err, "GetExchangeInfo must not error") if mockTests { exp := time.Date(2024, 5, 10, 6, 8, 1, int(707*time.Millisecond), time.UTC) - assert.True(t, info.ServerTime.Time().Equal(exp), "expected %v received %v", exp.UTC(), info.ServerTime.Time().UTC()) + assert.Truef(t, info.ServerTime.Time().Equal(exp), "expected %v received %v", exp.UTC(), info.ServerTime.Time().UTC()) } else { assert.WithinRange(t, info.ServerTime.Time(), time.Now().Add(-24*time.Hour), time.Now().Add(24*time.Hour), "ServerTime should be within a day of now") } @@ -1984,8 +1978,8 @@ func TestSubscribe(t *testing.T) { mock := func(tb testing.TB, msg []byte, w *gws.Conn) error { tb.Helper() var req WsPayload - require.NoError(tb, json.Unmarshal(msg, &req), "Unmarshal should not error") - require.ElementsMatch(tb, req.Params, exp, "Params should have correct channels") + require.NoError(tb, json.Unmarshal(msg, &req), "Unmarshal must not error") + require.ElementsMatch(tb, req.Params, exp, "Params must have correct channels") return w.WriteMessage(gws.TextMessage, fmt.Appendf(nil, `{"result":null,"id":%d}`, req.ID)) } b = testexch.MockWsInstance[Binance](t, mockws.CurryWsMockUpgrader(t, mock)) @@ -1993,9 +1987,9 @@ func TestSubscribe(t *testing.T) { testexch.SetupWs(t, b) } err = b.Subscribe(channels) - require.NoError(t, err, "Subscribe should not error") + require.NoError(t, err, "Subscribe must not error") err = b.Unsubscribe(channels) - require.NoError(t, err, "Unsubscribe should not error") + require.NoError(t, err, "Unsubscribe must not error") } func TestSubscribeBadResp(t *testing.T) { @@ -2007,7 +2001,7 @@ func TestSubscribeBadResp(t *testing.T) { tb.Helper() var req WsPayload err := json.Unmarshal(msg, &req) - require.NoError(tb, err, "Unmarshal should not error") + require.NoError(tb, err, "Unmarshal must not error") return w.WriteMessage(gws.TextMessage, fmt.Appendf(nil, `{"result":{"error":"carrots"},"id":%d}`, req.ID)) } b := testexch.MockWsInstance[Binance](t, mockws.CurryWsMockUpgrader(t, mock)) //nolint:govet // Intentional shadow to avoid future copy/paste mistakes @@ -2445,7 +2439,7 @@ func TestGenerateSubscriptions(t *testing.T) { } } subs, err := b.generateSubscriptions() - require.NoError(t, err, "generateSubscriptions should not error") + require.NoError(t, err, "generateSubscriptions must not error") testsubs.EqualLists(t, exp, subs) } @@ -2780,38 +2774,38 @@ func TestUpdateOrderExecutionLimits(t *testing.T) { } for _, a := range []asset.Item{asset.CoinMarginedFutures, asset.USDTMarginedFutures} { pairs, err := b.FetchTradablePairs(t.Context(), a) - require.NoErrorf(t, err, "FetchTradablePairs should not error for %s", a) - require.NotEmptyf(t, pairs, "Should get some pairs for %s", a) + require.NoErrorf(t, err, "FetchTradablePairs must not error for %s", a) + require.NotEmptyf(t, pairs, "Must get some pairs for %s", a) tests[a] = pairs[0] } for _, a := range b.GetAssetTypes(false) { err := b.UpdateOrderExecutionLimits(t.Context(), a) - require.NoError(t, err, "UpdateOrderExecutionLimits should not error") + require.NoError(t, err, "UpdateOrderExecutionLimits must not error") p := tests[a] limits, err := b.GetOrderExecutionLimits(a, p) - require.NoErrorf(t, err, "GetOrderExecutionLimits should not error for %s pair %s", a, p) - assert.Positivef(t, limits.MinPrice, "MinPrice must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.MaxPrice, "MaxPrice must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.PriceStepIncrementSize, "PriceStepIncrementSize must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.MinimumBaseAmount, "MinimumBaseAmount must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.MaximumBaseAmount, "MaximumBaseAmount must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.AmountStepIncrementSize, "AmountStepIncrementSize must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.MarketMaxQty, "MarketMaxQty must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.MaxTotalOrders, "MaxTotalOrders must be positive for %s pair %s", a, p) + require.NoErrorf(t, err, "GetOrderExecutionLimits must not error for %s pair %s", a, p) + assert.Positivef(t, limits.MinPrice, "MinPrice should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MaxPrice, "MaxPrice should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.PriceStepIncrementSize, "PriceStepIncrementSize should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MinimumBaseAmount, "MinimumBaseAmount should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MaximumBaseAmount, "MaximumBaseAmount should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.AmountStepIncrementSize, "AmountStepIncrementSize should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MarketMaxQty, "MarketMaxQty should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MaxTotalOrders, "MaxTotalOrders should be positive for %s pair %s", a, p) switch a { case asset.Spot, asset.Margin: - assert.Positivef(t, limits.MaxIcebergParts, "MaxIcebergParts must be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MaxIcebergParts, "MaxIcebergParts should be positive for %s pair %s", a, p) case asset.USDTMarginedFutures: - assert.Positivef(t, limits.MinNotional, "MinNotional must be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MinNotional, "MinNotional should be positive for %s pair %s", a, p) fallthrough case asset.CoinMarginedFutures: - assert.Positivef(t, limits.MultiplierUp, "MultiplierUp must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.MultiplierDown, "MultiplierDown must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.MarketMinQty, "MarketMinQty must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.MarketStepIncrementSize, "MarketStepIncrementSize must be positive for %s pair %s", a, p) - assert.Positivef(t, limits.MaxAlgoOrders, "MaxAlgoOrders must be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MultiplierUp, "MultiplierUp should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MultiplierDown, "MultiplierDown should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MarketMinQty, "MarketMinQty should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MarketStepIncrementSize, "MarketStepIncrementSize should be positive for %s pair %s", a, p) + assert.Positivef(t, limits.MaxAlgoOrders, "MaxAlgoOrders should be positive for %s pair %s", a, p) } } } @@ -2951,28 +2945,20 @@ func TestSetAssetsMode(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, b) is, err := b.GetAssetsMode(t.Context()) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = b.SetAssetsMode(t.Context(), !is) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) err = b.SetAssetsMode(t.Context(), is) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetAssetsMode(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, b) _, err := b.GetAssetsMode(t.Context()) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestGetCollateralMode(t *testing.T) { @@ -2987,9 +2973,7 @@ func TestGetCollateralMode(t *testing.T) { t.Errorf("received '%v', expected '%v'", err, asset.ErrNotSupported) } _, err = b.GetCollateralMode(t.Context(), asset.USDTMarginedFutures) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) } func TestSetCollateralMode(t *testing.T) { @@ -3004,9 +2988,8 @@ func TestSetCollateralMode(t *testing.T) { t.Errorf("received '%v', expected '%v'", err, asset.ErrNotSupported) } err = b.SetCollateralMode(t.Context(), asset.USDTMarginedFutures, collateral.MultiMode) - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) + err = b.SetCollateralMode(t.Context(), asset.USDTMarginedFutures, collateral.PortfolioMode) if !errors.Is(err, order.ErrCollateralInvalid) { t.Errorf("received '%v', expected '%v'", err, order.ErrCollateralInvalid) @@ -3107,18 +3090,14 @@ func TestSetMarginType(t *testing.T) { sharedtestvalues.SkipTestIfCredentialsUnset(t, b, canManipulateRealOrders) err := b.SetMarginType(t.Context(), asset.USDTMarginedFutures, currency.NewBTCUSDT(), margin.Isolated) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) p, err := currency.NewPairFromString("BTCUSD_PERP") if err != nil { t.Fatal(err) } err = b.SetMarginType(t.Context(), asset.CoinMarginedFutures, p, margin.Isolated) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) err = b.SetMarginType(t.Context(), asset.Spot, currency.NewBTCUSDT(), margin.Isolated) if !errors.Is(err, asset.ErrNotSupported) { @@ -3418,13 +3397,10 @@ func TestGetFuturesContractDetails(t *testing.T) { t.Error(err) } _, err = b.GetFuturesContractDetails(t.Context(), asset.USDTMarginedFutures) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + _, err = b.GetFuturesContractDetails(t.Context(), asset.CoinMarginedFutures) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) } func TestGetFundingRateInfo(t *testing.T) { @@ -3470,8 +3446,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, b) for _, a := range b.GetAssetTypes(false) { pairs, err := b.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := b.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/binance/binance_wrapper.go b/exchanges/binance/binance_wrapper.go index 9538c11f..461970f3 100644 --- a/exchanges/binance/binance_wrapper.go +++ b/exchanges/binance/binance_wrapper.go @@ -69,13 +69,13 @@ func (b *Binance) SetDefaults() { for a, ps := range defaultAssetPairStores { if err := b.SetAssetPairStore(a, ps); err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", b.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", b.Name, a, err) } } for _, a := range []asset.Item{asset.Margin, asset.CoinMarginedFutures, asset.USDTMarginedFutures} { if err := b.DisableAssetWebsocketSupport(a); err != nil { - log.Errorf(log.ExchangeSys, "%s error disabling `%s` asset type websocket support: %s", b.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error disabling %q asset type websocket support: %s", b.Name, a, err) } } diff --git a/exchanges/binanceus/binanceus_test.go b/exchanges/binanceus/binanceus_test.go index 963e7e28..96dfd9fd 100644 --- a/exchanges/binanceus/binanceus_test.go +++ b/exchanges/binanceus/binanceus_test.go @@ -1812,8 +1812,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, bi) for _, a := range bi.GetAssetTypes(false) { pairs, err := bi.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := bi.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/bitfinex/bitfinex_test.go b/exchanges/bitfinex/bitfinex_test.go index f613b5fc..e9949cc3 100644 --- a/exchanges/bitfinex/bitfinex_test.go +++ b/exchanges/bitfinex/bitfinex_test.go @@ -212,8 +212,8 @@ func TestGetPlatformStatus(t *testing.T) { func TestGetTickerBatch(t *testing.T) { t.Parallel() ticks, err := b.GetTickerBatch(t.Context()) - require.NoError(t, err, "GetTickerBatch should not error") - require.NotEmpty(t, ticks, "GetTickerBatch should return some ticks") + require.NoError(t, err, "GetTickerBatch must not error") + require.NotEmpty(t, ticks, "GetTickerBatch must return some ticks") require.Contains(t, ticks, "tBTCUSD", "Ticker batch must contain tBTCUSD") checkTradeTick(t, ticks["tBTCUSD"]) require.Contains(t, ticks, "fUSD", "Ticker batch must contain fUSD") @@ -223,7 +223,7 @@ func TestGetTickerBatch(t *testing.T) { func TestGetTicker(t *testing.T) { t.Parallel() tick, err := b.GetTicker(t.Context(), "tBTCUSD") - require.NoError(t, err, "GetTicker should not error") + require.NoError(t, err, "GetTicker must not error") checkTradeTick(t, tick) } @@ -239,7 +239,7 @@ func TestTickerFromResp(t *testing.T) { assert.ErrorContains(t, err, "tBTCUSD", "tickerFromResp should error correctly") tick, err := tickerFromResp("tBTCUSD", []any{1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10}) - require.NoError(t, err, "tickerFromResp should error correctly") + require.NoError(t, err, "tickerFromResp must error correctly") assert.Equal(t, 1.1, tick.Bid, "Tick Bid should be correct") assert.Equal(t, 2.2, tick.BidSize, "Tick BidSize should be correct") assert.Equal(t, 3.3, tick.Ask, "Tick Ask should be correct") @@ -268,7 +268,7 @@ func TestTickerFromFundingResp(t *testing.T) { assert.ErrorContains(t, err, "fBTC", "tickerFromFundingResp should error correctly") tick, err := tickerFromFundingResp("fBTC", []any{1.1, 2.2, 3.0, 4.4, 5.5, 6.0, 7.7, 8.8, 9.9, 10.10, 11.11, 12.12, 13.13, nil, nil, 15.15}) - require.NoError(t, err, "tickerFromFundingResp should error correctly") + require.NoError(t, err, "tickerFromFundingResp must error correctly") assert.Equal(t, 1.1, tick.FlashReturnRate, "Tick FlashReturnRate should be correct") assert.Equal(t, 2.2, tick.Bid, "Tick Bid should be correct") assert.Equal(t, int64(3), tick.BidPeriod, "Tick BidPeriod should be correct") @@ -288,7 +288,7 @@ func TestTickerFromFundingResp(t *testing.T) { func TestGetTickerFunding(t *testing.T) { t.Parallel() tick, err := b.GetTicker(t.Context(), "fUSD") - require.NoError(t, err, "GetTicker should not error") + require.NoError(t, err, "GetTicker must not error") checkFundingTick(t, tick) } @@ -537,13 +537,13 @@ func TestUpdateTickers(t *testing.T) { for _, a := range b.GetAssetTypes(true) { avail, err := b.GetAvailablePairs(a) - require.NoError(t, err, "GetAvailablePairs should not error") + require.NoError(t, err, "GetAvailablePairs must not error") err = b.CurrencyPairs.StorePairs(a, avail, true) - require.NoError(t, err, "StorePairs should not error") + require.NoError(t, err, "StorePairs must not error") err = b.UpdateTickers(t.Context(), a) - require.NoError(t, common.ExcludeError(err, ticker.ErrBidEqualsAsk), "UpdateTickers may only error about locked markets") + require.NoError(t, common.ExcludeError(err, ticker.ErrBidEqualsAsk), "UpdateTickers must only error about locked markets") // Bitfinex leaves delisted pairs in Available info/conf endpoints // We want to assert that most pairs are valid, so we'll check that no more than 5% are erroring @@ -557,7 +557,7 @@ func TestUpdateTickers(t *testing.T) { okay++ } } - if !assert.Greater(t, okay/float64(len(avail))*100.0, acceptableThreshold, "At least %.f%% of %s tickers should not error", acceptableThreshold, a) { + if !assert.Greaterf(t, okay/float64(len(avail))*100.0, acceptableThreshold, "At least %.f%% of %s tickers should not error", acceptableThreshold, a) { assert.NoError(t, errs, "Collection of all the ticker errors") } } @@ -1108,7 +1108,7 @@ func TestWSAuth(t *testing.T) { t.Skip("Authentecated API support not enabled") } testexch.SetupWs(t, b) - require.True(t, b.Websocket.CanUseAuthenticatedEndpoints(), "CanUseAuthenticatedEndpoints should be turned on") + require.True(t, b.Websocket.CanUseAuthenticatedEndpoints(), "CanUseAuthenticatedEndpoints must be turned on") var resp map[string]any catcher := func() (ok bool) { @@ -1135,7 +1135,7 @@ func TestGenerateSubscriptions(t *testing.T) { b.Websocket.SetCanUseAuthenticatedEndpoints(true) require.True(t, b.Websocket.CanUseAuthenticatedEndpoints(), "CanUseAuthenticatedEndpoints must return true") subs, err := b.generateSubscriptions() - require.NoError(t, err, "generateSubscriptions should not error") + require.NoError(t, err, "generateSubscriptions must not error") exp := subscription.List{} for _, baseSub := range b.Features.Subscriptions { for _, a := range b.GetAssetTypes(true) { @@ -1180,7 +1180,7 @@ func TestWSSubscribe(t *testing.T) { require.NoError(t, testexch.Setup(b), "TestInstance must not error") testexch.SetupWs(t, b) err := b.Subscribe(subscription.List{{Channel: subscription.TickerChannel, Pairs: currency.Pairs{currency.NewBTCUSD()}, Asset: asset.Spot}}) - require.NoError(t, err, "Subrcribe should not error") + require.NoError(t, err, "Subrcribe must not error") catcher := func() (ok bool) { i := <-b.Websocket.ToRoutine _, ok = i.(*ticker.Price) @@ -1189,11 +1189,11 @@ func TestWSSubscribe(t *testing.T) { assert.Eventually(t, catcher, sharedtestvalues.WebsocketResponseDefaultTimeout, time.Millisecond*10, "Ticker response should arrive") subs, err := b.GetSubscriptions() - require.NoError(t, err, "GetSubscriptions should not error") - require.Len(t, subs, 1, "We should only have 1 subscription; subID subscription should have been Removed by subscribeToChan") + require.NoError(t, err, "GetSubscriptions must not error") + require.Len(t, subs, 1, "We must only have 1 subscription; subID subscription must have been Removed by subscribeToChan") err = b.Subscribe(subscription.List{{Channel: subscription.TickerChannel, Pairs: currency.Pairs{currency.NewBTCUSD()}, Asset: asset.Spot}}) - require.ErrorContains(t, err, "subscribe: dup (code: 10301)", "Duplicate subscription should error correctly") + require.ErrorContains(t, err, "subscribe: dup (code: 10301)", "Duplicate subscription must error correctly") assert.EventuallyWithT(t, func(t *assert.CollectT) { i := <-b.Websocket.ToRoutine @@ -1203,8 +1203,8 @@ func TestWSSubscribe(t *testing.T) { }, sharedtestvalues.WebsocketResponseDefaultTimeout, time.Millisecond*10, "error response should go to ToRoutine") subs, err = b.GetSubscriptions() - require.NoError(t, err, "GetSubscriptions should not error") - require.Len(t, subs, 1, "We should only have one subscription after an error attempt") + require.NoError(t, err, "GetSubscriptions must not error") + require.Len(t, subs, 1, "We must only have one subscription after an error attempt") err = b.Unsubscribe(subs) assert.NoError(t, err, "Unsubscribing should not error") @@ -1702,9 +1702,7 @@ func TestFixCasing(t *testing.T) { } _, err = b.fixCasing(currency.NewPair(currency.BTC, currency.EMPTYCODE), asset.MarginFunding) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) _, err = b.fixCasing(currency.EMPTYPAIR, asset.MarginFunding) if !errors.Is(err, currency.ErrCurrencyPairEmpty) { @@ -1938,9 +1936,7 @@ func TestGetSiteListConfigData(t *testing.T) { } pairs, err := b.GetSiteListConfigData(t.Context(), bitfinexSecuritiesPairs) - if !errors.Is(err, nil) { - t.Fatalf("received: %v, expected: %v", err, nil) - } + require.NoError(t, err) if len(pairs) == 0 { t.Fatal("expected pairs") @@ -1951,9 +1947,8 @@ func TestGetSiteInfoConfigData(t *testing.T) { t.Parallel() for _, assetType := range []asset.Item{asset.Spot, asset.Futures} { pairs, err := b.GetSiteInfoConfigData(t.Context(), assetType) - if !errors.Is(err, nil) { - t.Errorf("Error from GetSiteInfoConfigData for %s type received: %v, expected: %v", assetType, err, nil) - } + assert.NoError(t, err) + if len(pairs) == 0 { t.Errorf("GetSiteInfoConfigData returned no pairs for %s", assetType) } @@ -2030,8 +2025,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, b) for _, a := range b.GetAssetTypes(false) { pairs, err := b.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := b.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/bitfinex/bitfinex_websocket.go b/exchanges/bitfinex/bitfinex_websocket.go index 22996dd1..91f2a270 100644 --- a/exchanges/bitfinex/bitfinex_websocket.go +++ b/exchanges/bitfinex/bitfinex_websocket.go @@ -962,7 +962,7 @@ func (b *Bitfinex) handleWSAllTrades(s *subscription.Subscription, respRaw []byt return fmt.Errorf("%w `tradesSnapshot`: %w", common.ErrParsingWSField, err) } default: - return fmt.Errorf("%w `tradesUpdate[1]`: %w `%s`", common.ErrParsingWSField, jsonparser.UnknownValueTypeError, valueType) + return fmt.Errorf("%w `tradesUpdate[1]`: %w %q", common.ErrParsingWSField, jsonparser.UnknownValueTypeError, valueType) } trades := make([]trade.Data, len(wsTrades)) for _, w := range wsTrades { diff --git a/exchanges/bitfinex/bitfinex_wrapper.go b/exchanges/bitfinex/bitfinex_wrapper.go index 49b5ddbb..343898cf 100644 --- a/exchanges/bitfinex/bitfinex_wrapper.go +++ b/exchanges/bitfinex/bitfinex_wrapper.go @@ -51,13 +51,13 @@ func (b *Bitfinex) SetDefaults() { ps.ConfigFormat.Delimiter = ":" } if err := b.SetAssetPairStore(a, ps); err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", b.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", b.Name, a, err) } } // Margin WS Currently not fully implemented and causes subscription collisions with spot if err := b.DisableAssetWebsocketSupport(asset.Margin); err != nil { - log.Errorf(log.ExchangeSys, "%s error disabling `%s` asset type websocket support: %s", b.Name, asset.Margin, err) + log.Errorf(log.ExchangeSys, "%s error disabling %q asset type websocket support: %s", b.Name, asset.Margin, err) } // TODO: Implement Futures and Securities asset types. @@ -703,9 +703,7 @@ func (b *Bitfinex) parseOrderToOrderDetail(o *Order) (*order.Detail, error) { var timestamp float64 timestamp, err = strconv.ParseFloat(o.Timestamp, 64) if err != nil { - log.Warnf(log.ExchangeSys, - "%s Unable to convert timestamp '%s', leaving blank", - b.Name, o.Timestamp) + log.Warnf(log.ExchangeSys, "%s Unable to convert timestamp %q, leaving blank", b.Name, o.Timestamp) } var pair currency.Pair diff --git a/exchanges/bitflyer/bitflyer_test.go b/exchanges/bitflyer/bitflyer_test.go index 4405f0b8..1ce0303f 100644 --- a/exchanges/bitflyer/bitflyer_test.go +++ b/exchanges/bitflyer/bitflyer_test.go @@ -444,8 +444,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { require.NoError(t, err, "SetAssetEnabled must not error") for _, a := range b.GetAssetTypes(false) { pairs, err := b.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := b.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err, "GetCurrencyTradeURL must not error") assert.NotEmpty(t, resp, "GetCurrencyTradeURL should return an url") diff --git a/exchanges/bithumb/bithumb_test.go b/exchanges/bithumb/bithumb_test.go index cfd632a7..abfb2b61 100644 --- a/exchanges/bithumb/bithumb_test.go +++ b/exchanges/bithumb/bithumb_test.go @@ -105,7 +105,7 @@ func TestGetAccountInformation(t *testing.T) { sharedtestvalues.SkipTestIfCredentialsUnset(t, b) _, err = b.GetAccountInformation(t.Context(), testPair.Base.String(), testPair.Quote.String()) - require.NoError(t, err, "GetAccountInformation should not error") + assert.NoError(t, err, "GetAccountInformation should not error") } func TestGetAccountBalance(t *testing.T) { @@ -400,7 +400,7 @@ func TestCancelAllExchangeOrders(t *testing.T) { resp, err := b.CancelAllOrders(t.Context(), orderCancellation) require.NoError(t, err, "CancelAllOrders must not error") - assert.Empty(t, resp.Status, "%v orders failed to cancel", len(resp.Status)) + assert.Emptyf(t, resp.Status, "%v orders failed to cancel", len(resp.Status)) } func TestGetAccountInfo(t *testing.T) { @@ -539,10 +539,10 @@ func TestUpdateOrderExecutionLimits(t *testing.T) { require.NoError(t, err, "GetOrderExecutionLimits must not error") err = limit.Conforms(46241000, 0.00001, order.Limit) - assert.ErrorIs(t, err, order.ErrAmountBelowMin, "expected error: %v, but got: %v", order.ErrAmountBelowMin, err) + assert.ErrorIs(t, err, order.ErrAmountBelowMin) err = limit.Conforms(46241000, 0.0001, order.Limit) - assert.NoError(t, err, "expected no error, but got: %v", err) + assert.NoError(t, err, "Conforms should not error") } func TestGetAmountMinimum(t *testing.T) { @@ -588,7 +588,7 @@ func TestGetAmountMinimum(t *testing.T) { t.Run(tt.name, func(t *testing.T) { t.Parallel() minAmount := getAmountMinimum(tt.unitprice) - assert.Equal(t, tt.expected, minAmount, "minAmount should be correct for %s", tt.unitprice) + assert.Equalf(t, tt.expected, minAmount, "minAmount should be correct for %s", tt.unitprice) }) } } @@ -624,7 +624,7 @@ func TestGetWithdrawalsHistory(t *testing.T) { sharedtestvalues.SkipTestIfCredentialsUnset(t, b) _, err := b.GetWithdrawalsHistory(t.Context(), testPair.Base, asset.Spot) - require.NoError(t, err, "TestGetWithdrawalsHistory must not error") + require.NoError(t, err, "GetWithdrawalsHistory must not error") } func TestGetOrderInfo(t *testing.T) { @@ -648,8 +648,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, b) for _, a := range b.GetAssetTypes(false) { pairs, err := b.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := b.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/bitmex/bitmex_test.go b/exchanges/bitmex/bitmex_test.go index 0c34c1dd..a81dfe31 100644 --- a/exchanges/bitmex/bitmex_test.go +++ b/exchanges/bitmex/bitmex_test.go @@ -1090,8 +1090,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, b) for _, a := range b.GetAssetTypes(false) { pairs, err := b.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := b.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) @@ -1143,12 +1143,12 @@ func TestSubscribe(t *testing.T) { require.NoError(t, err, "generateSubscriptions must not error") testexch.SetupWs(t, b) err = b.Subscribe(subs) - require.NoError(t, err, "Subscribe should not error") + require.NoError(t, err, "Subscribe must not error") for _, s := range subs { assert.Equalf(t, subscription.SubscribedState, s.State(), "%s state should be subscribed", s.QualifiedChannel) } err = b.Unsubscribe(subs) - require.NoError(t, err, "Unsubscribe should not error") + require.NoError(t, err, "Unsubscribe must not error") for _, s := range subs { assert.Equalf(t, subscription.UnsubscribedState, s.State(), "%s state should be unsusbscribed", s.QualifiedChannel) } diff --git a/exchanges/bitmex/bitmex_wrapper.go b/exchanges/bitmex/bitmex_wrapper.go index accb13d5..d7764455 100644 --- a/exchanges/bitmex/bitmex_wrapper.go +++ b/exchanges/bitmex/bitmex_wrapper.go @@ -52,12 +52,12 @@ func (b *Bitmex) SetDefaults() { ps.RequestFormat.Delimiter = currency.UnderscoreDelimiter } if err := b.SetAssetPairStore(a, ps); err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", b.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", b.Name, a, err) } } if err := b.DisableAssetWebsocketSupport(asset.Index); err != nil { - log.Errorf(log.ExchangeSys, "%s error disabling `%s` asset type websocket support: %s", b.Name, asset.Index, err) + log.Errorf(log.ExchangeSys, "%s error disabling %q asset type websocket support: %s", b.Name, asset.Index, err) } b.Features = exchange.Features{ diff --git a/exchanges/bitstamp/bitstamp_test.go b/exchanges/bitstamp/bitstamp_test.go index 5069d9c7..e084e026 100644 --- a/exchanges/bitstamp/bitstamp_test.go +++ b/exchanges/bitstamp/bitstamp_test.go @@ -387,7 +387,7 @@ func TestGetOrderStatus(t *testing.T) { if !mockTests { assert.ErrorContains(t, err, "Order not found") } else { - require.NoError(t, err, "TestGetOrderStatus must not error") + require.NoError(t, err, "GetOrderStatus must not error") assert.Equal(t, "2022-01-31 14:43:15", o.DateTime, "DateTime should match") assert.Equal(t, "1458532827766784", o.ID, "OrderID should match") assert.Equal(t, 200.00, o.AmountRemaining, "AmountRemaining should match") @@ -576,9 +576,8 @@ func TestCancelAllExchangeOrders(t *testing.T) { if !mockTests { sharedtestvalues.SkipTestIfCredentialsUnset(t, b, canManipulateRealOrders) } - resp, err := b.CancelAllOrders(t.Context(), - &order.Cancel{AssetType: asset.Spot}) - require.NoError(t, err, "TestCancelAllExchangeOrders must not error") + resp, err := b.CancelAllOrders(t.Context(), &order.Cancel{AssetType: asset.Spot}) + require.NoError(t, err, "CancelAllOrders must not error") if len(resp.Status) > 0 { t.Errorf("%v orders failed to cancel", len(resp.Status)) } @@ -1031,8 +1030,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, b) for _, a := range b.GetAssetTypes(false) { pairs, err := b.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := b.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/btcmarkets/btcmarkets_test.go b/exchanges/btcmarkets/btcmarkets_test.go index e1beacd8..70b9c6fd 100644 --- a/exchanges/btcmarkets/btcmarkets_test.go +++ b/exchanges/btcmarkets/btcmarkets_test.go @@ -140,9 +140,7 @@ func TestGetCurrentServerTime(t *testing.T) { func TestWrapperGetServerTime(t *testing.T) { t.Parallel() st, err := b.GetServerTime(t.Context(), asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if st.IsZero() { t.Fatal("expected a time") @@ -924,45 +922,35 @@ func TestFormatOrderType(t *testing.T) { } r, err := b.formatOrderType(order.Limit) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if r != limit { t.Fatal("unexpected value") } r, err = b.formatOrderType(order.Market) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if r != market { t.Fatal("unexpected value") } r, err = b.formatOrderType(order.StopLimit) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if r != stopLimit { t.Fatal("unexpected value") } r, err = b.formatOrderType(order.Stop) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if r != stop { t.Fatal("unexpected value") } r, err = b.formatOrderType(order.TakeProfit) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if r != takeProfit { t.Fatal("unexpected value") @@ -977,18 +965,14 @@ func TestFormatOrderSide(t *testing.T) { } f, err := b.formatOrderSide(order.Bid) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if f != bidSide { t.Fatal("unexpected value") } f, err = b.formatOrderSide(order.Ask) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if f != askSide { t.Fatal("unexpected value") @@ -1027,9 +1011,7 @@ func TestReplaceOrder(t *testing.T) { sharedtestvalues.SkipTestIfCredentialsUnset(t, b, canManipulateRealOrders) _, err = b.ReplaceOrder(t.Context(), "8207096301", "bruh", 100000, 0.001) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestWrapperModifyOrder(t *testing.T) { @@ -1049,9 +1031,7 @@ func TestWrapperModifyOrder(t *testing.T) { OrderID: "8207123461", ClientOrderID: "bruh3", }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if mo == nil { t.Fatal("expected data return") @@ -1066,14 +1046,10 @@ func TestUpdateOrderExecutionLimits(t *testing.T) { } err = b.UpdateOrderExecutionLimits(t.Context(), asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) lim, err := b.ExecutionLimits.GetOrderExecutionLimits(asset.Spot, currency.NewPair(currency.BTC, currency.AUD)) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if lim == (order.MinMaxLevel{}) { t.Fatal("expected value return") @@ -1091,9 +1067,7 @@ func TestConvertToKlineCandle(t *testing.T) { data := [6]string{time.RFC3339[:len(time.RFC3339)-5], "1.0", "2", "3", "4", "5"} candle, err := convertToKlineCandle(&data) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if candle.Time.IsZero() { t.Fatal("time unset") @@ -1149,8 +1123,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, b) for _, a := range b.GetAssetTypes(false) { pairs, err := b.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := b.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/btcmarkets/btcmarkets_websocket.go b/exchanges/btcmarkets/btcmarkets_websocket.go index 8e9fd56d..ed701457 100644 --- a/exchanges/btcmarkets/btcmarkets_websocket.go +++ b/exchanges/btcmarkets/btcmarkets_websocket.go @@ -209,7 +209,7 @@ func (b *BTCMarkets) wsHandleData(respRaw []byte) error { case t.Side.IsShort(): side = order.Sell default: - return fmt.Errorf("%w: `%s`", order.ErrSideIsInvalid, t.Side) + return fmt.Errorf("%w: %q", order.ErrSideIsInvalid, t.Side) } td := trade.Data{ diff --git a/exchanges/btse/btse_test.go b/exchanges/btse/btse_test.go index 3ebeab6d..550cd30f 100644 --- a/exchanges/btse/btse_test.go +++ b/exchanges/btse/btse_test.go @@ -558,7 +558,7 @@ func TestStatusToStandardStatus(t *testing.T) { if tt.Result != order.UnknownStatus { assert.NoErrorf(t, err, "stringToOrderStatus should not error for %s", tt.Case) } - assert.Equal(t, tt.Result, result, "stringToOrderStatus should return correct value for %s", tt.Case) + assert.Equalf(t, tt.Result, result, "stringToOrderStatus should return correct value for %s", tt.Case) } } @@ -602,11 +602,11 @@ func TestUpdateOrderExecutionLimits(t *testing.T) { for _, p := range pairs { limits, err := b.GetOrderExecutionLimits(a, p) require.NoErrorf(t, err, "GetOrderExecutionLimits must not error for %s %s", a, p) - assert.Positivef(t, limits.MinimumBaseAmount, "MinimumBaseAmount must be positive for %s %s", a, p) - assert.Positivef(t, limits.MaximumBaseAmount, "MaximumBaseAmount must be positive for %s %s", a, p) - assert.Positivef(t, limits.AmountStepIncrementSize, "AmountStepIncrementSize must be positive for %s %s", a, p) - assert.Positivef(t, limits.MinPrice, "MinPrice must be positive for %s %s", a, p) - assert.Positivef(t, limits.PriceStepIncrementSize, "PriceStepIncrementSize must be positive for %s %s", a, p) + assert.Positivef(t, limits.MinimumBaseAmount, "MinimumBaseAmount should be positive for %s %s", a, p) + assert.Positivef(t, limits.MaximumBaseAmount, "MaximumBaseAmount should be positive for %s %s", a, p) + assert.Positivef(t, limits.AmountStepIncrementSize, "AmountStepIncrementSize should be positive for %s %s", a, p) + assert.Positivef(t, limits.MinPrice, "MinPrice should be positive for %s %s", a, p) + assert.Positivef(t, limits.PriceStepIncrementSize, "PriceStepIncrementSize should be positive for %s %s", a, p) } } } @@ -759,8 +759,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, b) for _, a := range b.GetAssetTypes(false) { pairs, err := b.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := b.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) @@ -827,5 +827,5 @@ func TestGenerateSubscriptions(t *testing.T) { testsubs.EqualLists(t, exp, subs) _, err = subscription.List{{Channel: subscription.OrderbookChannel}}.ExpandTemplates(b) - assert.ErrorContains(t, err, "Channel not supported", "Sub template must error on unsupported channels") + assert.ErrorContains(t, err, "Channel not supported", "Sub template should error on unsupported channels") } diff --git a/exchanges/btse/btse_wrapper.go b/exchanges/btse/btse_wrapper.go index 910a971e..7d5df7db 100644 --- a/exchanges/btse/btse_wrapper.go +++ b/exchanges/btse/btse_wrapper.go @@ -55,7 +55,7 @@ func (b *BTSE) SetDefaults() { ps.RequestFormat.Delimiter = currency.DashDelimiter } if err := b.SetAssetPairStore(a, ps); err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", b.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", b.Name, a, err) } } diff --git a/exchanges/bybit/bybit_test.go b/exchanges/bybit/bybit_test.go index 464e4c63..d1f4adc3 100644 --- a/exchanges/bybit/bybit_test.go +++ b/exchanges/bybit/bybit_test.go @@ -1686,11 +1686,11 @@ func TestGetWalletBalance(t *testing.T) { } r, err := b.GetWalletBalance(t.Context(), "UNIFIED", "") - require.NoError(t, err, "GetWalletBalance should not error") - require.NotNil(t, r, "GetWalletBalance should return a result") + require.NoError(t, err, "GetWalletBalance must not error") + require.NotNil(t, r, "GetWalletBalance must return a result") if mockTests { - require.Len(t, r.List, 1, "GetWalletBalance should return a single list result") + require.Len(t, r.List, 1, "GetWalletBalance must return a single list result") assert.Equal(t, types.Number(0.1997), r.List[0].AccountIMRate, "AccountIMRate should match") assert.Equal(t, types.Number(0.4996), r.List[0].AccountLTV, "AccountLTV should match") assert.Equal(t, types.Number(0.0399), r.List[0].AccountMMRate, "AccountMMRate should match") @@ -1702,7 +1702,7 @@ func TestGetWalletBalance(t *testing.T) { assert.Equal(t, types.Number(30760.96712284), r.List[0].TotalMarginBalance, "TotalMarginBalance should match") assert.Equal(t, types.Number(0.0), r.List[0].TotalPerpUPL, "TotalPerpUPL should match") assert.Equal(t, types.Number(30760.96712284), r.List[0].TotalWalletBalance, "TotalWalletBalance should match") - require.Len(t, r.List[0].Coin, 3, "GetWalletBalance should return 3 coins") + require.Len(t, r.List[0].Coin, 3, "GetWalletBalance must return 3 coins") for x := range r.List[0].Coin { switch x { @@ -3015,12 +3015,12 @@ func TestUpdateAccountInfo(t *testing.T) { } r, err := b.UpdateAccountInfo(t.Context(), asset.Spot) - require.NoError(t, err, "UpdateAccountInfo should not error") - require.NotEmpty(t, r, "UpdateAccountInfo should return account info") + require.NoError(t, err, "UpdateAccountInfo must not error") + require.NotEmpty(t, r, "UpdateAccountInfo must return account info") if mockTests { - require.Len(t, r.Accounts, 1, "Accounts should have 1 item") - require.Len(t, r.Accounts[0].Currencies, 3, "Accounts currencies should have 3 currency items") + require.Len(t, r.Accounts, 1, "Accounts must have 1 item") + require.Len(t, r.Accounts[0].Currencies, 3, "Accounts currencies must have 3 currency items") for x := range r.Accounts[0].Currencies { switch x { @@ -3458,17 +3458,13 @@ func TestGetFuturesContractDetails(t *testing.T) { t.Error(err) } _, err = b.GetFuturesContractDetails(t.Context(), asset.CoinMarginedFutures) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + _, err = b.GetFuturesContractDetails(t.Context(), asset.USDTMarginedFutures) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + _, err = b.GetFuturesContractDetails(t.Context(), asset.USDCMarginedFutures) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) } func TestFetchTradablePairs(t *testing.T) { @@ -3732,8 +3728,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, b) for _, a := range b.GetAssetTypes(false) { pairs, err := b.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := b.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/bybit/bybit_wrapper.go b/exchanges/bybit/bybit_wrapper.go index 88a52549..96dce64f 100644 --- a/exchanges/bybit/bybit_wrapper.go +++ b/exchanges/bybit/bybit_wrapper.go @@ -63,13 +63,13 @@ func (by *Bybit) SetDefaults() { for _, n := range assetPairFmts { ps := currency.PairStore{AssetEnabled: true, RequestFormat: n.reqFmt, ConfigFormat: n.cfgFmt} if err := by.SetAssetPairStore(n.asset, ps); err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", by.Name, n.asset, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", by.Name, n.asset, err) } } for _, a := range []asset.Item{asset.CoinMarginedFutures, asset.USDTMarginedFutures, asset.USDCMarginedFutures, asset.Options} { if err := by.DisableAssetWebsocketSupport(a); err != nil { - log.Errorf(log.ExchangeSys, "%s error disabling `%s` asset type websocket support: %s", by.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error disabling %q asset type websocket support: %s", by.Name, a, err) } } diff --git a/exchanges/coinbasepro/coinbasepro_test.go b/exchanges/coinbasepro/coinbasepro_test.go index 0ec2050c..2249cb0c 100644 --- a/exchanges/coinbasepro/coinbasepro_test.go +++ b/exchanges/coinbasepro/coinbasepro_test.go @@ -1,7 +1,6 @@ package coinbasepro import ( - "errors" "net/http" "os" "testing" @@ -120,9 +119,7 @@ func TestGetCurrentServerTime(t *testing.T) { func TestWrapperGetServerTime(t *testing.T) { t.Parallel() st, err := c.GetServerTime(t.Context(), asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if st.IsZero() { t.Fatal("expected a time") @@ -1031,8 +1028,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, c) for _, a := range c.GetAssetTypes(false) { pairs, err := c.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := c.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/coinut/coinut_test.go b/exchanges/coinut/coinut_test.go index 48a15bab..c1884ce9 100644 --- a/exchanges/coinut/coinut_test.go +++ b/exchanges/coinut/coinut_test.go @@ -1152,8 +1152,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, c) for _, a := range c.GetAssetTypes(false) { pairs, err := c.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := c.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/credentials_test.go b/exchanges/credentials_test.go index e85bbb49..49f4229b 100644 --- a/exchanges/credentials_test.go +++ b/exchanges/credentials_test.go @@ -48,9 +48,8 @@ func TestGetCredentials(t *testing.T) { Secret: "aGVsbG8gd29ybGQ=", }) creds, err := b.GetCredentials(ctx) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) + if creds.Secret != expectedBase64DecodedOutput { t.Fatalf("received: %v but expected: %v", creds.Secret, expectedBase64DecodedOutput) } @@ -71,9 +70,7 @@ func TestGetCredentials(t *testing.T) { ctx = account.DeployCredentialsToContext(t.Context(), fullCred) creds, err = b.GetCredentials(ctx) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) if creds.Key != "superkey" && creds.Secret != "supersecret" && @@ -105,9 +102,7 @@ func TestGetCredentials(t *testing.T) { ctx = context.WithValue(t.Context(), account.ContextSubAccountFlag, "superaccount") overridedSA, err := b.GetCredentials(ctx) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) if overridedSA.Key != "hello" && overridedSA.Secret != "sir" && @@ -117,9 +112,7 @@ func TestGetCredentials(t *testing.T) { } notOverrided, err := b.GetCredentials(t.Context()) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) if notOverrided.Key != "hello" && notOverrided.Secret != "sir" && diff --git a/exchanges/currencystate/currency_state_test.go b/exchanges/currencystate/currency_state_test.go index 2e976a0d..9d8de761 100644 --- a/exchanges/currencystate/currency_state_test.go +++ b/exchanges/currencystate/currency_state_test.go @@ -5,6 +5,7 @@ import ( "sync" "testing" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/common/convert" "github.com/thrasher-corp/gocryptotrader/currency" "github.com/thrasher-corp/gocryptotrader/exchanges/asset" @@ -32,9 +33,7 @@ func TestGetSnapshot(t *testing.T) { }}, }, }).GetCurrencyStateSnapshot() - if !errors.Is(err, nil) { - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) if o == nil { t.Fatal("unexpected value") @@ -60,9 +59,8 @@ func TestCanTradePair(t *testing.T) { } err = (&States{}).CanTradePair(cp, asset.Spot) - if !errors.Is(err, nil) { // not found but default to operational - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) + // not found but default to operational err = (&States{ m: map[asset.Item]map[*currency.Item]*Currency{ @@ -72,9 +70,7 @@ func TestCanTradePair(t *testing.T) { }, }, }).CanTradePair(cp, asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) err = (&States{ m: map[asset.Item]map[*currency.Item]*Currency{ @@ -143,9 +139,7 @@ func TestStatesCanWithdraw(t *testing.T) { }, }, }).CanWithdraw(currency.BTC, asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) err = (&States{ m: map[asset.Item]map[*currency.Item]*Currency{ @@ -177,9 +171,7 @@ func TestStatesCanDeposit(t *testing.T) { }, }, }).CanDeposit(currency.BTC, asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) err = (&States{ m: map[asset.Item]map[*currency.Item]*Currency{ @@ -221,24 +213,17 @@ func TestStatesUpdateAll(t *testing.T) { Deposit: convert.BoolPtr(true), }, }) - - if !errors.Is(err, nil) { - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) err = s.UpdateAll(asset.Spot, map[currency.Code]Options{currency.BTC: { Withdraw: convert.BoolPtr(false), Deposit: convert.BoolPtr(false), Trade: convert.BoolPtr(false), }}) - if !errors.Is(err, nil) { - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) c, err := s.Get(currency.BTC, asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) if c.CanDeposit() || c.CanTrade() || c.CanWithdraw() { t.Fatal() @@ -267,9 +252,7 @@ func TestStatesUpdate(t *testing.T) { asset.Spot: {currency.BTC.Item: &Currency{}}, }, }).Update(currency.BTC, asset.Spot, Options{}) - if !errors.Is(err, nil) { - t.Fatalf("received: %v, but expected: %v", err, nil) - } + require.NoError(t, err) } func TestStatesGet(t *testing.T) { diff --git a/exchanges/deribit/deribit_test.go b/exchanges/deribit/deribit_test.go index 216f6d6c..7473194d 100644 --- a/exchanges/deribit/deribit_test.go +++ b/exchanges/deribit/deribit_test.go @@ -4117,7 +4117,7 @@ func TestGetValidatedCurrencyCode(t *testing.T) { } for x := range pairs { result := getValidatedCurrencyCode(x) - require.Equal(t, pairs[x], result, "expected: %s actual : %s for currency pair: %v", x, result, pairs[x]) + require.Equalf(t, pairs[x], result, "expected: %s actual : %s for currency pair: %v", x, result, pairs[x]) } } @@ -4129,8 +4129,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { for _, a := range d.GetAssetTypes(false) { var pairs currency.Pairs pairs, err = d.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) var resp string resp, err = d.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) diff --git a/exchanges/deribit/deribit_websocket.go b/exchanges/deribit/deribit_websocket.go index ca449ee4..6726142a 100644 --- a/exchanges/deribit/deribit_websocket.go +++ b/exchanges/deribit/deribit_websocket.go @@ -855,7 +855,7 @@ func (d *Deribit) handleSubscription(method string, subs subscription.List) erro } for key := range subAck { - err = common.AppendError(err, fmt.Errorf("unexpected channel `%s` in result", key)) + err = common.AppendError(err, fmt.Errorf("unexpected channel %q in result", key)) } return err diff --git a/exchanges/deribit/deribit_wrapper.go b/exchanges/deribit/deribit_wrapper.go index 80fea157..b8d9b3f1 100644 --- a/exchanges/deribit/deribit_wrapper.go +++ b/exchanges/deribit/deribit_wrapper.go @@ -44,11 +44,11 @@ func (d *Deribit) SetDefaults() { dashFormat := ¤cy.PairFormat{Uppercase: true, Delimiter: currency.DashDelimiter} underscoreFormat := ¤cy.PairFormat{Uppercase: true, Delimiter: currency.UnderscoreDelimiter} if err := d.SetAssetPairStore(asset.Spot, currency.PairStore{AssetEnabled: true, RequestFormat: underscoreFormat, ConfigFormat: underscoreFormat}); err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", d.Name, asset.Spot, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", d.Name, asset.Spot, err) } for _, a := range []asset.Item{asset.Futures, asset.Options, asset.OptionCombo, asset.FutureCombo} { if err := d.SetAssetPairStore(a, currency.PairStore{AssetEnabled: true, RequestFormat: dashFormat, ConfigFormat: dashFormat}); err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", d.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", d.Name, a, err) } } @@ -1447,7 +1447,7 @@ func (d *Deribit) GetLatestFundingRates(ctx context.Context, r *fundingrate.Late return nil, err } if !isPerpetual { - return nil, fmt.Errorf("%w '%s'", futures.ErrNotPerpetualFuture, r.Pair) + return nil, fmt.Errorf("%w %q", futures.ErrNotPerpetualFuture, r.Pair) } pFmt, err := d.CurrencyPairs.GetFormat(r.Asset, true) if err != nil { diff --git a/exchanges/exchange.go b/exchanges/exchange.go index e589bc6c..f3900991 100644 --- a/exchanges/exchange.go +++ b/exchanges/exchange.go @@ -1429,7 +1429,7 @@ func getURLTypeFromString(ep string) (URL, error) { case edgeCase3URL: return EdgeCase3, nil default: - return Invalid, fmt.Errorf("%w '%s'", errEndpointStringNotFound, ep) + return Invalid, fmt.Errorf("%w %q", errEndpointStringNotFound, ep) } } diff --git a/exchanges/exchange_test.go b/exchanges/exchange_test.go index 7ad67d0b..71a3a263 100644 --- a/exchanges/exchange_test.go +++ b/exchanges/exchange_test.go @@ -726,7 +726,7 @@ func TestGetPairs(t *testing.T) { c, err := b.GetAvailablePairs(asset.Spot) require.NoError(t, err, "GetAvailablePairs must not error") require.Len(t, c, 1, "Must have one enabled pair") - assert.Equal(t, "BTC"+d+"USD", c[0].String(), "GetAvailablePairs format must use config format") + assert.Equal(t, "BTC"+d+"USD", c[0].String(), "GetAvailablePairs format should use config format") require.NoError(t, b.CurrencyPairs.StorePairs(asset.Spot, currency.Pairs{btcusdPair}, true), "StorePairs must not error for enabled pairs") require.NoError(t, b.CurrencyPairs.SetAssetEnabled(asset.Spot, true), "SetAssetEnabled must not error") @@ -734,7 +734,7 @@ func TestGetPairs(t *testing.T) { c, err = b.GetEnabledPairs(asset.Spot) require.NoError(t, err, "GetEnabledPairs must not error") require.Len(t, c, 1, "Must have one enabled pair") - assert.Equal(t, "BTC"+d+"USD", c[0].String(), "GetEnabledPairs format must use config format") + assert.Equal(t, "BTC"+d+"USD", c[0].String(), "GetEnabledPairs format should use config format") } } @@ -1083,9 +1083,7 @@ func TestUpdatePairs(t *testing.T) { currency.NewPair(currency.LTC, currency.USDT), } err = UAC.UpdatePairs(pairs, asset.Spot, true, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) pairs = currency.Pairs{ currency.NewPair(currency.WABI, currency.USD), @@ -1094,9 +1092,7 @@ func TestUpdatePairs(t *testing.T) { currency.NewPair(currency.LTC, currency.USDT), } err = UAC.UpdatePairs(pairs, asset.Spot, false, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) uacEnabledPairs, err := UAC.GetEnabledPairs(asset.Spot) if err != nil { @@ -1117,9 +1113,7 @@ func TestUpdatePairs(t *testing.T) { // This should be matched and formatted to `link-usd` unintentionalInput, err := currency.NewPairFromString("linkusd") - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) pairs = currency.Pairs{ currency.NewPair(currency.WABI, currency.USD), @@ -1130,9 +1124,7 @@ func TestUpdatePairs(t *testing.T) { } err = UAC.UpdatePairs(pairs, asset.Spot, true, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) pairs = currency.Pairs{ currency.NewPair(currency.WABI, currency.USD), @@ -1143,9 +1135,7 @@ func TestUpdatePairs(t *testing.T) { } err = UAC.UpdatePairs(pairs, asset.Spot, false, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) uacEnabledPairs, err = UAC.GetEnabledPairs(asset.Spot) if err != nil { @@ -1460,8 +1450,8 @@ func TestSetGlobalPairsManager(t *testing.T) { err = b.SetGlobalPairsManager(¤cy.PairFormat{Uppercase: true}, ¤cy.PairFormat{Uppercase: true, Delimiter: currency.DashDelimiter}, asset.Spot, asset.Binary) require.NoError(t, err, "SetGlobalPairsManager must not error") - assert.True(t, b.SupportsAsset(asset.Binary), "Pairs Manager must support Binary") - assert.True(t, b.SupportsAsset(asset.Spot), "Pairs Manager must support Spot") + assert.True(t, b.SupportsAsset(asset.Binary), "Pairs Manager should support Binary") + assert.True(t, b.SupportsAsset(asset.Spot), "Pairs Manager should support Spot") err = b.SetGlobalPairsManager(¤cy.PairFormat{Uppercase: true}, ¤cy.PairFormat{Uppercase: true}, asset.Spot, asset.Binary) assert.ErrorIs(t, err, errConfigPairFormatRequiresDelimiter, "SetGlobalPairsManager should error correctly") @@ -1568,9 +1558,7 @@ func TestDisableEnableRateLimiter(t *testing.T) { } err = b.DisableRateLimiter() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = b.DisableRateLimiter() if !errors.Is(err, request.ErrRateLimiterAlreadyDisabled) { @@ -1578,9 +1566,7 @@ func TestDisableEnableRateLimiter(t *testing.T) { } err = b.EnableRateLimiter() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = b.EnableRateLimiter() if !errors.Is(err, request.ErrRateLimiterAlreadyEnabled) { @@ -1905,14 +1891,10 @@ func TestAssetWebsocketFunctionality(t *testing.T) { Delimiter: currency.DashDelimiter, }, }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) err = b.DisableAssetWebsocketSupport(asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("expected error: %v but received: %v", nil, err) - } + require.NoError(t, err) if b.IsAssetWebsocketSupported(asset.Spot) { t.Fatal("error asset is not turned off, unexpected response") @@ -2142,9 +2124,8 @@ func TestGetPairAndAssetTypeRequestFormatted(t *testing.T) { } p, a, err := b.GetPairAndAssetTypeRequestFormatted("BTC-USDT") - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + if a != asset.Spot { t.Fatal("unexpected value", a) } @@ -2153,9 +2134,8 @@ func TestGetPairAndAssetTypeRequestFormatted(t *testing.T) { } p, a, err = b.GetPairAndAssetTypeRequestFormatted("BTC_USDT") - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + if a != asset.PerpetualContract { t.Fatal("unexpected value", a) } @@ -2450,17 +2430,15 @@ func TestEnsureOnePairEnabled(t *testing.T) { }, } err = b.EnsureOnePairEnabled() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + if len(b.CurrencyPairs.Pairs[asset.Spot].Enabled) != 1 { t.Fatalf("received: '%v' but expected: '%v'", len(b.CurrencyPairs.Pairs[asset.Spot].Enabled), 1) } err = b.EnsureOnePairEnabled() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + if len(b.CurrencyPairs.Pairs[asset.Spot].Enabled) != 1 { t.Fatalf("received: '%v' but expected: '%v'", len(b.CurrencyPairs.Pairs[asset.Spot].Enabled), 1) } @@ -2485,9 +2463,7 @@ func TestGetStandardConfig(t *testing.T) { b.Features.Supports.Websocket = true cfg, err := b.GetStandardConfig() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if cfg.Name != "test" { t.Fatalf("received: '%v' but expected: '%v'", cfg.Name, "test") @@ -2528,18 +2504,14 @@ func TestMatchSymbolWithAvailablePairs(t *testing.T) { } whatIGot, err := b.MatchSymbolWithAvailablePairs("btcusdT", asset.Spot, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !whatIGot.Equal(whatIWant) { t.Fatalf("received: '%v' but expected: '%v'", whatIGot, whatIWant) } whatIGot, err = b.MatchSymbolWithAvailablePairs("btc-usdT", asset.Spot, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !whatIGot.Equal(whatIWant) { t.Fatalf("received: '%v' but expected: '%v'", whatIGot, whatIWant) @@ -2566,9 +2538,7 @@ func TestMatchSymbolCheckEnabled(t *testing.T) { } whatIGot, enabled, err := b.MatchSymbolCheckEnabled("btcusdT", asset.Spot, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !enabled { t.Fatal("expected true") @@ -2579,9 +2549,7 @@ func TestMatchSymbolCheckEnabled(t *testing.T) { } whatIGot, enabled, err = b.MatchSymbolCheckEnabled("btc-usdT", asset.Spot, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !whatIGot.Equal(whatIWant) { t.Fatalf("received: '%v' but expected: '%v'", whatIGot, whatIWant) @@ -2592,9 +2560,7 @@ func TestMatchSymbolCheckEnabled(t *testing.T) { } whatIGot, enabled, err = b.MatchSymbolCheckEnabled("btc-AUD", asset.Spot, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !whatIGot.Equal(availButNoEnabled) { t.Fatalf("received: '%v' but expected: '%v'", whatIGot, whatIWant) @@ -2620,27 +2586,21 @@ func TestIsPairEnabled(t *testing.T) { } enabled, err := b.IsPairEnabled(currency.NewPair(currency.AAA, currency.CYC), asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if enabled { t.Fatal("expected false") } enabled, err = b.IsPairEnabled(availButNoEnabled, asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if enabled { t.Fatal("expected false") } enabled, err = b.IsPairEnabled(whatIWant, asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !enabled { t.Fatal("expected true") diff --git a/exchanges/exmo/exmo_test.go b/exchanges/exmo/exmo_test.go index 01a63452..3dade445 100644 --- a/exchanges/exmo/exmo_test.go +++ b/exchanges/exmo/exmo_test.go @@ -540,8 +540,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, e) for _, a := range e.GetAssetTypes(false) { pairs, err := e.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := e.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/futures/futures_test.go b/exchanges/futures/futures_test.go index 4df414dd..f1797208 100644 --- a/exchanges/futures/futures_test.go +++ b/exchanges/futures/futures_test.go @@ -7,6 +7,8 @@ import ( "time" "github.com/shopspring/decimal" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/common" "github.com/thrasher-corp/gocryptotrader/common/key" "github.com/thrasher-corp/gocryptotrader/currency" @@ -52,17 +54,15 @@ func TestUpsertPNLEntry(t *testing.T) { tt := time.Now() result.Time = tt results, err = upsertPNLEntry(results, result) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if len(results) != 1 { t.Errorf("expected 1 received %v", len(results)) } result.Fee = decimal.NewFromInt(1337) results, err = upsertPNLEntry(results, result) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if len(results) != 1 { t.Errorf("expected 1 received %v", len(results)) } @@ -76,18 +76,15 @@ func TestTrackNewOrder(t *testing.T) { exch := testExchange item := asset.Futures pair, err := currency.NewPairFromStrings("BTC", "1231") - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + setup := &PositionTrackerSetup{ Exchange: exch, Asset: item, Pair: pair, } c, err := SetupPositionTracker(setup) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) err = c.TrackNewOrder(nil, false) if !errors.Is(err, common.ErrNilPointer) { @@ -120,9 +117,8 @@ func TestTrackNewOrder(t *testing.T) { c.openingDirection = order.Long od.Date = time.Now() err = c.TrackNewOrder(od, false) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if !c.openingPrice.Equal(decimal.NewFromInt(1337)) { t.Errorf("expected 1337, received %v", c.openingPrice) } @@ -141,9 +137,8 @@ func TestTrackNewOrder(t *testing.T) { od.Side = order.Short od.OrderID = "3" err = c.TrackNewOrder(od, false) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if len(c.shortPositions) != 1 { t.Error("expected a short") } @@ -160,9 +155,8 @@ func TestTrackNewOrder(t *testing.T) { od.OrderID = "4" od.Fee = 0.1 err = c.TrackNewOrder(od, false) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if c.latestDirection != order.Short { t.Error("expected recognition that its short") } @@ -175,9 +169,8 @@ func TestTrackNewOrder(t *testing.T) { od.Side = order.Long od.Amount = 0.2 err = c.TrackNewOrder(od, false) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if c.latestDirection != order.ClosePosition { t.Errorf("expected recognition that its closed, received '%v'", c.latestDirection) } @@ -186,9 +179,8 @@ func TestTrackNewOrder(t *testing.T) { } err = c.TrackNewOrder(od, false) - if !errors.Is(err, nil) { - t.Errorf("received %v expected %v", err, nil) - } + assert.NoError(t, err) + od.OrderID = "hellomoto" err = c.TrackNewOrder(od, false) if !errors.Is(err, ErrPositionClosed) { @@ -207,13 +199,11 @@ func TestTrackNewOrder(t *testing.T) { } c, err = SetupPositionTracker(setup) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + err = c.TrackNewOrder(od, true) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + var ptp *PositionTracker err = ptp.TrackNewOrder(nil, false) if !errors.Is(err, common.ErrNilPointer) { @@ -253,9 +243,7 @@ func TestSetupMultiPositionTracker(t *testing.T) { setup.Underlying = currency.BTC _, err = SetupMultiPositionTracker(setup) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) setup.UseExchangePNLCalculation = true _, err = SetupMultiPositionTracker(setup) @@ -265,9 +253,8 @@ func TestSetupMultiPositionTracker(t *testing.T) { setup.ExchangePNLCalculation = &FakePNL{} resp, err := SetupMultiPositionTracker(setup) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if resp.exchange != testExchange { t.Errorf("expected 'test' received %v", resp.exchange) } @@ -291,9 +278,7 @@ func TestMultiPositionTrackerTrackNewOrder(t *testing.T) { setup.Exchange = testExchange resp, err := SetupMultiPositionTracker(setup) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) tt := time.Now() err = resp.TrackNewOrder(&order.Detail{ @@ -317,9 +302,8 @@ func TestMultiPositionTrackerTrackNewOrder(t *testing.T) { OrderID: "1", Amount: 1, }) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if len(resp.positions) != 1 { t.Errorf("expected '1' received %v", len(resp.positions)) } @@ -333,9 +317,8 @@ func TestMultiPositionTrackerTrackNewOrder(t *testing.T) { OrderID: "2", Amount: 1, }) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if len(resp.positions) != 1 { t.Errorf("expected '1' received %v", len(resp.positions)) } @@ -349,9 +332,8 @@ func TestMultiPositionTrackerTrackNewOrder(t *testing.T) { OrderID: "3", Amount: 2, }) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if len(resp.positions) != 1 { t.Errorf("expected '1' received %v", len(resp.positions)) } @@ -384,9 +366,8 @@ func TestMultiPositionTrackerTrackNewOrder(t *testing.T) { OrderID: "4", Amount: 2, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if len(resp.positions) != 2 { t.Errorf("expected '2' received %v", len(resp.positions)) } @@ -400,9 +381,8 @@ func TestMultiPositionTrackerTrackNewOrder(t *testing.T) { OrderID: "4", Amount: 2, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if len(resp.positions) != 2 { t.Errorf("expected '2' received %v", len(resp.positions)) } @@ -488,9 +468,8 @@ func TestPositionControllerTestTrackNewOrder(t *testing.T) { Side: order.Long, OrderID: "lol", }) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + var pcp *PositionController err = pcp.TrackNewOrder(nil) if !errors.Is(err, common.ErrNilPointer) { @@ -514,9 +493,8 @@ func TestGetLatestPNLSnapshot(t *testing.T) { pt.pnlHistory = append(pt.pnlHistory, pnl) result, err := pt.GetLatestPNLSnapshot() - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + if result != pt.pnlHistory[0] { t.Error("unexpected result") } @@ -638,9 +616,8 @@ func TestGetPositionsForExchange(t *testing.T) { } pos, err = c.GetPositionsForExchange(testExchange, asset.Futures, p) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if len(pos) != 0 { t.Fatal("expected zero") } @@ -658,9 +635,8 @@ func TestGetPositionsForExchange(t *testing.T) { }, } pos, err = c.GetPositionsForExchange(testExchange, asset.Futures, p) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if len(pos) != 1 { t.Fatal("expected 1") } @@ -713,9 +689,8 @@ func TestClearPositionsForExchange(t *testing.T) { }, } err = c.ClearPositionsForExchange(testExchange, asset.Futures, p) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if len(c.multiPositionTrackers[key.ExchangePairAsset{ Exchange: testExchange, Base: p.Base.Item, @@ -811,9 +786,8 @@ func TestSetupPositionTracker(t *testing.T) { Asset: asset.Futures, Pair: cp, }) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v", err, nil) - } + require.NoError(t, err) + if p == nil { //nolint:staticcheck,nolintlint // SA5011 Ignore the nil warnings t.Fatal("expected not nil") } @@ -837,9 +811,8 @@ func TestSetupPositionTracker(t *testing.T) { UseExchangePNLCalculation: true, PNLCalculator: &PNLCalculator{}, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if !p.useExchangePNLCalculation { t.Error("expected true") } @@ -871,14 +844,11 @@ func TestTrackPNLByTime(t *testing.T) { t.Parallel() p := &PositionTracker{} err := p.TrackPNLByTime(time.Now(), 1) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) err = p.TrackPNLByTime(time.Now(), 2) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if !p.latestPrice.Equal(decimal.NewFromInt(2)) { t.Error("expected 2") } @@ -918,9 +888,7 @@ func TestUpdateOpenPositionUnrealisedPNL(t *testing.T) { Price: 1, Amount: 1, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) _, err = pc.UpdateOpenPositionUnrealisedPNL("hi2", asset.Futures, currency.NewBTCUSDT(), 2, time.Now()) if !errors.Is(err, ErrPositionNotFound) { @@ -938,9 +906,8 @@ func TestUpdateOpenPositionUnrealisedPNL(t *testing.T) { } pnl, err := pc.UpdateOpenPositionUnrealisedPNL("hi", asset.Futures, currency.NewBTCUSDT(), 2, time.Now()) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if !pnl.Equal(decimal.NewFromInt(1)) { t.Errorf("received '%v' expected '%v", pnl, 1) } @@ -999,14 +966,10 @@ func TestSetCollateralCurrency(t *testing.T) { Price: 1, Amount: 1, }) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v", err, nil) - } + require.NoError(t, err) err = pc.SetCollateralCurrency("hi", asset.Futures, p, currency.DOGE) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v", err, nil) - } + require.NoError(t, err) if !pc.multiPositionTrackers[mapKey].collateralCurrency.Equal(currency.DOGE) { t.Errorf("received '%v' expected '%v'", pc.multiPositionTrackers[mapKey].collateralCurrency, currency.DOGE) @@ -1037,9 +1000,7 @@ func TestMPTUpdateOpenPositionUnrealisedPNL(t *testing.T) { Price: 1, Amount: 1, }) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v", err, nil) - } + require.NoError(t, err) mapKey := key.ExchangePairAsset{ Exchange: "hi", @@ -1049,9 +1010,8 @@ func TestMPTUpdateOpenPositionUnrealisedPNL(t *testing.T) { } result, err := pc.multiPositionTrackers[mapKey].UpdateOpenPositionUnrealisedPNL(1337, time.Now()) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v", err, nil) - } + require.NoError(t, err) + if result.Equal(decimal.NewFromInt(1337)) { t.Error("") } @@ -1073,9 +1033,8 @@ func TestMPTLiquidate(t *testing.T) { t.Parallel() item := asset.Futures pair, err := currency.NewPairFromStrings("BTC", "1231") - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + e := &MultiPositionTracker{ exchange: testExchange, exchangePNLCalculation: &FakePNL{}, @@ -1099,9 +1058,7 @@ func TestMPTLiquidate(t *testing.T) { setup.Exchange = "exch" _, err = SetupPositionTracker(setup) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) tt := time.Now() err = e.TrackNewOrder(&order.Detail{ @@ -1114,9 +1071,7 @@ func TestMPTLiquidate(t *testing.T) { Price: 1, Amount: 1, }) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) err = e.Liquidate(decimal.Zero, time.Time{}) if !errors.Is(err, order.ErrCannotLiquidate) { @@ -1124,9 +1079,7 @@ func TestMPTLiquidate(t *testing.T) { } err = e.Liquidate(decimal.Zero, tt) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) if e.positions[0].status != order.Liquidated { t.Errorf("received '%v' expected '%v'", e.positions[0].status, order.Liquidated) @@ -1146,9 +1099,8 @@ func TestPositionLiquidate(t *testing.T) { t.Parallel() item := asset.Futures pair, err := currency.NewPairFromStrings("BTC", "1231") - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) + p := &PositionTracker{ contractPair: pair, asset: item, @@ -1169,9 +1121,7 @@ func TestPositionLiquidate(t *testing.T) { Price: 1, Amount: 1, }, false) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) err = p.Liquidate(decimal.Zero, time.Time{}) if !errors.Is(err, order.ErrCannotLiquidate) { @@ -1179,9 +1129,7 @@ func TestPositionLiquidate(t *testing.T) { } err = p.Liquidate(decimal.Zero, tt) - if !errors.Is(err, nil) { - t.Error(err) - } + assert.NoError(t, err) if p.status != order.Liquidated { t.Errorf("received '%v' expected '%v'", p.status, order.Liquidated) @@ -1223,13 +1171,10 @@ func TestGetOpenPosition(t *testing.T) { Price: 1337, Amount: 1337, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + _, err = pc.GetOpenPosition(testExchange, asset.Futures, cp) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) } func TestGetAllOpenPositions(t *testing.T) { @@ -1253,13 +1198,10 @@ func TestGetAllOpenPositions(t *testing.T) { Price: 1337, Amount: 1337, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + _, err = pc.GetAllOpenPositions() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) } func TestPCTrackFundingDetails(t *testing.T) { @@ -1297,9 +1239,7 @@ func TestPCTrackFundingDetails(t *testing.T) { Price: 1337, Amount: 1337, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) rates.StartDate = tn.Add(-time.Hour) rates.EndDate = tn @@ -1321,9 +1261,7 @@ func TestPCTrackFundingDetails(t *testing.T) { pc.multiPositionTrackers[mapKey].orderPositions["lol"].openingDate = tn.Add(-time.Hour) pc.multiPositionTrackers[mapKey].orderPositions["lol"].lastUpdated = tn err = pc.TrackFundingDetails(rates) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) } func TestMPTTrackFundingDetails(t *testing.T) { @@ -1376,9 +1314,7 @@ func TestMPTTrackFundingDetails(t *testing.T) { Price: 1337, Amount: 1337, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) rates.StartDate = tn.Add(-time.Hour) rates.EndDate = tn @@ -1442,9 +1378,7 @@ func TestPTTrackFundingDetails(t *testing.T) { Fee: decimal.NewFromInt(1337), }) err = p.TrackFundingDetails(rates) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) rates.FundingRates = []fundingrate.Rate{ { @@ -1454,19 +1388,14 @@ func TestPTTrackFundingDetails(t *testing.T) { }, } err = p.TrackFundingDetails(rates) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + err = p.TrackFundingDetails(rates) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) rates.StartDate = rates.StartDate.Add(-time.Hour) err = p.TrackFundingDetails(rates) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) rates.Exchange = "" err = p.TrackFundingDetails(rates) @@ -1484,29 +1413,19 @@ func TestPTTrackFundingDetails(t *testing.T) { func TestAreFundingRatePrerequisitesMet(t *testing.T) { t.Parallel() err := CheckFundingRatePrerequisites(false, false, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) err = CheckFundingRatePrerequisites(true, false, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) err = CheckFundingRatePrerequisites(true, true, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) err = CheckFundingRatePrerequisites(true, true, true) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) err = CheckFundingRatePrerequisites(true, false, true) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) err = CheckFundingRatePrerequisites(false, false, true) if !errors.Is(err, ErrGetFundingDataRequired) { @@ -1528,17 +1447,15 @@ func TestLastUpdated(t *testing.T) { t.Parallel() p := &PositionController{} tm, err := p.LastUpdated() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if !tm.IsZero() { t.Errorf("received '%v' expected '%v", tm, time.Time{}) } p.updated = time.Now() tm, err = p.LastUpdated() - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if !tm.Equal(p.updated) { t.Errorf("received '%v' expected '%v", tm, p.updated) } @@ -1579,9 +1496,8 @@ func TestCheckTrackerPrerequisitesLowerExchange(t *testing.T) { t.Errorf("received '%v' expected '%v", err, order.ErrPairIsEmpty) } lowerExch, err := checkTrackerPrerequisitesLowerExchange(upperExch, asset.Futures, currency.NewBTCUSDT()) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v", err, nil) - } + assert.NoError(t, err) + if lowerExch != "im uppercase" { t.Error("expected lowercase") } diff --git a/exchanges/gateio/gateio.go b/exchanges/gateio/gateio.go index aab65620..0abd37e1 100644 --- a/exchanges/gateio/gateio.go +++ b/exchanges/gateio/gateio.go @@ -836,7 +836,7 @@ func (g *Gateio) CreatePriceTriggeredOrder(ctx context.Context, arg *PriceTrigge return nil, fmt.Errorf("%w trigger price found %f, but expected trigger_price >=0", errInvalidPrice, arg.Trigger.Price) } if arg.Trigger.Rule != "<=" && arg.Trigger.Rule != ">=" { - return nil, fmt.Errorf("invalid price trigger condition or rule '%s' but expected '>=' or '<='", arg.Trigger.Rule) + return nil, fmt.Errorf("invalid price trigger condition or rule %q but expected '>=' or '<='", arg.Trigger.Rule) } if arg.Trigger.Expiration <= 0 { return nil, errors.New("invalid expiration(seconds to wait for the condition to be triggered before cancelling the order)") @@ -1193,7 +1193,7 @@ func (g *Gateio) SubAccountTransfer(ctx context.Context, arg SubAccountTransferP switch arg.SubAccountType { case "", "spot", "futures", "delivery": default: - return fmt.Errorf("%w `%s` for SubAccountTransfer; Supported: [spot, futures, delivery]", asset.ErrNotSupported, arg.SubAccountType) + return fmt.Errorf("%w %q for SubAccountTransfer; Supported: [spot, futures, delivery]", asset.ErrNotSupported, arg.SubAccountType) } return g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, walletSubAccountTransferEPL, http.MethodPost, walletSubAccountTransfer, nil, &arg, nil) } diff --git a/exchanges/gateio/gateio_test.go b/exchanges/gateio/gateio_test.go index e19e410c..c691dd5a 100644 --- a/exchanges/gateio/gateio_test.go +++ b/exchanges/gateio/gateio_test.go @@ -132,7 +132,7 @@ func TestUpdateTicker(t *testing.T) { t.Parallel() for _, a := range g.GetAssetTypes(false) { _, err := g.UpdateTicker(t.Context(), getPair(t, a), a) - assert.NoError(t, err, "UpdateTicker should not error for %s", a) + assert.NoErrorf(t, err, "UpdateTicker should not error for %s", a) } } @@ -2799,8 +2799,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, g) for _, a := range g.GetAssetTypes(false) { pairs, err := g.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := g.GetCurrencyTradeURL(t.Context(), a, pairs[0]) if a == asset.Options { require.ErrorIs(t, err, asset.ErrNotSupported) diff --git a/exchanges/gemini/gemini_test.go b/exchanges/gemini/gemini_test.go index aecb633e..1fba6697 100644 --- a/exchanges/gemini/gemini_test.go +++ b/exchanges/gemini/gemini_test.go @@ -1293,8 +1293,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, g) for _, a := range g.GetAssetTypes(false) { pairs, err := g.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := g.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/hitbtc/hitbtc_test.go b/exchanges/hitbtc/hitbtc_test.go index 4ff61a2d..9a9009c7 100644 --- a/exchanges/hitbtc/hitbtc_test.go +++ b/exchanges/hitbtc/hitbtc_test.go @@ -179,7 +179,7 @@ func TestUpdateTickers(t *testing.T) { for j := range enabled { _, err = h.GetCachedTicker(enabled[j], asset.Spot) - require.NoErrorf(t, err, "GetCached Ticker must not error for pair `%s`", enabled[j]) + require.NoErrorf(t, err, "GetCached Ticker must not error for pair %q", enabled[j]) } } @@ -1073,8 +1073,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, h) for _, a := range h.GetAssetTypes(false) { pairs, err := h.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := h.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/huobi/huobi_test.go b/exchanges/huobi/huobi_test.go index 1d22fd2f..c330f8c8 100644 --- a/exchanges/huobi/huobi_test.go +++ b/exchanges/huobi/huobi_test.go @@ -1463,7 +1463,7 @@ func TestWSOrderUpdate(t *testing.T) { errs := testexch.FixtureToDataHandlerWithErrors(t, "testdata/wsMyOrders.json", h.wsHandleData) close(h.Websocket.DataHandler) require.Equal(t, 1, len(errs), "Must receive the correct number of errors back") - require.ErrorContains(t, errs[0].Err, "error with order `test1`: invalid.client.order.id (NT) (2002)") + require.ErrorContains(t, errs[0].Err, "error with order \"test1\": invalid.client.order.id (NT) (2002)") require.Len(t, h.Websocket.DataHandler, 4, "Must see correct number of records") exp := []*order.Detail{ { @@ -1925,8 +1925,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { updatePairsOnce(t, h) for _, a := range h.GetAssetTypes(false) { pairs, err := h.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := h.GetCurrencyTradeURL(t.Context(), a, pairs[0]) if (a == asset.Futures || a == asset.CoinMarginedFutures) && !pairs[0].Quote.Equal(currency.USD) && !pairs[0].Quote.Equal(currency.USDT) { require.ErrorIs(t, err, common.ErrNotYetImplemented) diff --git a/exchanges/huobi/huobi_websocket.go b/exchanges/huobi/huobi_websocket.go index 6d11b0bf..1b4ecfc0 100644 --- a/exchanges/huobi/huobi_websocket.go +++ b/exchanges/huobi/huobi_websocket.go @@ -141,7 +141,7 @@ func (h *HUOBI) wsHandleData(respRaw []byte) error { if ch, err := jsonparser.GetString(respRaw, "ch"); err == nil { s := h.Websocket.GetSubscription(ch) if s == nil { - return fmt.Errorf("%w: `%s`", subscription.ErrNotFound, ch) + return fmt.Errorf("%w: %q", subscription.ErrNotFound, ch) } return h.wsHandleChannelMsgs(s, respRaw) } @@ -400,7 +400,7 @@ func (h *HUOBI) wsHandleMyOrdersMsg(s *subscription.Subscription, respRaw []byte } h.Websocket.DataHandler <- d if o.ErrCode != 0 { - return fmt.Errorf("error with order `%s`: %s (%v)", o.ClientOrderID, o.ErrMessage, o.ErrCode) + return fmt.Errorf("error with order %q: %s (%v)", o.ClientOrderID, o.ErrMessage, o.ErrCode) } return nil } diff --git a/exchanges/huobi/huobi_wrapper.go b/exchanges/huobi/huobi_wrapper.go index 521ec2f2..c804a954 100644 --- a/exchanges/huobi/huobi_wrapper.go +++ b/exchanges/huobi/huobi_wrapper.go @@ -54,13 +54,13 @@ func (h *HUOBI) SetDefaults() { ps.RequestFormat.Delimiter = currency.DashDelimiter } if err := h.SetAssetPairStore(a, ps); err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", h.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", h.Name, a, err) } } for _, a := range []asset.Item{asset.Futures, asset.CoinMarginedFutures} { if err := h.DisableAssetWebsocketSupport(a); err != nil { - log.Errorf(log.ExchangeSys, "%s error disabling `%s` asset type websocket support: %s", h.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error disabling %q asset type websocket support: %s", h.Name, a, err) } } diff --git a/exchanges/kline/kline.go b/exchanges/kline/kline.go index 320aa279..31c3baf5 100644 --- a/exchanges/kline/kline.go +++ b/exchanges/kline/kline.go @@ -205,7 +205,7 @@ func (k *Item) addPadding(start, exclusiveEnd time.Time, purgeOnPartial bool) er padded[x].Time = start case !k.Candles[target].Time.Equal(start): if k.Candles[target].Time.Before(start) { - return fmt.Errorf("%w '%s' should be '%s' at '%s' interval", + return fmt.Errorf("%w %q should be %q at %q interval", errCandleOpenTimeIsNotUTCAligned, k.Candles[target].Time, start.Add(k.Interval.Duration()), diff --git a/exchanges/kline/kline_test.go b/exchanges/kline/kline_test.go index b758431d..cce581b5 100644 --- a/exchanges/kline/kline_test.go +++ b/exchanges/kline/kline_test.go @@ -77,9 +77,7 @@ func TestValidateData(t *testing.T) { } err = validateData(trade4) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if trade4[0].TID != "1" || trade4[1].TID != "2" || trade4[2].TID != "3" { t.Error("trade history sorted incorrectly") @@ -651,9 +649,8 @@ func TestVerifyResultsHaveData(t *testing.T) { tt2 := tt1.Add(OneDay.Duration()) tt3 := tt2.Add(OneDay.Duration()) // end date no longer inclusive dateRanges, err := CalculateCandleDateRanges(tt1, tt3, OneDay, 0) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if dateRanges.HasDataAtDate(tt1) { t.Error("unexpected true value") } @@ -666,9 +663,7 @@ func TestVerifyResultsHaveData(t *testing.T) { Time: tt2, }, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if !dateRanges.HasDataAtDate(tt1) { t.Error("expected true") @@ -682,9 +677,8 @@ func TestVerifyResultsHaveData(t *testing.T) { Low: 1337, }, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if dateRanges.HasDataAtDate(tt1) { t.Error("expected false") } @@ -696,17 +690,15 @@ func TestDataSummary(t *testing.T) { tt2 := time.Now().Round(OneDay.Duration()) tt3 := time.Now().Add(time.Hour * 24).Round(OneDay.Duration()) dateRanges, err := CalculateCandleDateRanges(tt1, tt2, OneDay, 0) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + result := dateRanges.DataSummary(false) if len(result) != 1 { t.Errorf("expected %v received %v", 1, len(result)) } dateRanges, err = CalculateCandleDateRanges(tt1, tt3, OneDay, 0) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + dateRanges.Ranges[0].Intervals[0].HasData = true result = dateRanges.DataSummary(true) if len(result) != 2 { @@ -724,9 +716,8 @@ func TestHasDataAtDate(t *testing.T) { tt2 := tt1.Add(OneDay.Duration()) tt3 := tt2.Add(OneDay.Duration()) // end date no longer inclusive dateRanges, err := CalculateCandleDateRanges(tt1, tt3, OneDay, 0) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if dateRanges.HasDataAtDate(tt2) { t.Error("unexpected true value") } @@ -741,9 +732,7 @@ func TestHasDataAtDate(t *testing.T) { Close: 1337, }, }) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if !dateRanges.HasDataAtDate(tt2) { t.Error("unexpected false value") @@ -871,9 +860,8 @@ func TestConvertToNewInterval(t *testing.T) { old.Interval = OneDay newInterval := ThreeDay newCandle, err := old.ConvertToNewInterval(newInterval) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) + if len(newCandle.Candles) != 1 { t.Error("expected one candle") } @@ -894,9 +882,8 @@ func TestConvertToNewInterval(t *testing.T) { Volume: 111, }) newCandle, err = old.ConvertToNewInterval(newInterval) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if len(newCandle.Candles) != 1 { t.Error("expected one candle") } @@ -964,14 +951,10 @@ func TestConvertToNewInterval(t *testing.T) { } err = old.addPadding(tn, tn.AddDate(0, 0, 9), false) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) newCandle, err = old.ConvertToNewInterval(newInterval) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) if len(newCandle.Candles) != 3 { t.Errorf("received '%v' expected '%v'", len(newCandle.Candles), 3) @@ -1089,9 +1072,7 @@ func TestAddPadding(t *testing.T) { } err = k.addPadding(tn, tn.AddDate(0, 0, 3), false) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) if len(k.Candles) != 3 { t.Fatalf("received '%v' expected '%v'", len(k.Candles), 3) @@ -1107,9 +1088,7 @@ func TestAddPadding(t *testing.T) { }) err = k.addPadding(tn, tn.AddDate(0, 0, 6), false) - if !errors.Is(err, nil) { - t.Fatalf("received '%v' expected '%v'", err, nil) - } + require.NoError(t, err) if len(k.Candles) != 6 { t.Fatalf("received '%v' expected '%v'", len(k.Candles), 6) @@ -1119,9 +1098,7 @@ func TestAddPadding(t *testing.T) { k.Candles = nil err = k.addPadding(tn, tn.AddDate(0, 0, 6), false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if len(k.Candles) != 6 { t.Errorf("received '%v' expected '%v'", len(k.Candles), 6) @@ -1144,9 +1121,8 @@ func TestGetClosePriceAtTime(t *testing.T) { }, } price, err := k.GetClosePriceAtTime(tt) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if price != 1337 { t.Errorf("received '%v' expected '%v'", price, 1337) } @@ -1179,9 +1155,7 @@ func TestDeployExchangeIntervals(t *testing.T) { } request, err := exchangeIntervals.Construct(OneWeek) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if request != OneWeek { t.Errorf("received '%v' expected '%v'", request, OneWeek) @@ -1190,9 +1164,7 @@ func TestDeployExchangeIntervals(t *testing.T) { exchangeIntervals = DeployExchangeIntervals(IntervalCapacity{Interval: OneWeek}, IntervalCapacity{Interval: OneDay}) request, err = exchangeIntervals.Construct(OneMonth) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if request != OneDay { t.Errorf("received '%v' expected '%v'", request, OneDay) @@ -1204,14 +1176,11 @@ func TestSetHasDataFromCandles(t *testing.T) { ohc := getOneHour() localEnd := ohc[len(ohc)-1].Time.Add(OneHour.Duration()) i, err := CalculateCandleDateRanges(ohc[0].Time, localEnd, OneHour, 100000) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = i.SetHasDataFromCandles(ohc) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !i.Start.Equal(ohc[0].Time) { t.Errorf("received '%v' expected '%v'", i.Start.Time, ohc[0].Time) } @@ -1224,14 +1193,11 @@ func TestSetHasDataFromCandles(t *testing.T) { Candles: ohc[2:], } err = k.addPadding(i.Start.Time, i.End.Time, false) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) err = i.SetHasDataFromCandles(k.Candles) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) + if !i.Start.Equal(k.Candles[0].Time) { t.Errorf("received '%v' expected '%v'", i.Start.Time, k.Candles[0].Time) } @@ -1272,9 +1238,7 @@ func TestGetIntervalResultLimit(t *testing.T) { } limit, err := e.GetIntervalResultLimit(OneDay) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if limit != 100000 { t.Errorf("received '%v' expected '%v'", limit, 100000) @@ -1282,9 +1246,7 @@ func TestGetIntervalResultLimit(t *testing.T) { e.GlobalResultLimit = 1337 limit, err = e.GetIntervalResultLimit(OneMin) - if !errors.Is(err, nil) { - t.Errorf("received '%v' expected '%v'", err, nil) - } + assert.NoError(t, err) if limit != 1337 { t.Errorf("received '%v' expected '%v'", limit, 1337) diff --git a/exchanges/kline/request_test.go b/exchanges/kline/request_test.go index 40957cba..9f010064 100644 --- a/exchanges/kline/request_test.go +++ b/exchanges/kline/request_test.go @@ -6,6 +6,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/common" "github.com/thrasher-corp/gocryptotrader/currency" "github.com/thrasher-corp/gocryptotrader/exchanges/asset" @@ -63,9 +64,7 @@ func TestCreateKlineRequest(t *testing.T) { } r, err := CreateKlineRequest("name", pair, pair2, asset.Spot, OneHour, OneMin, start, end, 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if r.Exchange != "name" { t.Fatalf("received: '%v' but expected: '%v'", r.Exchange, "name") @@ -104,9 +103,7 @@ func TestCreateKlineRequest(t *testing.T) { end = end.Round(0) end = end.Add(time.Second * 30) r, err = CreateKlineRequest("name", pair, pair2, asset.Spot, OneHour, OneMin, start, end, 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if !r.End.Equal(end.Add(OneHour.Duration() - (time.Second * 30))) { t.Fatalf("received: '%v', but expected '%v'", r.End, end.Add(OneHour.Duration()-(time.Second*30))) @@ -127,14 +124,10 @@ func TestGetRanges(t *testing.T) { } r, err = CreateKlineRequest("name", pair, pair, asset.Spot, OneHour, OneMin, start, end, 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) holder, err := r.GetRanges(100) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if len(holder.Ranges) != 15 { t.Fatalf("received: '%v', but expected '%v'", len(holder.Ranges), 15) @@ -219,14 +212,10 @@ func TestRequest_ProcessResponse(t *testing.T) { // no conversion r, err = CreateKlineRequest("name", pair, pair, asset.Spot, OneHour, OneHour, start, end, 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) holder, err := r.ProcessResponse(getOneHour()) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if len(holder.Candles) != 24 { t.Fatalf("received: '%v', but expected '%v'", len(holder.Candles), 24) @@ -234,14 +223,10 @@ func TestRequest_ProcessResponse(t *testing.T) { // with conversion r, err = CreateKlineRequest("name", pair, pair, asset.Spot, OneHour, OneMin, start, end, 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) holder, err = r.ProcessResponse(getOneMinute()) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if len(holder.Candles) != 24 { t.Fatalf("received: '%v', but expected '%v'", len(holder.Candles), 24) @@ -251,9 +236,7 @@ func TestRequest_ProcessResponse(t *testing.T) { end = time.Now().UTC() start = end.AddDate(0, 0, -5).Truncate(time.Duration(OneDay)) r, err = CreateKlineRequest("name", pair, pair, asset.Spot, OneDay, OneDay, start, end, 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if !r.PartialCandle { t.Fatalf("received: '%v', but expected '%v'", r.PartialCandle, true) @@ -269,9 +252,7 @@ func TestRequest_ProcessResponse(t *testing.T) { } sweetItem, err := r.ProcessResponse(hasIncomplete) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if sweetItem.Candles[len(sweetItem.Candles)-1].ValidationIssues != PartialCandle { t.Fatalf("received: '%v', but expected '%v'", "no issues", PartialCandle) @@ -286,9 +267,7 @@ func TestRequest_ProcessResponse(t *testing.T) { } sweetItem, err = r.ProcessResponse(missingIncomplete) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if sweetItem.Candles[len(sweetItem.Candles)-1].ValidationIssues == PartialCandle { t.Fatalf("received: '%v', but expected '%v'", sweetItem.Candles[len(sweetItem.Candles)-1].ValidationIssues, "no issues") @@ -296,23 +275,17 @@ func TestRequest_ProcessResponse(t *testing.T) { // end date far into the dark depths of future reality r, err = CreateKlineRequest("name", pair, pair, asset.Spot, OneDay, OneDay, start, end.AddDate(1, 0, 0), 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) sweetItem, err = r.ProcessResponse(hasIncomplete) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if sweetItem.Candles[len(sweetItem.Candles)-1].ValidationIssues != PartialCandle { t.Fatalf("received: '%v', but expected '%v'", "no issues", PartialCandle) } sweetItem, err = r.ProcessResponse(missingIncomplete) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if len(sweetItem.Candles) != 5 { t.Fatalf("received: '%v', but expected '%v'", len(sweetItem.Candles), 5) @@ -349,21 +322,16 @@ func TestExtendedRequest_ProcessResponse(t *testing.T) { // no conversion r, err := CreateKlineRequest("name", pair, pair, asset.Spot, OneHour, OneHour, start, end, 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) + r.ProcessedCandles = ohc dates, err := r.GetRanges(100) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) rExt = &ExtendedRequest{r, dates} holder, err := rExt.ProcessResponse(ohc) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if len(holder.Candles) != 24 { t.Fatalf("received: '%v', but expected '%v'", len(holder.Candles), 24) @@ -372,21 +340,15 @@ func TestExtendedRequest_ProcessResponse(t *testing.T) { // with conversion ohc = getOneMinute() r, err = CreateKlineRequest("name", pair, pair, asset.Spot, OneHour, OneMin, start, end, 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) dates, err = r.GetRanges(100) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) r.IsExtended = true rExt = &ExtendedRequest{r, dates} holder, err = rExt.ProcessResponse(ohc) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected '%v'", err, nil) - } + require.NoError(t, err) if len(holder.Candles) != 24 { t.Fatalf("received: '%v', but expected '%v'", len(holder.Candles), 24) diff --git a/exchanges/kline/technical_analysis_test.go b/exchanges/kline/technical_analysis_test.go index 09a30571..01e4c781 100644 --- a/exchanges/kline/technical_analysis_test.go +++ b/exchanges/kline/technical_analysis_test.go @@ -3,6 +3,8 @@ package kline import ( "errors" "testing" + + "github.com/stretchr/testify/require" ) func TestGetOHLC(t *testing.T) { @@ -51,15 +53,11 @@ func TestGetAverageTrueRange(t *testing.T) { } _, err = ohlc.GetAverageTrueRange(1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) wrap := Item{Candles: []Candle{{High: 1337, Low: 1337, Close: 1337}}} _, err = wrap.GetAverageTrueRange(1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetBollingerBands(t *testing.T) { @@ -99,15 +97,11 @@ func TestGetBollingerBands(t *testing.T) { } _, err = ohlc.GetBollingerBands(9, 1, 1, 5) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) wrap := Item{Candles: []Candle{{Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}}} _, err = wrap.GetBollingerBands(9, 1, 1, 5) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetCorrelationCoefficient(t *testing.T) { @@ -159,15 +153,11 @@ func TestGetCorrelationCoefficient(t *testing.T) { } _, err = ohlc.GetCorrelationCoefficient(&OHLC{Close: []float64{1337, 1337, 1337}}, 2) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) wrap := Item{Candles: []Candle{{Close: 1337}, {Close: 1337}, {Close: 1337}}} _, err = wrap.GetCorrelationCoefficient(&Item{Candles: []Candle{{Close: 1337}, {Close: 1337}, {Close: 1337}}}, 2) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetSimpleMovingAverage(t *testing.T) { @@ -196,15 +186,11 @@ func TestGetSimpleMovingAverage(t *testing.T) { } _, err = ohlc.GetSimpleMovingAverage([]float64{1337, 1337}, 2) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) wrap := Item{Candles: []Candle{{Close: 1337}, {Close: 1337}}} _, err = wrap.GetSimpleMovingAverageOnClose(2) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetExponentialMovingAverage(t *testing.T) { @@ -233,15 +219,11 @@ func TestGetExponentialMovingAverage(t *testing.T) { } _, err = ohlc.GetExponentialMovingAverage([]float64{1337, 1337, 1337}, 2) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) wrap := Item{Candles: []Candle{{Close: 1337}, {Close: 1337}, {Close: 1337}}} _, err = wrap.GetExponentialMovingAverageOnClose(2) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetMovingAverageConvergenceDivergence(t *testing.T) { @@ -285,15 +267,11 @@ func TestGetMovingAverageConvergenceDivergence(t *testing.T) { } _, err = ohlc.GetMovingAverageConvergenceDivergence([]float64{1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337}, 1, 2, 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) wrap := Item{Candles: []Candle{{Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}, {Close: 1337}}} _, err = wrap.GetMovingAverageConvergenceDivergenceOnClose(1, 2, 1) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetMoneyFlowIndex(t *testing.T) { @@ -347,9 +325,7 @@ func TestGetMoneyFlowIndex(t *testing.T) { } _, err = ohlc.GetMoneyFlowIndex(3) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) wrap := Item{Candles: []Candle{ {Close: 1337, High: 1337, Low: 1337, Volume: 1337}, @@ -357,9 +333,7 @@ func TestGetMoneyFlowIndex(t *testing.T) { {Close: 1337, High: 1337, Low: 1337, Volume: 1337}, }} _, err = wrap.GetMoneyFlowIndex(2) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetOnBalanceVolume(t *testing.T) { @@ -385,15 +359,11 @@ func TestGetOnBalanceVolume(t *testing.T) { ohlc.Volume = append(ohlc.Volume, 0.00000001) _, err = ohlc.GetOnBalanceVolume() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) wrap := Item{Candles: []Candle{{Close: 1337, Volume: 1337}}} _, err = wrap.GetOnBalanceVolume() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetRelativeStrengthIndex(t *testing.T) { @@ -423,7 +393,5 @@ func TestGetRelativeStrengthIndex(t *testing.T) { wrap := Item{Candles: []Candle{{Close: 1337}, {Close: 1337}, {Close: 1337}}} _, err = wrap.GetRelativeStrengthIndexOnClose(2) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } diff --git a/exchanges/kraken/kraken_test.go b/exchanges/kraken/kraken_test.go index e47284d8..2ba3a426 100644 --- a/exchanges/kraken/kraken_test.go +++ b/exchanges/kraken/kraken_test.go @@ -72,7 +72,7 @@ func TestGetCurrentServerTime(t *testing.T) { func TestWrapperGetServerTime(t *testing.T) { t.Parallel() st, err := k.GetServerTime(t.Context(), asset.Spot) - require.NoError(t, err, "GetServerTime should not error") + require.NoError(t, err, "GetServerTime must not error") assert.WithinRange(t, st, time.Now().Add(-24*time.Hour), time.Now().Add(24*time.Hour), "ServerTime should be within a day of now") } @@ -1016,7 +1016,7 @@ func TestWsResubscribe(t *testing.T) { require.NoError(t, err, "Subscribe must not error") subs := k.Websocket.GetSubscriptions() require.Len(t, subs, 1, "Should add 1 Subscription") - require.Equal(t, subscription.SubscribedState, subs[0].State(), "Subscription should be subscribed state") + require.Equal(t, subscription.SubscribedState, subs[0].State(), "Subscription must be in a subscribed state") require.Eventually(t, func() bool { b, e2 := k.Websocket.Orderbook.GetOrderbook(spotTestPair, asset.Spot) @@ -1049,10 +1049,10 @@ func TestWsOrderbookSub(t *testing.T) { Pairs: currency.Pairs{spotTestPair}, Levels: 25, }}) - require.NoError(t, err, "Simple subscription should not error") + require.NoError(t, err, "Simple subscription must not error") subs := k.Websocket.GetSubscriptions() - require.Equal(t, 1, len(subs), "Should have 1 subscription channel") + require.Equal(t, 1, len(subs), "Must have 1 subscription channel") err = k.Unsubscribe(subs) assert.NoError(t, err, "Unsubscribe should not error") @@ -1081,7 +1081,7 @@ func TestWsCandlesSub(t *testing.T) { Pairs: currency.Pairs{spotTestPair}, Interval: kline.OneHour, }}) - require.NoError(t, err, "Simple subscription should not error") + require.NoError(t, err, "Simple subscription must not error") subs := k.Websocket.GetSubscriptions() require.Equal(t, 1, len(subs), "Should add 1 Subscription") @@ -1139,7 +1139,7 @@ func TestGenerateSubscriptions(t *testing.T) { s.Pairs = pairs } subs, err := k.generateSubscriptions() - require.NoError(t, err, "generateSubscriptions should not error") + require.NoError(t, err, "generateSubscriptions must not error") testsubs.EqualLists(t, exp, subs) k.Websocket.SetCanUseAuthenticatedEndpoints(true) @@ -1148,7 +1148,7 @@ func TestGenerateSubscriptions(t *testing.T) { {Channel: subscription.MyTradesChannel, QualifiedChannel: krakenWsOwnTrades}, }...) subs, err = k.generateSubscriptions() - require.NoError(t, err, "generateSubscriptions should not error") + require.NoError(t, err, "generateSubscriptions must not error") testsubs.EqualLists(t, exp, subs) } @@ -1486,7 +1486,7 @@ func TestWsOrderbookMax10Depth(t *testing.T) { for x := range websocketXDGUSDOrderbookUpdates { err := k.wsHandleData([]byte(websocketXDGUSDOrderbookUpdates[x])) - require.NoError(t, err, "wsHandleData should not error") + require.NoError(t, err, "wsHandleData must not error") } for x := range websocketLUNAEUROrderbookUpdates { @@ -1496,14 +1496,14 @@ func TestWsOrderbookMax10Depth(t *testing.T) { // in the orderbook.Tranche struct. // Required checksum: 7465000014735432016076747100005084881400000007476000097005027047670474990000293338023886300750000004333333333333375020000152914844934167507000014652990542161752500007370728572000475400000670061645671407546000098022663603417745900007102987806720745800001593557686404000745200003375861179634000743500003156650585902777434000030172726079999999743200006461149653837000743100001042285966000000074300000403660461058200074200000369021657320475740500001674242117790510 if x != len(websocketLUNAEUROrderbookUpdates)-1 { - require.NoError(t, err, "wsHandleData should not error") + require.NoError(t, err, "wsHandleData must not error") } } // This has less than 10 bids and still needs a checksum calc. for x := range websocketGSTEUROrderbookUpdates { err := k.wsHandleData([]byte(websocketGSTEUROrderbookUpdates[x])) - require.NoError(t, err, "wsHandleData should not error") + require.NoError(t, err, "wsHandleData must not error") } } @@ -1625,7 +1625,7 @@ func TestGetCurrencyTradeURL(t *testing.T) { if len(pairs) == 0 { continue } - require.NoError(t, err, "cannot get pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) resp, err := k.GetCurrencyTradeURL(t.Context(), a, pairs[0]) if a != asset.Spot && a != asset.Futures { assert.ErrorIs(t, err, asset.ErrNotSupported) @@ -1694,16 +1694,16 @@ func TestErrorResponse(t *testing.T) { } err := json.Unmarshal([]byte(tt.jsonStr), &g) if tt.expectError { - require.ErrorContains(t, err, tt.errorMsg, "Unmarshal should error") + require.ErrorContains(t, err, tt.errorMsg, "Unmarshal must error") } else { require.NoError(t, err) if tt.errorMsg != "" { - assert.ErrorContains(t, g.Error.Errors(), tt.errorMsg, "Errors should contain %s", tt.errorMsg) + assert.ErrorContainsf(t, g.Error.Errors(), tt.errorMsg, "Errors should contain %s", tt.errorMsg) } else { assert.NoError(t, g.Error.Errors(), "Errors should not error") } if tt.warningMsg != "" { - assert.Contains(t, g.Error.Warnings(), tt.warningMsg, "Warnings should contain %s", tt.warningMsg) + assert.Containsf(t, g.Error.Warnings(), tt.warningMsg, "Warnings should contain %s", tt.warningMsg) } else { assert.Empty(t, g.Error.Warnings(), "Warnings should be empty") } diff --git a/exchanges/kraken/kraken_wrapper.go b/exchanges/kraken/kraken_wrapper.go index bb7813a6..c8c2240d 100644 --- a/exchanges/kraken/kraken_wrapper.go +++ b/exchanges/kraken/kraken_wrapper.go @@ -53,12 +53,12 @@ func (k *Kraken) SetDefaults() { ps.RequestFormat.Delimiter = currency.UnderscoreDelimiter } if err := k.SetAssetPairStore(a, ps); err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", k.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", k.Name, a, err) } } if err := k.DisableAssetWebsocketSupport(asset.Futures); err != nil { - log.Errorf(log.ExchangeSys, "%s error disabling `%s` asset type websocket support: %s", k.Name, asset.Futures, err) + log.Errorf(log.ExchangeSys, "%s error disabling %q asset type websocket support: %s", k.Name, asset.Futures, err) } k.Features = exchange.Features{ diff --git a/exchanges/kucoin/kucoin_test.go b/exchanges/kucoin/kucoin_test.go index 84b8cefa..38560e31 100644 --- a/exchanges/kucoin/kucoin_test.go +++ b/exchanges/kucoin/kucoin_test.go @@ -2050,11 +2050,11 @@ func TestUpdateTickers(t *testing.T) { for _, p := range pairs { tick, err := ticker.GetTicker(ku.Name, p, a) if assert.NoError(t, err) { - assert.Positive(t, tick.Last, "%s %s Tick Last should be positive", a, p) - assert.NotEmpty(t, tick.Pair, "%s %s Tick Pair should not be empty", a, p) - assert.Equal(t, ku.Name, tick.ExchangeName, "ExchangeName should be correct") - assert.Equal(t, a, tick.AssetType, "AssetType should be correct") - assert.NotEmpty(t, tick.LastUpdated, "%s %s Tick LastUpdated should not be empty", a, p) + assert.Positivef(t, tick.Last, "%s %s Tick Last should be positive", a, p) + assert.NotEmptyf(t, tick.Pair, "%s %s Tick Pair should not be empty", a, p) + assert.Equalf(t, ku.Name, tick.ExchangeName, "ExchangeName should be correct") + assert.Equalf(t, a, tick.AssetType, "AssetType should be correct") + assert.NotEmptyf(t, tick.LastUpdated, "%s %s Tick LastUpdated should not be empty", a, p) } } } @@ -3253,8 +3253,8 @@ func TestUpdateOrderExecutionLimits(t *testing.T) { for y := range enabled { lim, err := ku.GetOrderExecutionLimits(assets[x], enabled[y]) - assert.NoError(t, err, "%v %s %v", err, enabled[y], assets[x]) - assert.NotEmpty(t, lim, "limit cannot be empty") + assert.NoErrorf(t, err, "%v %s %v", err, enabled[y], assets[x]) + assert.NotEmptyf(t, lim, "limit cannot be empty") } } } @@ -4029,8 +4029,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, ku) for _, a := range ku.GetAssetTypes(false) { pairs, err := ku.CurrencyPairs.GetPairs(a, false) - assert.NoError(t, err, "cannot get pairs for %s", a) - assert.NotEmpty(t, pairs, "no pairs for %s", a) + assert.NoErrorf(t, err, "cannot get pairs for %s", a) + assert.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := ku.GetCurrencyTradeURL(t.Context(), a, pairs[0]) assert.NoError(t, err) diff --git a/exchanges/kucoin/kucoin_wrapper.go b/exchanges/kucoin/kucoin_wrapper.go index bd038387..68726cdc 100644 --- a/exchanges/kucoin/kucoin_wrapper.go +++ b/exchanges/kucoin/kucoin_wrapper.go @@ -55,7 +55,7 @@ func (ku *Kucoin) SetDefaults() { ps.ConfigFormat.Delimiter = currency.UnderscoreDelimiter } if err := ku.SetAssetPairStore(a, ps); err != nil { - log.Errorf(log.ExchangeSys, "%s error storing `%s` default asset formats: %s", ku.Name, a, err) + log.Errorf(log.ExchangeSys, "%s error storing %q default asset formats: %s", ku.Name, a, err) } } diff --git a/exchanges/okx/helpers.go b/exchanges/okx/helpers.go index 27f6d105..8a3f3e37 100644 --- a/exchanges/okx/helpers.go +++ b/exchanges/okx/helpers.go @@ -86,7 +86,7 @@ func (ok *Okx) getAssetsFromInstrumentID(instrumentID string) ([]asset.Item, err } pair, err := currency.NewPairDelimiter(instrumentID, pf.Delimiter) if err != nil { - return nil, fmt.Errorf("%w: `%s`", err, instrumentID) + return nil, fmt.Errorf("%w: %q", err, instrumentID) } switch { case len(splitSymbol) == 2: diff --git a/exchanges/okx/okx.go b/exchanges/okx/okx.go index 436ff643..ca71816a 100644 --- a/exchanges/okx/okx.go +++ b/exchanges/okx/okx.go @@ -462,7 +462,7 @@ func (ok *Okx) PlaceTakeProfitStopLossOrder(ctx context.Context, arg *AlgoOrderP return nil, common.ErrEmptyParams } if arg.OrderType != "conditional" { - return nil, fmt.Errorf("%w for TPSL: `%s`", order.ErrTypeIsInvalid, arg.OrderType) + return nil, fmt.Errorf("%w for TPSL: %q", order.ErrTypeIsInvalid, arg.OrderType) } if arg.StopLossTriggerPrice <= 0 { return nil, order.ErrPriceBelowMin @@ -496,7 +496,7 @@ func (ok *Okx) PlaceTriggerAlgoOrder(ctx context.Context, arg *AlgoOrderParams) return nil, common.ErrEmptyParams } if arg.OrderType != "trigger" { - return nil, fmt.Errorf("%w for Trigger: `%s`", order.ErrTypeIsInvalid, arg.OrderType) + return nil, fmt.Errorf("%w for Trigger: %q", order.ErrTypeIsInvalid, arg.OrderType) } if arg.TriggerPrice <= 0 { return nil, fmt.Errorf("%w, trigger price must be greater than 0", order.ErrPriceBelowMin) @@ -1808,7 +1808,7 @@ func (ok *Okx) SetLeverageRate(ctx context.Context, arg *SetLeverageInput) (*Set switch arg.AssetType { case asset.Futures, asset.PerpetualSwap: if arg.PositionSide == "" && arg.MarginMode == "isolated" { - return nil, fmt.Errorf("%w: `%s`", order.ErrSideIsInvalid, arg.PositionSide) + return nil, fmt.Errorf("%w: %q", order.ErrSideIsInvalid, arg.PositionSide) } } arg.PositionSide = strings.ToLower(arg.PositionSide) @@ -5443,7 +5443,7 @@ func (ok *Okx) GetOpenInterestAndVolumeStrike(ctx context.Context, ccy currency. return nil, errMissingExpiryTimeParameter } params := url.Values{} - params.Set("expTime", expTime.Format("20060102")) + params.Set("expTime", expTime.UTC().Format("20060102")) if !ccy.IsEmpty() { params.Set("ccy", ccy.String()) } diff --git a/exchanges/okx/okx_test.go b/exchanges/okx/okx_test.go index fd1d1ce5..202e7ec7 100644 --- a/exchanges/okx/okx_test.go +++ b/exchanges/okx/okx_test.go @@ -692,9 +692,24 @@ func TestGetOpenInterestAndVolumeStrike(t *testing.T) { _, err := ok.GetOpenInterestAndVolumeStrike(contextGenerate(), currency.BTC, time.Time{}, kline.OneDay) require.ErrorIs(t, err, errMissingExpiryTimeParameter) - result, err := ok.GetOpenInterestAndVolumeStrike(contextGenerate(), currency.BTC, time.Now(), kline.OneDay) - require.NoError(t, err) - assert.NotNil(t, result) + instruments, err := ok.GetInstruments(contextGenerate(), &InstrumentsFetchParams{ + InstrumentType: instTypeOption, + Underlying: optionsPair.String(), + }) + require.NoErrorf(t, err, "GetInstruments for options (underlying: %s) must not error", optionsPair) + require.NotEmptyf(t, instruments, "GetInstruments for options (underlying: %s) must return at least one instrument", optionsPair) + var selectedExpTime time.Time + for _, inst := range instruments { + if inst.ExpTime.Time().IsZero() { + continue + } + selectedExpTime = inst.ExpTime.Time() + break + } + require.NotZero(t, selectedExpTime, "GetInstruments must return an instrument with a non-zero expiry time") + result, err := ok.GetOpenInterestAndVolumeStrike(contextGenerate(), currency.BTC, selectedExpTime, kline.OneDay) + require.NoErrorf(t, err, "GetOpenInterestAndVolumeStrike with expiry %s for currency %s must not error", selectedExpTime, currency.BTC) + assert.NotNilf(t, result, "GetOpenInterestAndVolumeStrike with expiry %s for currency %s should return a non-nil result", selectedExpTime, currency.BTC) } func TestGetTakerFlow(t *testing.T) { @@ -3910,46 +3925,46 @@ func TestOrderPushData(t *testing.T) { case *order.Detail: switch len(ok.Websocket.DataHandler) { case 3: - require.Equal(t, "452197707845865472", v.OrderID, "OrderID") - require.Equal(t, "HamsterParty14", v.ClientOrderID, "ClientOrderID") - require.Equal(t, asset.Spot, v.AssetType, "AssetType") - require.Equal(t, order.Sell, v.Side, "Side") - require.Equal(t, order.Filled, v.Status, "Status") - require.Equal(t, order.Limit, v.Type, "Type") - require.Equal(t, currency.NewPairWithDelimiter("BTC", "USDT", "-"), v.Pair, "Pair") - require.Equal(t, 31527.1, v.AverageExecutedPrice, "AverageExecutedPrice") - require.Equal(t, time.UnixMilli(1654084334977), v.Date, "Date") - require.Equal(t, time.UnixMilli(1654084353263), v.CloseTime, "CloseTime") - require.Equal(t, 0.001, v.Amount, "Amount") - require.Equal(t, 0.001, v.ExecutedAmount, "ExecutedAmount") - require.Equal(t, 0.000, v.RemainingAmount, "RemainingAmount") - require.Equal(t, 31527.1, v.Price, "Price") - require.Equal(t, 0.02522168, v.Fee, "Fee") - require.Equal(t, currency.USDT, v.FeeAsset, "FeeAsset") + assert.Equal(t, "452197707845865472", v.OrderID, "OrderID") + assert.Equal(t, "HamsterParty14", v.ClientOrderID, "ClientOrderID") + assert.Equal(t, asset.Spot, v.AssetType, "AssetType") + assert.Equal(t, order.Sell, v.Side, "Side") + assert.Equal(t, order.Filled, v.Status, "Status") + assert.Equal(t, order.Limit, v.Type, "Type") + assert.Equal(t, currency.NewPairWithDelimiter("BTC", "USDT", "-"), v.Pair, "Pair") + assert.Equal(t, 31527.1, v.AverageExecutedPrice, "AverageExecutedPrice") + assert.Equal(t, time.UnixMilli(1654084334977), v.Date, "Date") + assert.Equal(t, time.UnixMilli(1654084353263), v.CloseTime, "CloseTime") + assert.Equal(t, 0.001, v.Amount, "Amount") + assert.Equal(t, 0.001, v.ExecutedAmount, "ExecutedAmount") + assert.Equal(t, 0.000, v.RemainingAmount, "RemainingAmount") + assert.Equal(t, 31527.1, v.Price, "Price") + assert.Equal(t, 0.02522168, v.Fee, "Fee") + assert.Equal(t, currency.USDT, v.FeeAsset, "FeeAsset") case 2: - require.Equal(t, "620258920632008725", v.OrderID, "OrderID") - require.Equal(t, asset.Spot, v.AssetType, "AssetType") - require.Equal(t, order.Market, v.Type, "Type") - require.Equal(t, order.Sell, v.Side, "Side") - require.Equal(t, order.Active, v.Status, "Status") - require.Equal(t, 0.0, v.Amount, "Amount should be 0 for a market sell") - require.Equal(t, 10.0, v.QuoteAmount, "QuoteAmount") + assert.Equal(t, "620258920632008725", v.OrderID, "OrderID") + assert.Equal(t, asset.Spot, v.AssetType, "AssetType") + assert.Equal(t, order.Market, v.Type, "Type") + assert.Equal(t, order.Sell, v.Side, "Side") + assert.Equal(t, order.Active, v.Status, "Status") + assert.Equal(t, 0.0, v.Amount, "Amount should be 0 for a market sell") + assert.Equal(t, 10.0, v.QuoteAmount, "QuoteAmount") case 1: - require.Equal(t, "620258920632008725", v.OrderID, "OrderID") - require.Equal(t, 10.0, v.QuoteAmount, "QuoteAmount") - require.Equal(t, 0.00038127046945832905, v.Amount, "Amount") - require.Equal(t, 0.010000249968, v.Fee, "Fee") - require.Equal(t, 0.0, v.RemainingAmount, "RemainingAmount") - require.Equal(t, 0.00038128, v.ExecutedAmount, "ExecutedAmount") - require.Equal(t, order.PartiallyFilled, v.Status, "Status") + assert.Equal(t, "620258920632008725", v.OrderID, "OrderID") + assert.Equal(t, 10.0, v.QuoteAmount, "QuoteAmount") + assert.Equal(t, 0.00038127046945832905, v.Amount, "Amount") + assert.Equal(t, 0.010000249968, v.Fee, "Fee") + assert.Equal(t, 0.0, v.RemainingAmount, "RemainingAmount") + assert.Equal(t, 0.00038128, v.ExecutedAmount, "ExecutedAmount") + assert.Equal(t, order.PartiallyFilled, v.Status, "Status") case 0: - require.Equal(t, "620258920632008725", v.OrderID, "OrderID") - require.Equal(t, 10.0, v.QuoteAmount, "QuoteAmount") - require.Equal(t, 0.010000249968, v.Fee, "Fee") - require.Equal(t, 0.0, v.RemainingAmount, "RemainingAmount") - require.Equal(t, 0.00038128, v.ExecutedAmount, "ExecutedAmount") - require.Equal(t, 0.00038128, v.Amount, "Amount should be derived because order filled") - require.Equal(t, order.Filled, v.Status, "Status") + assert.Equal(t, "620258920632008725", v.OrderID, "OrderID") + assert.Equal(t, 10.0, v.QuoteAmount, "QuoteAmount") + assert.Equal(t, 0.010000249968, v.Fee, "Fee") + assert.Equal(t, 0.0, v.RemainingAmount, "RemainingAmount") + assert.Equal(t, 0.00038128, v.ExecutedAmount, "ExecutedAmount") + assert.Equal(t, 0.00038128, v.Amount, "Amount should be derived because order filled") + assert.Equal(t, order.Filled, v.Status, "Status") } case error: t.Error(v) @@ -4101,7 +4116,7 @@ func TestWSProcessTrades(t *testing.T) { } for _, assetType := range assets { - require.Len(t, trades[assetType], len(exp), "Must have received %d trades for asset %v", len(exp), assetType) + require.Lenf(t, trades[assetType], len(exp), "Must have received %d trades for asset %v", len(exp), assetType) slices.SortFunc(trades[assetType], func(a, b trade.Data) int { return strings.Compare(a.TID, b.TID) }) @@ -4110,7 +4125,7 @@ func TestWSProcessTrades(t *testing.T) { expected.AssetType = assetType expected.Exchange = ok.Name expected.CurrencyPair = p - require.Equal(t, expected, tradeData, "Trade %d (TID: %s) for asset %v must match expected data", i, tradeData.TID, assetType) + require.Equalf(t, expected, tradeData, "Trade %d (TID: %s) for asset %v must match expected data", i, tradeData.TID, assetType) } } } @@ -4287,7 +4302,7 @@ func TestGetAssetsFromInstrumentTypeOrID(t *testing.T) { default: require.Len(t, assets, 1) } - assert.Contains(t, assets, a, "Should contain asset: %s", a) + assert.Containsf(t, assets, a, "Should contain asset: %s", a) } _, err = ok.getAssetsFromInstrumentID("test") @@ -4333,7 +4348,7 @@ func TestGetCollateralMode(t *testing.T) { assert.NotNil(t, result) _, err = ok.GetCollateralMode(contextGenerate(), asset.Futures) - assert.True(t, errors.Is(err, nil) || errors.Is(err, asset.ErrNotSupported)) + assert.True(t, err == nil || errors.Is(err, asset.ErrNotSupported)) } func TestSetCollateralMode(t *testing.T) { diff --git a/exchanges/okx/okx_types.go b/exchanges/okx/okx_types.go index 3c5914d0..13d6c638 100644 --- a/exchanges/okx/okx_types.go +++ b/exchanges/okx/okx_types.go @@ -803,7 +803,7 @@ func (arg *PlaceOrderRequestParam) Validate() error { if arg.AssetType == asset.Futures || arg.AssetType == asset.PerpetualSwap { arg.PositionSide = strings.ToLower(arg.PositionSide) if !slices.Contains([]string{"long", "short"}, arg.PositionSide) { - return fmt.Errorf("%w: `%s`, 'long' or 'short' supported", order.ErrSideIsInvalid, arg.PositionSide) + return fmt.Errorf("%w: %q, 'long' or 'short' supported", order.ErrSideIsInvalid, arg.PositionSide) } } arg.OrderType = strings.ToLower(arg.OrderType) diff --git a/exchanges/order/limits.go b/exchanges/order/limits.go index 25c4c8c3..6c543ba0 100644 --- a/exchanges/order/limits.go +++ b/exchanges/order/limits.go @@ -86,7 +86,7 @@ func (e *ExecutionLimits) LoadLimits(levels []MinMaxLevel) error { for x := range levels { if !levels[x].Asset.IsValid() { - return fmt.Errorf("cannot load levels for '%s': %w", levels[x].Asset, asset.ErrNotSupported) + return fmt.Errorf("cannot load levels for %q: %w", levels[x].Asset, asset.ErrNotSupported) } m1, ok := e.m[levels[x].Asset] if !ok { diff --git a/exchanges/order/order_test.go b/exchanges/order/order_test.go index f4f33608..c46466df 100644 --- a/exchanges/order/order_test.go +++ b/exchanges/order/order_test.go @@ -1108,7 +1108,7 @@ func TestValidationOnOrderTypes(t *testing.T) { modifyOrder.ClientOrderID = "1337" require.NoError(t, modifyOrder.Validate()) - require.Error(t, modifyOrder.Validate(validate.Check(func() error { return errors.New("this should error") }))) + require.Error(t, modifyOrder.Validate(validate.Check(func() error { return errors.New("this must error") }))) require.NoError(t, modifyOrder.Validate(validate.Check(func() error { return nil }))) } @@ -1357,7 +1357,7 @@ func TestDetail_Copy(t *testing.T) { } for i := range d { r := d[i].Copy() - assert.True(t, reflect.DeepEqual(d[i], r), "[%d] Copy does not contain same elements, expected: %v\ngot:%v", i, d[i], r) + assert.Truef(t, reflect.DeepEqual(d[i], r), "[%d] Copy does not contain same elements, expected: %v\ngot:%v", i, d[i], r) if len(d[i].Trades) > 0 { assert.NotSamef(t, &d[i].Trades[0], &r.Trades[0], "[%d]Trades point to the same data elements", i) } diff --git a/exchanges/order/orders.go b/exchanges/order/orders.go index a3014ad8..03cc8a0f 100644 --- a/exchanges/order/orders.go +++ b/exchanges/order/orders.go @@ -76,7 +76,7 @@ func (s *Submit) Validate(requirements protocol.TradingRequirements, opt ...vali } if !s.AssetType.IsValid() { - return fmt.Errorf("'%s' %w", s.AssetType, asset.ErrNotSupported) + return fmt.Errorf("%q %w", s.AssetType, asset.ErrNotSupported) } if !IsValidOrderSubmissionSide(s.Side) { @@ -1076,7 +1076,7 @@ func StringToOrderSide(side string) (Side, error) { case AnySide.String(): return AnySide, nil default: - return UnknownSide, fmt.Errorf("'%s' %w", side, ErrSideIsInvalid) + return UnknownSide, fmt.Errorf("%q %w", side, ErrSideIsInvalid) } } @@ -1193,7 +1193,7 @@ func StringToOrderStatus(status string) (Status, error) { case STP.String(), "STP": return STP, nil default: - return UnknownStatus, fmt.Errorf("'%s' %w", status, errUnrecognisedOrderStatus) + return UnknownStatus, fmt.Errorf("%q %w", status, errUnrecognisedOrderStatus) } } diff --git a/exchanges/order/timeinforce_test.go b/exchanges/order/timeinforce_test.go index dc6e13b7..0022a699 100644 --- a/exchanges/order/timeinforce_test.go +++ b/exchanges/order/timeinforce_test.go @@ -25,7 +25,7 @@ func TestTimeInForceIs(t *testing.T) { } for tif, exps := range tifValuesMap { for _, v := range exps { - require.Truef(t, tif.Is(v), "%s should be %s", tif, v) + assert.Truef(t, tif.Is(v), "%s should be %s", tif, v) } } } diff --git a/exchanges/orderbook/calculator_test.go b/exchanges/orderbook/calculator_test.go index eafb763b..861ef254 100644 --- a/exchanges/orderbook/calculator_test.go +++ b/exchanges/orderbook/calculator_test.go @@ -6,6 +6,8 @@ import ( "strings" "testing" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/currency" ) @@ -34,9 +36,7 @@ func TestWhaleBomb(t *testing.T) { } result, err := b.WhaleBomb(7001, true) // <- This price should not be wiped out on the book. - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 7000 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 7000) @@ -55,9 +55,7 @@ func TestWhaleBomb(t *testing.T) { } result, err = b.WhaleBomb(7000.5, true) // <- Slot between prices will lift to next ask tranche - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) if result.Amount != 7000 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 7000) @@ -76,18 +74,14 @@ func TestWhaleBomb(t *testing.T) { } result, err = b.WhaleBomb(7002, true) // <- exceed available quotations - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !strings.Contains(result.Status, fullLiquidityUsageWarning) { t.Fatal("expected status to contain liquidity warning") } result, err = b.WhaleBomb(7000, true) // <- Book should not move - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 0 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 0) @@ -116,9 +110,7 @@ func TestWhaleBomb(t *testing.T) { } result, err = b.WhaleBomb(6998, false) // <- This price should not be wiped out on the book. - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 1 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 1) @@ -137,9 +129,7 @@ func TestWhaleBomb(t *testing.T) { } result, err = b.WhaleBomb(6998.5, false) // <- Slot between prices will drop to next bid tranche - if !errors.Is(err, nil) { - t.Errorf("received '%v', expected '%v'", err, nil) - } + assert.NoError(t, err) if result.Amount != 1 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 1) @@ -158,18 +148,14 @@ func TestWhaleBomb(t *testing.T) { } result, err = b.WhaleBomb(6997, false) // <- exceed available quotations - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !strings.Contains(result.Status, fullLiquidityUsageWarning) { t.Fatal("expected status to contain liquidity warning") } result, err = b.WhaleBomb(6999, false) // <- Book should not move - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 0 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 0) @@ -210,9 +196,7 @@ func TestSimulateOrder(t *testing.T) { // Full liquidity used result, err := b.SimulateOrder(21002, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 3 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 3) @@ -236,9 +220,7 @@ func TestSimulateOrder(t *testing.T) { // Exceed full liquidity used result, err = b.SimulateOrder(21003, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 3 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 3) @@ -262,9 +244,7 @@ func TestSimulateOrder(t *testing.T) { // First tranche result, err = b.SimulateOrder(7000, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 1 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 1) @@ -288,9 +268,7 @@ func TestSimulateOrder(t *testing.T) { // Half of first tranch result, err = b.SimulateOrder(3500, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != .5 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, .5) @@ -318,9 +296,7 @@ func TestSimulateOrder(t *testing.T) { // Half of second tranche result, err = b.SimulateOrder(14001, true) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 2 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 2) @@ -362,9 +338,7 @@ func TestSimulateOrder(t *testing.T) { // Full liquidity used result, err = b.SimulateOrder(3, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 20995 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 20995) @@ -388,9 +362,7 @@ func TestSimulateOrder(t *testing.T) { // Exceed full liquidity used result, err = b.SimulateOrder(3.1, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 20995 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 20995) @@ -414,9 +386,7 @@ func TestSimulateOrder(t *testing.T) { // First tranche result, err = b.SimulateOrder(1, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 6999 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 6999) @@ -440,9 +410,7 @@ func TestSimulateOrder(t *testing.T) { // Half of first tranch result, err = b.SimulateOrder(.5, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 3499.5 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 3499.5) @@ -470,9 +438,7 @@ func TestSimulateOrder(t *testing.T) { // Half of second tranche result, err = b.SimulateOrder(2, false) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if result.Amount != 13997 { t.Fatalf("received: '%v' but expected: '%v'", result.Amount, 13997) diff --git a/exchanges/orderbook/depth_test.go b/exchanges/orderbook/depth_test.go index d515352c..615b7598 100644 --- a/exchanges/orderbook/depth_test.go +++ b/exchanges/orderbook/depth_test.go @@ -91,7 +91,7 @@ func TestRetrieve(t *testing.T) { mirrored := reflect.Indirect(reflect.ValueOf(d.options)) for n := range mirrored.NumField() { structVal := mirrored.Field(n) - assert.Falsef(t, structVal.IsZero(), "struct field '%s' not tested", mirrored.Type().Field(n).Name) + assert.Falsef(t, structVal.IsZero(), "struct field %q not tested", mirrored.Type().Field(n).Name) } ob, err := d.Retrieve() @@ -743,7 +743,7 @@ func TestMovementMethods(t *testing.T) { assert.InDeltaf(t, field.Float(), expect.Float(), accuracy10dp, "sub test %d movement %s should be correct", i, meta.Type().Field(j).Name) } } - assert.Equal(t, subT.expect.FullBookSideConsumed, move.FullBookSideConsumed, "sub test %d movement FullBookSideConsumed should be correct", i) + assert.Equalf(t, subT.expect.FullBookSideConsumed, move.FullBookSideConsumed, "sub test %d movement FullBookSideConsumed should be correct", i) } }) } diff --git a/exchanges/orderbook/orderbook_test.go b/exchanges/orderbook/orderbook_test.go index 56edf166..c8f7bf3e 100644 --- a/exchanges/orderbook/orderbook_test.go +++ b/exchanges/orderbook/orderbook_test.go @@ -694,7 +694,5 @@ func TestCheckAlignment(t *testing.T) { itemWithFunding[0].StrAmount = "1337.0000000" itemWithFunding[0].StrPrice = "1337.0000000" err = checkAlignment(itemWithFunding, true, true, false, true, dsc, "Binance") - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) } diff --git a/exchanges/orderbook/tranches_test.go b/exchanges/orderbook/tranches_test.go index 425b5aab..72a70b31 100644 --- a/exchanges/orderbook/tranches_test.go +++ b/exchanges/orderbook/tranches_test.go @@ -7,6 +7,7 @@ import ( "time" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) var ask = Tranches{ @@ -326,9 +327,7 @@ func TestUpdateByID(t *testing.T) { err = a.updateByID(Tranches{ // Simulate Bitmex updating {Price: 0, Amount: 1337, ID: 3}, }) - if !errors.Is(err, nil) { - t.Fatalf("expecting %v but received %v", nil, err) - } + require.NoError(t, err) if got := a.retrieve(2); len(got) != 2 || got[1].Price == 0 { t.Fatal("price should not be replaced with zero") @@ -1830,18 +1829,14 @@ func TestGetHeadPrice(t *testing.T) { } val, err := depth.bidTranches.getHeadPriceNoLock() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if val != 1336 { t.Fatal("unexpected value") } val, err = depth.askTranches.getHeadPriceNoLock() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if val != 1337 { t.Fatal("unexpected value", val) diff --git a/exchanges/poloniex/currency_details_test.go b/exchanges/poloniex/currency_details_test.go index 9f04d802..65215d1d 100644 --- a/exchanges/poloniex/currency_details_test.go +++ b/exchanges/poloniex/currency_details_test.go @@ -4,6 +4,7 @@ import ( "errors" "testing" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/currency" ) @@ -99,18 +100,14 @@ func TestWsCurrencyMap(t *testing.T) { } btcusdt, err := m.GetPair(121) - if !errors.Is(err, nil) { - t.Fatalf("expected: %v but received: %v", nil, err) - } + require.NoError(t, err) if btcusdt.String() != "USDT_BTC" { t.Fatal("expecting USDT_BTC pair") } eth, err := m.GetCode(267) - if !errors.Is(err, nil) { - t.Fatalf("expected: %v but received: %v", nil, err) - } + require.NoError(t, err) if eth.String() != "ETH" { t.Fatal("unexpected value") @@ -131,27 +128,21 @@ func TestWsCurrencyMap(t *testing.T) { } dAddr, err := m.GetDepositAddress(currency.NewCode("BCN")) - if !errors.Is(err, nil) { - t.Fatalf("expected: %v but received: %v", nil, err) - } + require.NoError(t, err) if dAddr != "25cZNQYVAi3issDCoa6fWA2Aogd4FgPhYdpX3p8KLfhKC6sN8s6Q9WpcW4778TPwcUS5jEM25JrQvjD3XjsvXuNHSWhYUsu" { t.Fatal("unexpected deposit address") } wdEnabled, err := m.IsWithdrawAndDepositsEnabled(eth) - if !errors.Is(err, nil) { - t.Fatalf("expected: %v but received: %v", nil, err) - } + require.NoError(t, err) if !wdEnabled { t.Fatal("unexpected results") } tEnabled, err := m.IsTradingEnabledForCurrency(eth) - if !errors.Is(err, nil) { - t.Fatalf("expected: %v but received: %v", nil, err) - } + require.NoError(t, err) if !tEnabled { t.Fatal("unexpected results") @@ -160,18 +151,14 @@ func TestWsCurrencyMap(t *testing.T) { cp := currency.NewPair(currency.USDT, currency.BTC) tEnabled, err = m.IsTradingEnabledForPair(cp) - if !errors.Is(err, nil) { - t.Fatalf("expected: %v but received: %v", nil, err) - } + require.NoError(t, err) if !tEnabled { t.Fatal("unexpected results") } postOnly, err := m.IsPostOnlyForPair(cp) - if !errors.Is(err, nil) { - t.Fatalf("expected: %v but received: %v", nil, err) - } + require.NoError(t, err) if postOnly { t.Fatal("unexpected results") diff --git a/exchanges/poloniex/poloniex_test.go b/exchanges/poloniex/poloniex_test.go index ae6c0b98..8c37e83c 100644 --- a/exchanges/poloniex/poloniex_test.go +++ b/exchanges/poloniex/poloniex_test.go @@ -297,7 +297,7 @@ func TestGetOrderStatus(t *testing.T) { } case mockTests: if tt.errExpected { - t.Errorf("Mock get order status expect an error '%s', get no error", tt.errMsgExpected) + t.Errorf("Mock get order status expect an error %q, get no error", tt.errMsgExpected) } } }) @@ -641,9 +641,7 @@ func TestGetHistoricCandles(t *testing.T) { } start := time.Unix(1588741402, 0) _, err = p.GetHistoricCandles(t.Context(), pair, asset.Spot, kline.FiveMin, start, time.Unix(1588745003, 0)) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetHistoricCandlesExtended(t *testing.T) { @@ -655,9 +653,7 @@ func TestGetHistoricCandlesExtended(t *testing.T) { } _, err = p.GetHistoricCandlesExtended(t.Context(), pair, asset.Spot, kline.FiveMin, time.Unix(1588741402, 0), time.Unix(1588745003, 0)) - if !errors.Is(err, nil) { - t.Fatal(err) - } + assert.NoError(t, err) } func TestGetRecentTrades(t *testing.T) { @@ -1107,9 +1103,7 @@ func TestCancelBatchOrders(t *testing.T) { func TestGetTimestamp(t *testing.T) { t.Parallel() st, err := p.GetTimestamp(t.Context()) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if st.IsZero() { t.Error("expected a time") @@ -1119,9 +1113,7 @@ func TestGetTimestamp(t *testing.T) { func TestGetServerTime(t *testing.T) { t.Parallel() st, err := p.GetServerTime(t.Context(), asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if st.IsZero() { t.Error("expected a time") @@ -1141,8 +1133,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, p) for _, a := range p.GetAssetTypes(false) { pairs, err := p.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := p.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/exchanges/request/client_test.go b/exchanges/request/client_test.go index 83f5b8c7..6850eaaf 100644 --- a/exchanges/request/client_test.go +++ b/exchanges/request/client_test.go @@ -8,6 +8,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/common" ) @@ -27,9 +28,7 @@ func TestCheckAndRegister(t *testing.T) { newLovelyClient := new(http.Client) err = tracker.checkAndRegister(newLovelyClient) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !tracker.contains(newLovelyClient) { t.Fatalf("received: '%v' but expected: '%v'", false, true) @@ -55,18 +54,14 @@ func TestDeRegister(t *testing.T) { } err = tracker.checkAndRegister(newLovelyClient) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !tracker.contains(newLovelyClient) { t.Fatalf("received: '%v' but expected: '%v'", false, true) } err = tracker.deRegister(newLovelyClient) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if tracker.contains(newLovelyClient) { t.Fatalf("received: '%v' but expected: '%v'", true, false) @@ -81,9 +76,7 @@ func TestNewProtectedClient(t *testing.T) { newLovelyClient := new(http.Client) protec, err := newProtectedClient(newLovelyClient) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if protec.protected != newLovelyClient { t.Fatal("unexpected value") @@ -105,9 +98,7 @@ func TestClientSetProxy(t *testing.T) { t.Fatalf("received: '%v' but expected: '%v'", err, errTransportNotSet) } err = (&client{protected: common.NewHTTPClientWithTimeout(0)}).setProxy(pp) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestClientSetHTTPClientTimeout(t *testing.T) { @@ -117,26 +108,20 @@ func TestClientSetHTTPClientTimeout(t *testing.T) { t.Fatalf("received: '%v' but expected: '%v'", err, errTransportNotSet) } err = (&client{protected: common.NewHTTPClientWithTimeout(0)}).setHTTPClientTimeout(time.Second) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestRelease(t *testing.T) { t.Parallel() newLovelyClient, err := newProtectedClient(common.NewHTTPClientWithTimeout(0)) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if !tracker.contains(newLovelyClient.protected) { t.Fatalf("received: '%v' but expected: '%v'", false, true) } err = newLovelyClient.release() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if tracker.contains(newLovelyClient.protected) { t.Fatalf("received: '%v' but expected: '%v'", true, false) diff --git a/exchanges/request/request_test.go b/exchanges/request/request_test.go index acb80d4d..266aae99 100644 --- a/exchanges/request/request_test.go +++ b/exchanges/request/request_test.go @@ -548,7 +548,7 @@ func TestEnableDisableRateLimit(t *testing.T) { err = sendIt() // this should block until a token is refilled require.NoError(t, err, "sendIt must not error") elapsed := time.Since(start) - assert.GreaterOrEqual(t, elapsed.Milliseconds(), int64(20), "Expected sendIt to block for at least 20ms, but it returned after %dms", elapsed.Milliseconds()) + assert.GreaterOrEqualf(t, elapsed.Milliseconds(), int64(20), "Expected sendIt to block for at least 20ms, but it returned after %dms", elapsed.Milliseconds()) } func TestSetHTTPClient(t *testing.T) { @@ -560,9 +560,8 @@ func TestSetHTTPClient(t *testing.T) { client := new(http.Client) r = new(Requester) err = r.SetHTTPClient(client) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected: '%v'", err, nil) - } + require.NoError(t, err) + err = r.SetHTTPClient(client) if !errors.Is(err, errCannotReuseHTTPClient) { t.Fatalf("received: '%v', but expected: '%v'", err, errCannotReuseHTTPClient) @@ -581,9 +580,7 @@ func TestSetHTTPClientTimeout(t *testing.T) { t.Fatal(err) } err = r.SetHTTPClientTimeout(time.Second) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestSetHTTPClientUserAgent(t *testing.T) { @@ -594,9 +591,7 @@ func TestSetHTTPClientUserAgent(t *testing.T) { } r = new(Requester) err = r.SetHTTPClientUserAgent("") - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestGetHTTPClientUserAgent(t *testing.T) { @@ -607,13 +602,11 @@ func TestGetHTTPClientUserAgent(t *testing.T) { } r = new(Requester) err = r.SetHTTPClientUserAgent("sillyness") - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected: '%v'", err, nil) - } + require.NoError(t, err) + ua, err := r.GetHTTPClientUserAgent() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v', but expected: '%v'", err, nil) - } + require.NoError(t, err) + if ua != "sillyness" { t.Fatal("unexpected value") } diff --git a/exchanges/subscription/fixtures_test.go b/exchanges/subscription/fixtures_test.go index f11888d7..0a161ae9 100644 --- a/exchanges/subscription/fixtures_test.go +++ b/exchanges/subscription/fixtures_test.go @@ -26,7 +26,7 @@ type mockExWithSubValidator struct { func (m *mockExWithSubValidator) ValidateSubscriptions(in List) error { for _, sub := range in { if sub.Channel == "fail-channel" { - return fmt.Errorf("%w: '%s'", errValidateSubscriptionsTestError, sub.String()) + return fmt.Errorf("%w: %q", errValidateSubscriptionsTestError, sub.String()) } } return nil diff --git a/exchanges/subscription/subscription_test.go b/exchanges/subscription/subscription_test.go index a5b774f7..c10ec22e 100644 --- a/exchanges/subscription/subscription_test.go +++ b/exchanges/subscription/subscription_test.go @@ -101,7 +101,7 @@ func TestSubscriptionClone(t *testing.T) { } a.EnsureKeyed() b := a.Clone() - assert.IsType(t, new(Subscription), b, "Clone must return a Subscription pointer") + assert.IsType(t, new(Subscription), b, "Clone should return a Subscription pointer") assert.NotSame(t, a, b, "Clone should return a new Subscription") assert.Nil(t, b.Key, "Clone should have a nil key") b.Pairs[0].Delimiter = "🐳" @@ -111,7 +111,7 @@ func TestSubscriptionClone(t *testing.T) { assert.NotEqual(t, params, b.Params, "Params should be cloned") assert.Equal(t, params, a.Params, "Original Params should be left alone") a.m.Lock() - assert.True(t, b.m.TryLock(), "Clone must use a different Mutex") + assert.True(t, b.m.TryLock(), "Clone should use a different Mutex") } // TestSetKey exercises SetKey diff --git a/exchanges/ticker/ticker_test.go b/exchanges/ticker/ticker_test.go index ee0b4552..ce1ee819 100644 --- a/exchanges/ticker/ticker_test.go +++ b/exchanges/ticker/ticker_test.go @@ -304,9 +304,7 @@ func TestProcessTicker(t *testing.T) { // non-appending function to tickers Bid: 1338, Ask: 1336, }) - if !errors.Is(err, nil) { - t.Errorf("received: %v but expected: %v", err, nil) - } + assert.NoError(t, err) // now test for processing a pair with a different quote currency newPair, err = currency.NewPairFromStrings("BTC", "AUD") diff --git a/exchanges/yobit/yobit_test.go b/exchanges/yobit/yobit_test.go index 6f297a1b..6ac78d74 100644 --- a/exchanges/yobit/yobit_test.go +++ b/exchanges/yobit/yobit_test.go @@ -1,7 +1,6 @@ package yobit import ( - "errors" "log" "math" "os" @@ -553,9 +552,7 @@ func TestUpdateTickers(t *testing.T) { func TestWrapperGetServerTime(t *testing.T) { t.Parallel() st, err := y.GetServerTime(t.Context(), asset.Spot) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if st.IsZero() { t.Fatal("expected a time") @@ -567,8 +564,8 @@ func TestGetCurrencyTradeURL(t *testing.T) { testexch.UpdatePairsOnce(t, y) for _, a := range y.GetAssetTypes(false) { pairs, err := y.CurrencyPairs.GetPairs(a, false) - require.NoError(t, err, "cannot get pairs for %s", a) - require.NotEmpty(t, pairs, "no pairs for %s", a) + require.NoErrorf(t, err, "cannot get pairs for %s", a) + require.NotEmptyf(t, pairs, "no pairs for %s", a) resp, err := y.GetCurrencyTradeURL(t.Context(), a, pairs[0]) require.NoError(t, err) assert.NotEmpty(t, resp) diff --git a/gctscript/modules/gct/gct_test.go b/gctscript/modules/gct/gct_test.go index 5fb1b0d8..219419aa 100644 --- a/gctscript/modules/gct/gct_test.go +++ b/gctscript/modules/gct/gct_test.go @@ -9,6 +9,7 @@ import ( objects "github.com/d5/tengo/v2" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/common" "github.com/thrasher-corp/gocryptotrader/exchanges/account" "github.com/thrasher-corp/gocryptotrader/exchanges/asset" @@ -348,9 +349,7 @@ func TestSetVerbose(t *testing.T) { } resp, err := setVerbose(&Context{}) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) ctx, ok := objects.ToInterface(resp).(*Context) if !ok { @@ -408,9 +407,7 @@ func TestSetAccount(t *testing.T) { } resp, err := setAccount(&Context{}, dummyStr, dummyStr, dummyStr, dummyStr, dummyStr, dummyStr) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) ctx, ok := objects.ToInterface(resp).(*Context) if !ok { @@ -461,9 +458,7 @@ func TestSetSubAccount(t *testing.T) { } subby, err := setSubAccount(&Context{}, dummyStr) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) ctxWSubAcc, ok := subby.(*Context) if !ok { @@ -498,14 +493,10 @@ func TestProcessScriptContext(t *testing.T) { } fromScript, err := setAccount(&Context{}, dummyStr, dummyStr, dummyStr, dummyStr, dummyStr, dummyStr) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) fromScript, err = setVerbose(fromScript) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) scriptCTX, ok := objects.ToInterface(fromScript).(*Context) if !ok { diff --git a/gctscript/modules/ta/indicators/indicators_test.go b/gctscript/modules/ta/indicators/indicators_test.go index cfb09e13..9286d9b5 100644 --- a/gctscript/modules/ta/indicators/indicators_test.go +++ b/gctscript/modules/ta/indicators/indicators_test.go @@ -115,7 +115,7 @@ func TestRsi(t *testing.T) { validator.IsTestExecution.Store(true) ret, err := rsi(ohlcvData, &objects.Int{Value: 14}) - require.NoError(t, err, "rsi should not throw an error") + require.NoError(t, err, "rsi must not throw an error") assert.NotNil(t, ret) validator.IsTestExecution.Store(false) diff --git a/internal/testing/exchange/exchange.go b/internal/testing/exchange/exchange.go index 527357eb..2506f831 100644 --- a/internal/testing/exchange/exchange.go +++ b/internal/testing/exchange/exchange.go @@ -40,7 +40,7 @@ func Setup(e exchange.IBotExchange) error { eName := e.GetName() exchConf, err := cfg.GetExchangeConfig(eName) if err != nil { - return fmt.Errorf("GetExchangeConfig(`%s`) error: %w", eName, err) + return fmt.Errorf("GetExchangeConfig(%q) error: %w", eName, err) } e.SetDefaults() b := e.GetBase() @@ -100,10 +100,10 @@ func MockWsInstance[T any, PT interface { b.SkipAuthCheck = true b.API.AuthenticatedWebsocketSupport = true err := b.API.Endpoints.SetRunning("RestSpotURL", s.URL) - require.NoError(tb, err, "Endpoints.SetRunning should not error for RestSpotURL") + require.NoError(tb, err, "Endpoints.SetRunning must not error for RestSpotURL") for _, auth := range []bool{true, false} { err = b.Websocket.SetWebsocketURL("ws"+strings.TrimPrefix(s.URL, "http"), auth, true) - require.NoErrorf(tb, err, "SetWebsocketURL should not error for auth: %v", auth) + require.NoErrorf(tb, err, "SetWebsocketURL must not error for auth: %v", auth) } // For testing we never want to use the default subscriptions; Tests of GenerateSubscriptions should be exercising it directly @@ -112,7 +112,7 @@ func MockWsInstance[T any, PT interface { b.Websocket.GenerateSubs = func() (subscription.List, error) { return subscription.List{}, nil } err = b.Websocket.Connect() - require.NoError(tb, err, "Connect should not error") + require.NoError(tb, err, "Connect must not error") return e } @@ -138,7 +138,7 @@ func FixtureToDataHandlerWithErrors(tb testing.TB, fixturePath string, reader fu tb.Helper() fixture, err := os.Open(fixturePath) - require.NoError(tb, err, "Opening fixture '%s' must not error", fixturePath) + require.NoErrorf(tb, err, "Opening fixture %q must not error", fixturePath) defer func() { assert.NoError(tb, fixture.Close(), "Closing the fixture file should not error") }() diff --git a/internal/testing/websocket/mock.go b/internal/testing/websocket/mock.go index 4bf28f03..2452e4c4 100644 --- a/internal/testing/websocket/mock.go +++ b/internal/testing/websocket/mock.go @@ -28,7 +28,7 @@ func CurryWsMockUpgrader(tb testing.TB, wsHandler WsMockFunc) http.HandlerFunc { func WsMockUpgrader(tb testing.TB, w http.ResponseWriter, r *http.Request, wsHandler WsMockFunc) { tb.Helper() c, err := upgrader.Upgrade(w, r, nil) - require.NoError(tb, err, "Upgrade connection should not error") + require.NoError(tb, err, "Upgrade connection must not error") defer c.Close() for { _, p, err := c.ReadMessage() diff --git a/log/logger_test.go b/log/logger_test.go index b33ac3b1..bd1cf436 100644 --- a/log/logger_test.go +++ b/log/logger_test.go @@ -10,6 +10,7 @@ import ( "time" "github.com/gofrs/uuid" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/common/convert" "github.com/thrasher-corp/gocryptotrader/encoding/json" ) @@ -105,9 +106,7 @@ func TestSetGlobalLogConfig(t *testing.T) { t.Fatalf("received: '%v' but expected: '%v'", err, errConfigNil) } err = SetGlobalLogConfig(testConfigEnabled) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) } func TestSetLogPath(t *testing.T) { @@ -118,9 +117,7 @@ func TestSetLogPath(t *testing.T) { } err = SetLogPath(tempDir) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) if path := GetLogPath(); path != tempDir { t.Fatalf("received: '%v' but expected: '%v'", path, tempDir) @@ -155,9 +152,8 @@ func TestAddWriter(t *testing.T) { } mw, err := multiWriter() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + err = mw.add(io.Discard) if err != nil { t.Fatal(err) @@ -248,9 +244,8 @@ func TestGetWriters(t *testing.T) { } fileLoggingConfiguredCorrectly = true _, err = getWriters(&SubLoggerConfig{Output: outputWriters}) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + mu.Unlock() outputWriters = "stdout|stderr|noobs" @@ -589,9 +584,7 @@ func TestNewSubLogger(t *testing.T) { } sl, err := NewSubLogger("TESTERINOS") - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) Debugln(sl, "testerinos") @@ -620,21 +613,15 @@ func TestRotateWrite(t *testing.T) { // test write payload = make([]byte, 1*megabyte-1) _, err = empty.Write(payload) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) // test rotate payload = make([]byte, 1*megabyte) _, err = empty.Write(payload) - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) err = empty.Close() - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) } func TestOpenNew(t *testing.T) { @@ -647,14 +634,10 @@ func TestOpenNew(t *testing.T) { empty.FileName = "wow.txt" err = empty.openNew() - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) err = empty.Close() - if !errors.Is(err, nil) { - t.Fatalf("received: %v but expected: %v", err, nil) - } + require.NoError(t, err) } type testBuffer struct { diff --git a/main.go b/main.go index 5b4b54c5..d92d7172 100644 --- a/main.go +++ b/main.go @@ -141,7 +141,7 @@ func main() { gctscript.Setup() - gctlog.Infof(gctlog.Global, "JSON encoding is set to package `%s`", json.Implementation) + gctlog.Infof(gctlog.Global, "JSON encoding is set to package %q", json.Implementation) engine.Bot.Settings.PrintLoadedSettings() diff --git a/types/number_test.go b/types/number_test.go index aa5499e9..78e8b4e1 100644 --- a/types/number_test.go +++ b/types/number_test.go @@ -29,7 +29,7 @@ func TestNumberUnmarshalJSON(t *testing.T) { // Invalid value checking for _, i := range []string{`"MEOW"`, `null`, `false`, `true`, `"1337.37`} { err = n.UnmarshalJSON([]byte(i)) - assert.ErrorIsf(t, err, errInvalidNumberValue, "UnmarshalJSON should error with invalid Value for `%s`", i) + assert.ErrorIsf(t, err, errInvalidNumberValue, "UnmarshalJSON should error with invalid Value for %q", i) } }