public void ReplayOrderBook_IfScenario2IsExecuted_VerifyTheWholeSystemState() { _applicationContext = ContextRegistry.GetContext(); Scenario2(); MarketController marketController = (MarketController)_applicationContext["MarketController"]; IHttpActionResult marketDataHttpResult = marketController.GetOrderBook("XBTUSD"); OkNegotiatedContentResult <object> okResponseMessage = (OkNegotiatedContentResult <object>)marketDataHttpResult; OrderBookRepresentation representation = okResponseMessage.Content as OrderBookRepresentation; Tuple <OrderRepresentationList, OrderRepresentationList> orderBooks = new Tuple <OrderRepresentationList, OrderRepresentationList>(representation.Bids, representation.Asks); marketDataHttpResult = marketController.GetDepth("XBTUSD"); OkNegotiatedContentResult <object> okResponseMessageDepth = (OkNegotiatedContentResult <object>)marketDataHttpResult; DepthTupleRepresentation beforeReplayDepth = okResponseMessageDepth.Content as DepthTupleRepresentation; IOrderRepository orderRepository = (IOrderRepository)_applicationContext["OrderRepository"]; List <OrderReadModel> before = orderRepository.GetAllOrderOfTrader("5555"); before = before.Concat(orderRepository.GetAllOrderOfTrader("4444")).ToList(); ITradeRepository tradeRepository = (ITradeRepository)_applicationContext["TradeRepository"]; IList <TradeReadModel> beforeReplayTrades = tradeRepository.GetAll(); IList <object> beforeReplayEvents = outputEventStore.GetAllEvents(); marketDataHttpResult = marketController.GetBbo("XBTUSD"); OkNegotiatedContentResult <BBORepresentation> okResponseMessageBboBefore = (OkNegotiatedContentResult <BBORepresentation>)marketDataHttpResult; //down the exchange, make new exchange and reply CrashAndInitializeAgainWithSnapshot(); marketController = (MarketController)_applicationContext["MarketController"]; marketDataHttpResult = marketController.GetOrderBook("XBTUSD"); okResponseMessage = (OkNegotiatedContentResult <object>)marketDataHttpResult; representation = okResponseMessage.Content as OrderBookRepresentation; Tuple <OrderRepresentationList, OrderRepresentationList> orderBook1 = new Tuple <OrderRepresentationList, OrderRepresentationList>(representation.Bids, representation.Asks); //verify orderbook state VerifyOrderBookStateAfterReplay(orderBooks, orderBook1); List <OrderReadModel> after = orderRepository.GetAllOrderOfTrader("5555"); after = after.Concat(orderRepository.GetAllOrderOfTrader("4444")).ToList(); //verify order table in database VerifyDatabaseStateAfterReplay(before, after); IList <TradeReadModel> afterReplayTrades = tradeRepository.GetAll(); //verify trades table in database VerifyDatabaseStateAfterReplay(beforeReplayTrades, afterReplayTrades); IList <object> afterReplayEvents = outputEventStore.GetAllEvents(); //verify event store state VerifyEventStoreStateAfterReplay(beforeReplayEvents, afterReplayEvents); marketDataHttpResult = marketController.GetDepth("XBTUSD"); okResponseMessageDepth = (OkNegotiatedContentResult <object>)marketDataHttpResult; DepthTupleRepresentation afterReplayDepth = okResponseMessageDepth.Content as DepthTupleRepresentation; VerifyDepthBeforeAndAfterReplay(beforeReplayDepth, afterReplayDepth); marketDataHttpResult = marketController.GetBbo("XBTUSD"); OkNegotiatedContentResult <BBORepresentation> okResponseMessageBboAfter = (OkNegotiatedContentResult <BBORepresentation>)marketDataHttpResult; VerifyBboAfterReplay(okResponseMessageBboBefore.Content, okResponseMessageBboAfter.Content); }