public async Task StreamFromFile_ShouldBeFast() { var pair = "XBTUSD"; var communicator = new RawFileCommunicator(); communicator.FileNames = _rawFiles; var client = new BitmexWebsocketClient(communicator); var source = new BitmexOrderBookSource(client); source.LoadSnapshotEnabled = false; source.BufferEnabled = false; var orderBook = new CryptoOrderBookL2(pair, source); orderBook.SnapshotReloadEnabled = false; orderBook.ValidityCheckEnabled = false; var snapshotCount = 0; var diffCount = 0; source.OrderBookSnapshotStream.Subscribe(x => snapshotCount++); source.OrderBookStream.Subscribe(x => diffCount++); var sw = Stopwatch.StartNew(); await communicator.Start(); sw.Stop(); var elapsedMs = sw.ElapsedMilliseconds; var msg = $"Processed snapshots: {snapshotCount}, diffs: {diffCount}, elapsed time was: {elapsedMs} ms"; _output.WriteLine(msg); Assert.True(elapsedMs < 7000, msg); }
public async Task StreamingFromFile_ShouldHandleCorrectly() { var pair = "XBTUSD"; var communicator = new RawFileCommunicator(); communicator.FileNames = _rawFiles; var client = new BitmexWebsocketClient(communicator); var source = new BitmexOrderBookSource(client); source.LoadSnapshotEnabled = false; source.BufferEnabled = false; var orderBook = new CryptoOrderBook(pair, source); orderBook.SnapshotReloadEnabled = false; orderBook.ValidityCheckEnabled = false; var receivedUpdate = 0; IOrderBookChangeInfo lastReceivedUpdate = null; var receivedTopLevel = 0; IOrderBookChangeInfo lastReceivedTopLevel = null; var receivedBidAskUpdate = 0; IOrderBookChangeInfo lastReceivedBidAskUpdate = null; orderBook.OrderBookUpdatedStream.Subscribe(x => { receivedUpdate++; lastReceivedUpdate = x; }); orderBook.TopLevelUpdatedStream.Subscribe(x => { receivedTopLevel++; lastReceivedTopLevel = x; }); orderBook.BidAskUpdatedStream.Subscribe(x => { receivedBidAskUpdate++; lastReceivedBidAskUpdate = x; }); await communicator.Start(); Assert.Equal(3284, orderBook.BidLevels.Length); Assert.Equal(4035, orderBook.AskLevels.Length); Assert.Equal(6249, orderBook.BidPrice); Assert.Equal(163556, orderBook.BidLevels.First().Amount); Assert.Equal(6249.5, orderBook.AskPrice); Assert.Equal(270526, orderBook.AskLevels.First().Amount); Assert.Equal(322703, receivedUpdate); Assert.Equal(6249, lastReceivedUpdate?.Quotes?.Bid); Assert.Equal(6249.5, lastReceivedUpdate?.Quotes?.Ask); Assert.Equal("8799374800", lastReceivedUpdate.Sources[0].Levels[0].Id); Assert.Equal(6252, lastReceivedUpdate.Sources[0].Levels[0].Price); Assert.Equal(79020, receivedTopLevel); Assert.Equal(6249, lastReceivedTopLevel?.Quotes?.Bid); Assert.Equal(6249.5, lastReceivedTopLevel?.Quotes?.Ask); Assert.Equal("8799375100", lastReceivedTopLevel.Sources[0].Levels[0].Id); Assert.Equal(6249, lastReceivedTopLevel.Sources[0].Levels[0].Price); Assert.Equal(584, receivedBidAskUpdate); Assert.Equal(6249, lastReceivedBidAskUpdate?.Quotes?.Bid); Assert.Equal(6249.5, lastReceivedBidAskUpdate?.Quotes?.Ask); Assert.Equal("8799375050", lastReceivedBidAskUpdate.Sources[0].Levels[0].Id); Assert.Equal(6249.5, lastReceivedBidAskUpdate.Sources[0].Levels[0].Price); var levels = orderBook.Levels; foreach (var level in levels) { Assert.Equal(CryptoPairsHelper.Clean(pair), level.Pair); } }