mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-04 15:10:54 +00:00
stream/websocket: Consolidate fields by using exchange config pointer (#809)
* stream: add exchange config pointer to setup WebsocketSetup struct to reduce and consolidate setting of variables. * config: reduce stutter * config: reduce minor stutter * glorious: nits addr. * Update exchanges/stream/websocket.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * websocket: implement fix * engine/helpers: fix test * exchanges: fix after merge issues * exchange_template: fix output Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
This commit is contained in:
@@ -16,6 +16,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/thrasher-corp/gocryptotrader/config"
|
||||
"github.com/thrasher-corp/gocryptotrader/currency"
|
||||
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
|
||||
)
|
||||
@@ -52,15 +53,21 @@ type testResponse struct {
|
||||
}
|
||||
|
||||
var defaultSetup = &WebsocketSetup{
|
||||
Enabled: true,
|
||||
AuthenticatedWebsocketAPISupport: true,
|
||||
WebsocketTimeout: time.Second * 5,
|
||||
DefaultURL: "testDefaultURL",
|
||||
ExchangeName: "exchangeName",
|
||||
RunningURL: "wss://testRunningURL",
|
||||
Connector: func() error { return nil },
|
||||
Subscriber: func(_ []ChannelSubscription) error { return nil },
|
||||
UnSubscriber: func(_ []ChannelSubscription) error { return nil },
|
||||
ExchangeConfig: &config.Exchange{
|
||||
Features: &config.FeaturesConfig{
|
||||
Enabled: config.FeaturesEnabledConfig{Websocket: true},
|
||||
},
|
||||
API: config.APIConfig{
|
||||
AuthenticatedWebsocketSupport: true,
|
||||
},
|
||||
WebsocketTrafficTimeout: time.Second * 5,
|
||||
Name: "exchangeName",
|
||||
},
|
||||
DefaultURL: "testDefaultURL",
|
||||
RunningURL: "wss://testRunningURL",
|
||||
Connector: func() error { return nil },
|
||||
Subscriber: func(_ []ChannelSubscription) error { return nil },
|
||||
Unsubscriber: func(_ []ChannelSubscription) error { return nil },
|
||||
GenerateSubscriptions: func() ([]ChannelSubscription, error) {
|
||||
return []ChannelSubscription{
|
||||
{Channel: "TestSub"},
|
||||
@@ -90,75 +97,104 @@ func TestSetup(t *testing.T) {
|
||||
t.Parallel()
|
||||
var w *Websocket
|
||||
err := w.Setup(nil)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errWebsocketIsNil) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketIsNil)
|
||||
}
|
||||
|
||||
w = &Websocket{DataHandler: make(chan interface{})}
|
||||
err = w.Setup(nil)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errWebsocketSetupIsNil) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketSetupIsNil)
|
||||
}
|
||||
w.Init = true
|
||||
|
||||
websocketSetup := &WebsocketSetup{}
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errWebsocketAlreadyInitialised) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketAlreadyInitialised)
|
||||
}
|
||||
|
||||
w.Init = true
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errExchangeConfigIsNil) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errExchangeConfigIsNil)
|
||||
}
|
||||
|
||||
websocketSetup.ExchangeConfig = &config.Exchange{}
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errExchangeConfigNameUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errExchangeConfigNameUnset)
|
||||
}
|
||||
websocketSetup.ExchangeConfig.Name = "testname"
|
||||
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errWebsocketFeaturesIsUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketFeaturesIsUnset)
|
||||
}
|
||||
|
||||
websocketSetup.Features = &protocol.Features{}
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errConfigFeaturesIsNil) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errConfigFeaturesIsNil)
|
||||
}
|
||||
websocketSetup.Features.Subscribe = true
|
||||
|
||||
websocketSetup.ExchangeConfig.Features = &config.FeaturesConfig{}
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errWebsocketConnectorUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketConnectorUnset)
|
||||
}
|
||||
|
||||
websocketSetup.Connector = func() error { return nil }
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errWebsocketSubscriberUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketSubscriberUnset)
|
||||
}
|
||||
|
||||
websocketSetup.Subscriber = func([]ChannelSubscription) error { return nil }
|
||||
websocketSetup.Features.Unsubscribe = true
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
if !errors.Is(err, errWebsocketUnsubscriberUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketUnsubscriberUnset)
|
||||
}
|
||||
websocketSetup.UnSubscriber = func([]ChannelSubscription) error { return nil }
|
||||
|
||||
websocketSetup.Unsubscriber = func([]ChannelSubscription) error { return nil }
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.DefaultURL = "test"
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.RunningURL = "http://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.RunningURL = "wss://www.google.com"
|
||||
websocketSetup.RunningURLAuth = "http://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.RunningURLAuth = "wss://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.ExchangeName = "testname"
|
||||
err = w.Setup(websocketSetup)
|
||||
if err == nil {
|
||||
t.Fatal("error cannot be nil")
|
||||
}
|
||||
websocketSetup.WebsocketTimeout = time.Minute
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errGenerateSubsciptionsUnset) {
|
||||
t.Fatalf("received: %v but expected: %v", err, errGenerateSubsciptionsUnset)
|
||||
if !errors.Is(err, errWebsocketSubscriptionsGeneratorUnset) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketSubscriptionsGeneratorUnset)
|
||||
}
|
||||
|
||||
websocketSetup.GenerateSubscriptions = func() ([]ChannelSubscription, error) { return nil, nil }
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errDefaultURLIsEmpty) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errDefaultURLIsEmpty)
|
||||
}
|
||||
|
||||
websocketSetup.DefaultURL = "test"
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errRunningURLIsEmpty) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errRunningURLIsEmpty)
|
||||
}
|
||||
|
||||
websocketSetup.RunningURL = "http://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errInvalidWebsocketURL) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errInvalidWebsocketURL)
|
||||
}
|
||||
|
||||
websocketSetup.RunningURL = "wss://www.google.com"
|
||||
websocketSetup.RunningURLAuth = "http://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errInvalidWebsocketURL) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errInvalidWebsocketURL)
|
||||
}
|
||||
|
||||
websocketSetup.RunningURLAuth = "wss://www.google.com"
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, errInvalidTrafficTimeout) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errInvalidTrafficTimeout)
|
||||
}
|
||||
|
||||
websocketSetup.ExchangeConfig.WebsocketTrafficTimeout = time.Minute
|
||||
err = w.Setup(websocketSetup)
|
||||
if !errors.Is(err, nil) {
|
||||
t.Fatalf("received: %v but expected: %v", err, nil)
|
||||
}
|
||||
@@ -294,11 +330,15 @@ func TestWebsocket(t *testing.T) {
|
||||
t.Parallel()
|
||||
wsInit := Websocket{}
|
||||
err := wsInit.Setup(&WebsocketSetup{
|
||||
ExchangeName: "test",
|
||||
Enabled: true,
|
||||
ExchangeConfig: &config.Exchange{
|
||||
Features: &config.FeaturesConfig{
|
||||
Enabled: config.FeaturesEnabledConfig{Websocket: true},
|
||||
},
|
||||
Name: "test",
|
||||
},
|
||||
})
|
||||
if err != nil && err.Error() != "test Websocket already initialised" {
|
||||
t.Errorf("Expected 'test Websocket already initialised', received %v", err)
|
||||
if !errors.Is(err, errWebsocketAlreadyInitialised) {
|
||||
t.Fatalf("received: '%v' but expected: '%v'", err, errWebsocketAlreadyInitialised)
|
||||
}
|
||||
|
||||
ws := *New()
|
||||
|
||||
Reference in New Issue
Block a user