mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-06-02 07:26:53 +00:00
* 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
69 lines
2.3 KiB
Go
69 lines
2.3 KiB
Go
package websocket
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMatch(t *testing.T) {
|
|
t.Parallel()
|
|
load := []byte("42")
|
|
assert.False(t, new(Match).IncomingWithData("hello", load), "Should not match an uninitialised Match")
|
|
|
|
match := NewMatch()
|
|
assert.False(t, match.IncomingWithData("hello", load), "Should not match an empty signature")
|
|
|
|
_, err := match.Set("hello", 0)
|
|
require.ErrorIs(t, err, errInvalidBufferSize, "Must error on zero buffer size")
|
|
_, err = match.Set("hello", -1)
|
|
require.ErrorIs(t, err, errInvalidBufferSize, "Must error on negative buffer size")
|
|
ch, err := match.Set("hello", 2)
|
|
require.NoError(t, err, "Set must not error")
|
|
assert.True(t, match.IncomingWithData("hello", []byte("hello")))
|
|
assert.Equal(t, "hello", string(<-ch))
|
|
|
|
_, err = match.Set("hello", 2)
|
|
assert.ErrorIs(t, err, errSignatureCollision, "Should error on signature collision")
|
|
|
|
assert.True(t, match.IncomingWithData("hello", load), "Should match with matching message and signature")
|
|
assert.False(t, match.IncomingWithData("hello", load), "Should not match with matching message and signature")
|
|
|
|
assert.Len(t, ch, 1, "Channel should have 1 items, 1 was already read above")
|
|
}
|
|
|
|
func TestRemoveSignature(t *testing.T) {
|
|
t.Parallel()
|
|
match := NewMatch()
|
|
ch, err := match.Set("masterblaster", 1)
|
|
select {
|
|
case <-ch:
|
|
t.Fatal("Should not be able to read from an empty channel")
|
|
default:
|
|
}
|
|
require.NoError(t, err)
|
|
match.RemoveSignature("masterblaster")
|
|
select {
|
|
case garbage := <-ch:
|
|
require.Empty(t, garbage)
|
|
default:
|
|
t.Fatal("Should be able to read from a closed channel")
|
|
}
|
|
}
|
|
|
|
func TestRequireMatchWithData(t *testing.T) {
|
|
t.Parallel()
|
|
match := NewMatch()
|
|
err := match.RequireMatchWithData("hello", []byte("world"))
|
|
require.ErrorIs(t, err, ErrSignatureNotMatched, "Must error on unmatched signature")
|
|
assert.Contains(t, err.Error(), "world", "Should contain the data in the error message")
|
|
assert.Contains(t, err.Error(), "hello", "Should contain the signature in the error message")
|
|
|
|
ch, err := match.Set("hello", 1)
|
|
require.NoError(t, err, "Set must not error")
|
|
err = match.RequireMatchWithData("hello", []byte("world"))
|
|
require.NoError(t, err, "Must not error on matched signature")
|
|
assert.Equal(t, "world", string(<-ch))
|
|
}
|