Files
gocryptotrader/exchanges/kraken/mock_ws_test.go
Gareth Kirwan b4e45e9a1b Websocket: Restructure files and types (#1859)
* Websocket: Rename stream package

* Websocket: Rename Websocket to Manager

* Websocket: Replace explicit errs with common.NilGuard

* Websocket: Move websocket_types.go to types.go

* Websocket: Minor field comment and alignment in types

* Webosocket: Rename WebsocketConnection to Connection

* Alphapoint: Make gorilla ws import explicit

Just to avoid confusion with our own packages.

* Websocket: Move stream_match to match

* Websocket: Move websocket_connection to connection

* Websocket: Move websocket.go to manager.go

* Websocket: Break out all subscription methods into subscriptions.go

* Websocket: Move connection type into its file

* Websocket: Remove PositionUpdated

Type is not used anywhere

* Kraken: Use local constant for pong

Was the only use of websocket.Pong and doesn't really feel right to
represent kraken's api resp in one of our packages

* Websocket: Move connection sub-types to connection package

* Websocket: Move manager types into manager

* Websocket: Move ConnectionWrapper into manager

* Websocket: Move websocket_test to manager_test

* Websocket: Privatise connectionWrapper

* Websocket: Remaining types into types.go

These really belong somewhere else mostly, but this will do for now

* Websocket: Tidy up connection method vars

* Gofumpt: Moving package imports around

* Websocket: Rename errDuplicateConnectionSetup

* Websocket: Fix duplicate import of gws

* Websocket: Fix gofumpt -extra

* Websocket: Standardise import of gws across other pkgs

* Kraken: Remove unused sub conf consts

These were replaced by the generic Levels and Depth fields on all subs

* Websocket: Privitise ConnectioWrapper fields

* Websocket: inline single use var WebsocketNotAuthenticatedUsingRest

* Websocket: Move documentation to template

* Bithumb: Assertify TestWsHandleData
2025-04-10 16:25:02 +10:00

77 lines
2.0 KiB
Go

package kraken
import (
"fmt"
"strings"
"testing"
"github.com/buger/jsonparser"
gws "github.com/gorilla/websocket"
"github.com/stretchr/testify/assert"
"github.com/thrasher-corp/gocryptotrader/encoding/json"
)
func mockWsServer(tb testing.TB, msg []byte, w *gws.Conn) error {
tb.Helper()
event, err := jsonparser.GetUnsafeString(msg, "event")
if err != nil {
return err
}
switch event {
case krakenWsCancelOrder:
return mockWsCancelOrders(tb, msg, w)
case krakenWsAddOrder:
return mockWsAddOrder(tb, msg, w)
}
return nil
}
func mockWsCancelOrders(tb testing.TB, msg []byte, w *gws.Conn) error {
tb.Helper()
var req WsCancelOrderRequest
if err := json.Unmarshal(msg, &req); err != nil {
return err
}
resp := WsCancelOrderResponse{
Event: krakenWsCancelOrderStatus,
Status: "ok",
RequestID: req.RequestID,
Count: int64(len(req.TransactionIDs)),
}
if len(req.TransactionIDs) == 0 || strings.Contains(req.TransactionIDs[0], "FISH") { // Reject anything that smells suspicious
resp.Status = "error"
resp.ErrorMessage = "[EOrder:Unknown order]"
}
msg, err := json.Marshal(resp)
if err != nil {
return err
}
return w.WriteMessage(gws.TextMessage, msg)
}
func mockWsAddOrder(tb testing.TB, msg []byte, w *gws.Conn) error {
tb.Helper()
var req WsAddOrderRequest
if err := json.Unmarshal(msg, &req); err != nil {
return err
}
assert.Equal(tb, "buy", req.OrderSide, "OrderSide should be correct")
assert.Equal(tb, "limit", req.OrderType, "OrderType should be correct")
assert.Equal(tb, "XBT/USD", req.Pair, "Pair should be correct")
assert.Equal(tb, 80000.0, req.Price, "Pair should be correct")
resp := WsAddOrderResponse{
Event: krakenWsAddOrderStatus,
Status: "ok",
RequestID: req.RequestID,
TransactionID: "ONPNXH-KMKMU-F4MR5V",
Description: fmt.Sprintf("%s %.f %s @ %s %.f", req.OrderSide, req.Volume, req.Pair, req.OrderSide, req.Price),
}
msg, err := json.Marshal(resp)
if err != nil {
return err
}
return w.WriteMessage(gws.TextMessage, msg)
}