public void RecievesTradeMarginMessagesForMoreThanTwoAllOpenPositions() { var gate = new ManualResetEvent(false); var rpcClient = BuildRpcClient(); var accounts = rpcClient.AccountInformation.GetClientAndTradingAccount(); var openPositions = rpcClient.TradesAndOrders.ListOpenPositions(accounts.TradingAccounts[0].TradingAccountId); Assert.That(openPositions.OpenPositions.Length, Is.GreaterThanOrEqualTo(3), "This test must be run using an account that has 3 or more open positions"); Console.WriteLine(string.Format( "There are {0} open positions on markets: {1}", openPositions.OpenPositions.Length, openPositions.OpenPositions.Select(p => p.MarketId).ToList().ToStringWithValues())); var streamingClient = rpcClient.CreateStreamingClient(); var tradeMarginListener = streamingClient.BuildTradeMarginListener(); var marketsThatTradeMarginHasBeenRecievedFor = new ArrayList(); tradeMarginListener.MessageReceived += (s, e) => { Console.WriteLine( string.Format( "TradeMarginDTO recieved for market {0}", e.Data.MarketId)); if (marketsThatTradeMarginHasBeenRecievedFor.Contains(e.Data.MarketId)) return; marketsThatTradeMarginHasBeenRecievedFor.Add(e.Data.MarketId); if (openPositions.OpenPositions.Length == marketsThatTradeMarginHasBeenRecievedFor.Count) { gate.Set(); } }; try { if (!gate.WaitOne(TimeSpan.FromMinutes(1))) { Assert.Fail("TradeMarginDTO message not recieved for all open positions. OpenPositions on markets: {0} but only recieved TradeMarginDTOs for markets {1}", openPositions.OpenPositions.Select(p => p.MarketId).ToStringWithValues(), marketsThatTradeMarginHasBeenRecievedFor.ToStringWithValues()); } } finally { Console.WriteLine(string.Format( "OpenPositions on markets: {0}, Recieved TradeMarginDTOs for markets {1}", openPositions.OpenPositions.Select(p => p.MarketId).ToStringWithValues(), marketsThatTradeMarginHasBeenRecievedFor.ToStringWithValues())); streamingClient.TearDownListener(tradeMarginListener); streamingClient.Dispose(); } }