public void CreateSubscriptionTypesTest() { //create default endpoint DXEndpoint.Create(); //try to create subscription with invalid event types parameters //all attempts to create subscription in this block must be failed with exception Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateSubscription <IDxOrder>(typeof(IDxCandle), typeof(IDxQuote)); }); Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateSubscription <IDxIndexedEvent>(typeof(IDxCandle), typeof(IDxQuote)); }); Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateSubscription <IDxLastingEvent>(typeof(IDxOrder), typeof(IDxQuote)); }); Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateSubscription <IDxMarketEvent>(typeof(IDxCandle)); }); Assert.Catch(typeof(ArgumentException), () => { DXFeed.GetInstance().CreateSubscription <IDxMarketEvent>(typeof(string)); }); var symbol = "SYMA"; var s = DXFeed.GetInstance().CreateSubscription <IDxEventType>(typeof(IDxOrder), typeof(IDxTrade)); s.AddSymbols(symbol); TestListener eventListener = new TestListener(); s.AddEventListener(eventListener); EventPlayer <IDxEventType> eventPlayer = new EventPlayer <IDxEventType>(s as DXFeedSubscription <IDxEventType>); var playedOrder = new PlayedOrder(symbol, 0, 0x4e54560000000006, 0, 0, 0, 0, 100, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"); eventPlayer.PlayEvents(symbol, playedOrder); var playedTrade = new PlayedTrade(symbol, 0, 0, 0, 'B', 123.456, 100, 123, 1.1, 0, 2.2, 0.0, Direction.Undefined, false, Scope.Regional); eventPlayer.PlayEvents(symbol, playedTrade); Assert.AreEqual(eventListener.GetEventCount <IDxOrder>(symbol), 1); Assert.AreEqual(eventListener.GetEventCount <IDxTrade>(symbol), 1); //thread-safety case DXEndpoint.Create(); Parallel.For(ParallelFrom, ParallelTo, i => { Assert.DoesNotThrow(() => { DXFeed.GetInstance().CreateSubscription <IDxEventType>(typeof(IDxOrder), typeof(IDxTrade)); }); }); }
void OnTimerTick(Object sender, EventArgs args) { if (OrderCursor < LastCursor) { PlayedOrder.Add(CurrentBuildOrder.Orders.ElementAt(OrderCursor)); OrderPlayer.PlayOrder(CurrentBuildOrder.Orders.ElementAt(OrderCursor).Content); OrderCursor++; RunOrder(); } }
public void CreateSubscriptionTest() { var symbol = "SYMA"; var s = DXEndpoint.Create().Feed.CreateSubscription <IDxOrder>(); s.AddSymbols(symbol); TestListener eventListener = new TestListener(); s.AddEventListener(eventListener); var playedOrder = new PlayedOrder(symbol, 0, 0x4e54560000000006, 0, 0, 0, 0, 100, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"); EventPlayer <IDxOrder> eventPlayer = new EventPlayer <IDxOrder>(s as DXFeedSubscription <IDxOrder>); eventPlayer.PlayEvents(symbol, playedOrder); Assert.AreEqual(eventListener.GetEventCount <IDxOrder>(symbol), 1); IDxOrder receivedOrder = eventListener.GetLastEvent <IDxOrder>().Event; Assert.AreEqual(symbol, receivedOrder.EventSymbol); CompareOrders(playedOrder, receivedOrder); //try to create subscription on closed endpoint DXEndpoint.GetInstance().Close(); Assert.Catch(typeof(InvalidOperationException), () => { DXFeed.GetInstance().CreateSubscription <IDxOrder>(); }); //thread-safety case DXEndpoint.Create(); Parallel.For(ParallelFrom, ParallelTo, i => { Assert.DoesNotThrow(() => { DXFeed.GetInstance().CreateSubscription <IDxOrder>(); }); }); }
public void GetIndexedEventsPromiseTest() { //create default endpoint DXEndpoint.Create(); var symbol = "SYMA"; //try to create promise with invalid parameters Assert.Catch(typeof(ArgumentException), () => { try { DXFeed.GetInstance().GetIndexedEventsPromise <IDxOrder>(null, OrderSource.NTV, CancellationToken.None).Wait(); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { throw inner; } } }); Assert.Catch(typeof(ArgumentException), () => { try { DXFeed.GetInstance().GetIndexedEventsPromise <IDxOrder>(symbol, null, CancellationToken.None).Wait(); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { throw inner; } } }); //try to cancel promise CancellationTokenSource cancelSource = new CancellationTokenSource(); Task <List <IDxOrder> > promise = DXFeed.GetInstance().GetIndexedEventsPromise <IDxOrder>(symbol, OrderSource.NTV, cancelSource.Token); cancelSource.CancelAfter(TimeSpan.FromSeconds(2)); try { Task.WaitAll(promise); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try wait promise with timeout cancelSource = new CancellationTokenSource(TimeSpan.FromSeconds(2)); promise = DXFeed.GetInstance().GetIndexedEventsPromise <IDxOrder>(symbol, OrderSource.NTV, cancelSource.Token); try { Task.WaitAll(promise); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try close endpoint while promise waiting Task closeEndpointTask = Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(2)); DXEndpoint.GetInstance().Close(); }); promise = DXFeed.GetInstance().GetIndexedEventsPromise <IDxOrder>(symbol, OrderSource.NTV, CancellationToken.None); try { Task.WaitAll(promise, closeEndpointTask); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try to get promise on closed endpoint promise = DXFeed.GetInstance().GetIndexedEventsPromise <IDxOrder>(symbol, OrderSource.NTV, CancellationToken.None); try { Task.WaitAll(promise); } catch (AggregateException ae) { foreach (var inner in ae.InnerExceptions) { if (!(inner is OperationCanceledException)) { Assert.Fail("Unexpected exception: " + inner); } } } //try to get last event succesfully DateTime date = DateTime.Now; var playedOrders = new PlayedOrder[] { new PlayedOrder(symbol, 0, 0x4e54560000000006, Tools.DateToUnixTime(date), 0, 0, 100, 100, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(symbol, 0, 0x4e54560000000005, Tools.DateToUnixTime(date.AddMinutes(-1)), 0, 0, 100.5, 101, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(symbol, 0, 0x4e54560000000004, Tools.DateToUnixTime(date.AddMinutes(-2)), 0, 0, 101, 102, 25, Scope.Order, Side.Sell, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(symbol, 0, 0x4e54560000000003, Tools.DateToUnixTime(date.AddMinutes(-3)), 0, 0, 100, 103, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(symbol, 0, 0x4e54560000000002, Tools.DateToUnixTime(date.AddMinutes(-4)), 0, 0, 100.4, 104, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(symbol, 0, 0x4e54560000000001, Tools.DateToUnixTime(date.AddMinutes(-5)), 0, 0, 100.3, 105, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(symbol, 0, 0x4e54560000000000, Tools.DateToUnixTime(date.AddMinutes(-6)), 0, 0, 100.2, 106, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA") }; Task eventPlayerTask = Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(1)); EventPlayer <IDxOrder> eventPlayer = new EventPlayer <IDxOrder>(GetSubscriptionFromFeed <IDxOrder>(symbol)); eventPlayer.PlaySnapshot(symbol, playedOrders); }); cancelSource = new CancellationTokenSource(TimeSpan.FromSeconds(10)); promise = DXEndpoint.Create().Feed.GetIndexedEventsPromise <IDxOrder>(symbol, OrderSource.NTV, cancelSource.Token); Assert.DoesNotThrow(() => { Task.WaitAll(promise, eventPlayerTask); }); var receivedOrders = promise.Result; receivedOrders.Reverse(); Assert.AreEqual(playedOrders.Length, receivedOrders.Count); for (int i = 0; i < playedOrders.Length; i++) { Assert.AreEqual(symbol, receivedOrders[i].EventSymbol); CompareOrders(playedOrders[i], receivedOrders[i]); } //thread-safety case DXEndpoint.Create(); List <Task> tasks = new List <Task>(); for (int i = 0; i < 10; i++) { var threadSymbol = symbol + i.ToString(); var threadPlayedOrders = new PlayedOrder[] { new PlayedOrder(threadSymbol, 0, 0x4e54560000000006, Tools.DateToUnixTime(date), 0, 0, 100, 100, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(threadSymbol, 0, 0x4e54560000000005, Tools.DateToUnixTime(date.AddMinutes(-1)), 0, 0, 100.5, 101, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(threadSymbol, 0, 0x4e54560000000004, Tools.DateToUnixTime(date.AddMinutes(-2)), 0, 0, 101, 102, 25, Scope.Order, Side.Sell, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(threadSymbol, 0, 0x4e54560000000003, Tools.DateToUnixTime(date.AddMinutes(-3)), 0, 0, 100, 103, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(threadSymbol, 0, 0x4e54560000000002, Tools.DateToUnixTime(date.AddMinutes(-4)), 0, 0, 100.4, 104, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(threadSymbol, 0, 0x4e54560000000001, Tools.DateToUnixTime(date.AddMinutes(-5)), 0, 0, 100.3, 105, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA"), new PlayedOrder(threadSymbol, 0, 0x4e54560000000000, Tools.DateToUnixTime(date.AddMinutes(-6)), 0, 0, 100.2, 106, 25, Scope.Order, Side.Buy, 'A', OrderSource.NTV, "AAAA") }; tasks.Add(Task.Run(() => { Thread.Sleep(TimeSpan.FromSeconds(2)); var eventPlayer = new EventPlayer <IDxOrder>(GetSubscriptionFromFeed <IDxOrder>(threadSymbol)); eventPlayer.PlaySnapshot(threadSymbol, threadPlayedOrders); })); var threadPromise = DXEndpoint.GetInstance().Feed .GetIndexedEventsPromise <IDxOrder>(threadSymbol, OrderSource.NTV, new CancellationTokenSource(TimeSpan.FromSeconds(20)).Token) .ContinueWith((resultPromise) => { foreach (var o in resultPromise.Result) { Assert.AreEqual(threadSymbol, o.EventSymbol); } }); tasks.Add(threadPromise); } ; Assert.DoesNotThrow(() => { Task.WaitAll(tasks.ToArray()); }); }