mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 23:16:45 +00:00
* Subscriptions: Add List.AssetPairs * Subscriptions: Add Template and QualifiedChannel These fields separate the concept of what the channel is from the qualified resource name * Subscriptions: Add List.SetStates() * Subscriptions: Add List.QualifiedChannels * Subscriptions: Rename testsubs.EqualLists * Binance: Switch to ExpandTemplates * Binance: Update ConfigTest format * Subscriptions: Test Coverage improvements * Subscriptions: Reenterant List.ExpandTemplates * Subscriptions: Move templates from subscriptions to exchanges * Binance: Inline subscription template and improvements
100 lines
4.6 KiB
Go
100 lines
4.6 KiB
Go
package subscription
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/thrasher-corp/gocryptotrader/currency"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/kline"
|
|
)
|
|
|
|
// TestExpandTemplates exercises ExpandTemplates
|
|
func TestExpandTemplates(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
e := &mockEx{
|
|
tpl: "subscriptions.tmpl",
|
|
}
|
|
|
|
// Functionality tests
|
|
l := List{
|
|
{Channel: "feature1"},
|
|
{Channel: "feature2", Asset: asset.All, Pairs: currency.Pairs{btcusdtPair, ethusdcPair}, Interval: kline.FifteenMin},
|
|
{Channel: "feature3", Asset: asset.All, Pairs: currency.Pairs{btcusdtPair, ethusdcPair}, Levels: 100},
|
|
{Channel: "feature4", Authenticated: true},
|
|
{Channel: "feature1", QualifiedChannel: "just one sub already processed"},
|
|
}
|
|
got, err := l.ExpandTemplates(e)
|
|
require.NoError(t, err, "ExpandTemplates must not error")
|
|
exp := List{
|
|
{Channel: "feature1", QualifiedChannel: "feature1"},
|
|
{Channel: "feature2", QualifiedChannel: "spot-feature2@15m", Asset: asset.Spot, Pairs: currency.Pairs{btcusdtPair, ethusdcPair}, Interval: kline.FifteenMin},
|
|
{Channel: "feature2", QualifiedChannel: "future-feature2@15m", Asset: asset.Futures, Pairs: currency.Pairs{btcusdtPair, ethusdcPair}, Interval: kline.FifteenMin},
|
|
{Channel: "feature3", QualifiedChannel: "spot-USDTBTC-feature3@100", Asset: asset.Spot, Pairs: currency.Pairs{btcusdtPair}, Levels: 100},
|
|
{Channel: "feature3", QualifiedChannel: "spot-USDCETH-feature3@100", Asset: asset.Spot, Pairs: currency.Pairs{ethusdcPair}, Levels: 100},
|
|
{Channel: "feature3", QualifiedChannel: "future-USDTBTC-feature3@100", Asset: asset.Futures, Pairs: currency.Pairs{btcusdtPair}, Levels: 100},
|
|
{Channel: "feature3", QualifiedChannel: "future-USDCETH-feature3@100", Asset: asset.Futures, Pairs: currency.Pairs{ethusdcPair}, Levels: 100},
|
|
{Channel: "feature1", QualifiedChannel: "just one sub already processed"},
|
|
}
|
|
|
|
if !equalLists(t, exp, got) {
|
|
t.FailNow() // If the first list isn't equal testing it again will duplicate test failures
|
|
}
|
|
|
|
e.auth = true
|
|
got, err = l.ExpandTemplates(e)
|
|
require.NoError(t, err, "ExpandTemplates must not error")
|
|
exp = append(exp,
|
|
&Subscription{Channel: "feature4", QualifiedChannel: "feature4-authed"},
|
|
)
|
|
equalLists(t, exp, got)
|
|
|
|
_, err = List{{Channel: "feature2", Asset: asset.Spot}}.ExpandTemplates(e)
|
|
assert.ErrorIs(t, err, errAssetTemplateWithoutAll, "Should error correctly on xpand assets without All")
|
|
|
|
e.tpl = "errors.tmpl"
|
|
_, err = List{{Channel: "error1", Asset: asset.All}}.ExpandTemplates(e)
|
|
assert.ErrorIs(t, err, errInvalidAssetExpandPairs, "Should error correctly on xpand pairs but not assets")
|
|
|
|
_, err = List{{Channel: "error1"}}.ExpandTemplates(e)
|
|
assert.ErrorIs(t, err, errInvalidAssetExpandPairs, "Should error correctly on xpand pairs but not assets")
|
|
|
|
_, err = List{{Channel: "error2"}}.ExpandTemplates(e)
|
|
assert.ErrorContains(t, err, "wrong number of args for String", "Should error correctly with execution error")
|
|
|
|
_, err = List{{Channel: "non-existent"}}.ExpandTemplates(e)
|
|
assert.ErrorIs(t, err, errNoTemplateContent, "Should error correctly when no content generated")
|
|
assert.ErrorContains(t, err, "non-existent", "Should error correctly when no content generated")
|
|
|
|
_, err = List{{Channel: "error3", Asset: asset.All}}.ExpandTemplates(e)
|
|
assert.ErrorIs(t, err, errAssetRecords, "Should error correctly when invalid number of asset entries")
|
|
|
|
_, err = List{{Channel: "error4", Asset: asset.Spot}}.ExpandTemplates(e)
|
|
assert.ErrorIs(t, err, errPairRecords, "Should error correctly when invalid number of pair entries")
|
|
|
|
_, err = List{{Channel: "error4", Asset: asset.Margin}}.ExpandTemplates(e)
|
|
assert.ErrorIs(t, err, asset.ErrInvalidAsset, "Should error correctly when invalid asset")
|
|
|
|
e.tpl = "parse-error.tmpl"
|
|
_, err = l.ExpandTemplates(e)
|
|
assert.ErrorContains(t, err, "function \"explode\" not defined", "Should error correctly on unparsable template")
|
|
|
|
e.errFormat = errors.New("the planet Krypton is gone")
|
|
_, err = l.ExpandTemplates(e)
|
|
assert.ErrorIs(t, err, e.errFormat, "Should error correctly on GetPairFormat")
|
|
|
|
e.errPairs = errors.New("bad parenting from Jor-El")
|
|
_, err = l.ExpandTemplates(e)
|
|
assert.ErrorIs(t, err, e.errPairs, "Should error correctly on GetEnabledPairs")
|
|
|
|
l = List{{Channel: "feature1", QualifiedChannel: "already happy"}}
|
|
got, err = l.ExpandTemplates(e)
|
|
require.NoError(t, err)
|
|
require.Len(t, got, 1, "Must get back the one sub")
|
|
assert.Equal(t, "already happy", l[0].QualifiedChannel, "Should get back the one sub")
|
|
assert.NotSame(t, got, l, "Should get back a different actual list")
|
|
}
|