Skip to content

Instantly share code, notes, and snippets.

@gloriousCode
Created March 27, 2024 00:05
Show Gist options
  • Save gloriousCode/630e1e8257cb7c3eb659bd60aa2291c7 to your computer and use it in GitHub Desktop.
Save gloriousCode/630e1e8257cb7c3eb659bd60aa2291c7 to your computer and use it in GitHub Desktop.
@ -0,0 +1,151 @@
diff --git a/exchanges/kraken/kraken_test.go b/exchanges/kraken/kraken_test.go
index c10fbe10b..377275064 100644
--- a/exchanges/kraken/kraken_test.go
+++ b/exchanges/kraken/kraken_test.go
@@ -28,7 +28,6 @@ import (
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
"github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues"
- "github.com/thrasher-corp/gocryptotrader/exchanges/stream"
"github.com/thrasher-corp/gocryptotrader/exchanges/subscription"
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
testexch "github.com/thrasher-corp/gocryptotrader/internal/testing/exchange"
@@ -1180,45 +1179,42 @@ func TestWithdrawCancel(t *testing.T) {
// ---------------------------- Websocket tests -----------------------------------------
-func setupWsTests(t *testing.T) {
- t.Helper()
- if wsSetupRan {
- return
- }
- if !k.Websocket.IsEnabled() && !k.API.AuthenticatedWebsocketSupport || !sharedtestvalues.AreAPICredentialsSet(k) {
- t.Skip(stream.ErrWebsocketNotEnabled.Error())
+func mockWsSubscribe(msg []byte, w *websocket.Conn) error {
+ var req WebsocketSubscriptionEventRequest
+ if err := json.Unmarshal(msg, &req); err != nil {
+ return err
}
- var dialer websocket.Dialer
- err := k.Websocket.Conn.Dial(&dialer, http.Header{})
- if err != nil {
- t.Fatal(err)
+ if req.Event != krakenWsSubscribe {
+ return fmt.Errorf("expected event %s, received %s", krakenWsSubscribe, req.Event)
}
- err = k.Websocket.AuthConn.Dial(&dialer, http.Header{})
- if err != nil {
- t.Fatal(err)
+ if req.Subscription.Name != krakenWsTicker {
+ return fmt.Errorf("expected subscription %s, received %s", krakenWsTicker, req.Subscription.Name)
}
- token, err := k.GetWebsocketToken(context.Background())
+ resp := WebsocketEventResponse{
+ WebsocketBaseEventRequest: WebsocketBaseEventRequest{
+ Event: krakenWsSubscriptionStatus,
+ },
+ Status: "subscribed",
+ RequestID: req.RequestID,
+ Subscription: WebsocketSubscriptionResponseData{
+ Name: req.Subscription.Name,
+ },
+ WebsocketSubscriptionEventResponse: WebsocketSubscriptionEventResponse{
+ ChannelID: 1337,
+ },
+ }
+ respJSON, err := json.Marshal(resp)
if err != nil {
- t.Error(err)
+ return err
}
- authToken = token
- comms := make(chan stream.Response)
- go k.wsFunnelConnectionData(k.Websocket.Conn, comms)
- go k.wsFunnelConnectionData(k.Websocket.AuthConn, comms)
- go k.wsReadData(comms)
- go func() {
- err := k.wsPingHandler()
- if err != nil {
- fmt.Println("error:", err)
- }
- }()
- wsSetupRan = true
+ return w.WriteMessage(websocket.TextMessage, respJSON)
}
// TestWebsocketSubscribe tests returning a message with an id
func TestWebsocketSubscribe(t *testing.T) {
- setupWsTests(t)
+ t.Parallel()
+ k := testexch.MockWsInstance[Kraken](t, curryWsMockUpgrader(t, mockWsSubscribe)) //nolint:govet // Intentional shadow to avoid future copy/paste mistakes
err := k.Subscribe([]subscription.Subscription{
{
Channel: defaultSubscribedChannels[0],
@@ -1297,8 +1293,31 @@ func TestWsCancelOrders(t *testing.T) {
assert.NoError(t, err, "Should not error with valid ids")
}
+func mockWsCancelAllOrders(msg []byte, w *websocket.Conn) error {
+ var req WsCancelOrderRequest
+ if err := json.Unmarshal(msg, &req); err != nil {
+ return err
+ }
+ if req.Event != krakenWsCancelAll {
+ return fmt.Errorf("expected event %s, received %s", krakenWsCancelAll, req.Event)
+ }
+ resp := WsCancelOrderResponse{
+ Event: krakenWsCancelOrderStatus,
+ Status: "ok",
+ RequestID: req.RequestID,
+ Count: int64(len(req.TransactionIDs)),
+ }
+ respJSON, err := json.Marshal(resp)
+ if err != nil {
+ return err
+ }
+ return w.WriteMessage(websocket.TextMessage, respJSON)
+}
+
func TestWsCancelAllOrders(t *testing.T) {
- setupWsTests(t)
+ t.Parallel()
+ k := testexch.MockWsInstance[Kraken](t, curryWsMockUpgrader(t, mockWsCancelAllOrders)) //nolint:govet // Intentional shadow to avoid future copy/paste mistakes
+ require.True(t, k.IsWebsocketAuthenticationSupported(), "WS must be authenticated")
if _, err := k.wsCancelAllOrders(); err != nil {
t.Error(err)
}
diff --git a/exchanges/kraken/kraken_websocket.go b/exchanges/kraken/kraken_websocket.go
index 65cd65700..74a5d4456 100644
--- a/exchanges/kraken/kraken_websocket.go
+++ b/exchanges/kraken/kraken_websocket.go
@@ -505,6 +505,7 @@ func (k *Kraken) wsProcessOpenOrders(ownOrders interface{}) error {
d := &order.Detail{
Exchange: k.Name,
OrderID: key,
+ AssetType: asset.Spot,
AverageExecutedPrice: val.AveragePrice,
Amount: val.Volume,
LimitPriceUpper: val.LimitPrice,
@@ -550,7 +551,6 @@ func (k *Kraken) wsProcessOpenOrders(ownOrders interface{}) error {
} else {
d.Type = oType
}
-
if p, err := currency.NewPairFromString(val.Description.Pair); err != nil {
k.Websocket.DataHandler <- order.ClassificationError{
Exchange: k.Name,
@@ -559,13 +559,6 @@ func (k *Kraken) wsProcessOpenOrders(ownOrders interface{}) error {
}
} else {
d.Pair = p
- if d.AssetType, err = k.GetPairAssetType(p); err != nil {
- k.Websocket.DataHandler <- order.ClassificationError{
- Exchange: k.Name,
- OrderID: key,
- Err: err,
- }
- }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment