mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-21 07:26:48 +00:00
btcmarkets: Add websocket orderbook checksum validation (#900)
* btcmarkets: add websocket checksum, fetch different book via REST * Update exchanges/btcmarkets/btcmarkets_test.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * buffer: add explicit type for buffer related variables and comments, do all checks buffer side and load in setup as per glorious recom. * buffer: fix tests add error * buffer: test re-add code cov * depth/stream/ws: fix tests, change field name to be more specific. * buffer: rm unused field and small comment fixes * btcm: remove redundant field * glorious: nits * buffer: fix commenting Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
This commit is contained in:
@@ -392,6 +392,8 @@ func TestOutOfOrderIDs(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
var errTest = errors.New("test error")
|
||||
|
||||
func TestOrderbookLastUpdateID(t *testing.T) {
|
||||
holder, _, _, err := createSnapshot()
|
||||
if err != nil {
|
||||
@@ -402,6 +404,21 @@ func TestOrderbookLastUpdateID(t *testing.T) {
|
||||
exp, itemArray[1][0].Price)
|
||||
}
|
||||
|
||||
holder.checksum = func(state *orderbook.Base, checksum uint32) error { return errTest }
|
||||
|
||||
err = holder.Update(&Update{
|
||||
Asks: []orderbook.Item{{Price: 999999}},
|
||||
Pair: cp,
|
||||
UpdateID: -1,
|
||||
Asset: asset.Spot,
|
||||
})
|
||||
if !errors.Is(err, errTest) {
|
||||
t.Fatalf("received: %v but expected: %v", err, errTest)
|
||||
}
|
||||
|
||||
holder.checksum = func(state *orderbook.Base, checksum uint32) error { return nil }
|
||||
holder.updateIDProgression = true
|
||||
|
||||
for i := range itemArray {
|
||||
asks := itemArray[i]
|
||||
err = holder.Update(&Update{
|
||||
@@ -415,6 +432,18 @@ func TestOrderbookLastUpdateID(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// out of order
|
||||
holder.verbose = true
|
||||
err = holder.Update(&Update{
|
||||
Asks: []orderbook.Item{{Price: 999999}},
|
||||
Pair: cp,
|
||||
UpdateID: 1,
|
||||
Asset: asset.Spot,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
ob, err := holder.GetOrderbook(cp, asset.Spot)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -715,19 +744,25 @@ func TestGetOrderbook(t *testing.T) {
|
||||
func TestSetup(t *testing.T) {
|
||||
t.Parallel()
|
||||
w := Orderbook{}
|
||||
err := w.Setup(nil, false, false, false, nil)
|
||||
err := w.Setup(nil, nil, nil)
|
||||
if !errors.Is(err, errExchangeConfigNil) {
|
||||
t.Fatalf("expected error %v but received %v", errExchangeConfigNil, err)
|
||||
}
|
||||
|
||||
exchangeConfig := &config.Exchange{}
|
||||
err = w.Setup(exchangeConfig, false, false, false, nil)
|
||||
err = w.Setup(exchangeConfig, nil, nil)
|
||||
if !errors.Is(err, errBufferConfigNil) {
|
||||
t.Fatalf("expected error %v but received %v", errBufferConfigNil, err)
|
||||
}
|
||||
|
||||
bufferConf := &Config{}
|
||||
err = w.Setup(exchangeConfig, bufferConf, nil)
|
||||
if !errors.Is(err, errUnsetDataHandler) {
|
||||
t.Fatalf("expected error %v but received %v", errUnsetDataHandler, err)
|
||||
}
|
||||
|
||||
exchangeConfig.Orderbook.WebsocketBufferEnabled = true
|
||||
err = w.Setup(exchangeConfig, false, false, false, make(chan interface{}))
|
||||
err = w.Setup(exchangeConfig, bufferConf, make(chan interface{}))
|
||||
if !errors.Is(err, errIssueBufferEnabledButNoLimit) {
|
||||
t.Fatalf("expected error %v but received %v", errIssueBufferEnabledButNoLimit, err)
|
||||
}
|
||||
@@ -735,7 +770,10 @@ func TestSetup(t *testing.T) {
|
||||
exchangeConfig.Orderbook.WebsocketBufferLimit = 1337
|
||||
exchangeConfig.Orderbook.WebsocketBufferEnabled = true
|
||||
exchangeConfig.Name = "test"
|
||||
err = w.Setup(exchangeConfig, true, true, true, make(chan interface{}))
|
||||
bufferConf.SortBuffer = true
|
||||
bufferConf.SortBufferByUpdateIDs = true
|
||||
bufferConf.UpdateEntriesByID = true
|
||||
err = w.Setup(exchangeConfig, bufferConf, make(chan interface{}))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -1010,7 +1048,7 @@ func TestUpdateByIDAndAction(t *testing.T) {
|
||||
func TestFlushOrderbook(t *testing.T) {
|
||||
t.Parallel()
|
||||
w := &Orderbook{}
|
||||
err := w.Setup(&config.Exchange{Name: "test"}, false, false, false, make(chan interface{}, 2))
|
||||
err := w.Setup(&config.Exchange{Name: "test"}, &Config{}, make(chan interface{}, 2))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user