public void ThrottledMarketDataStreamMultithreadingRemoveWatcherTest() { var stream = new ThrottledMarketDataStream(); List <Client> list = new List <Client>(); list.AddRange(new Client[] { new Client(), new Client(), new Client(), new Client(), new Client(), new Client(), new Client(), new Client(), null }); ThrottledMarketDataStreamMultithreadingAddWatchers(list, stream); Assert.IsTrue(stream.WatcherCount == 9); // create a bunch of threads List <Thread> threads = new List <Thread>(); list.ForEach(x => threads.Add(new Thread(() => ThreadMethodRemoveWatcher(x, stream)))); // start them threads.ForEach(x => x.Start()); // wait for them to finish threads.ForEach(x => x.Join()); // this will not print untill all threads have completed System.Diagnostics.Debug.WriteLine("All threads finished."); System.Diagnostics.Debug.WriteLine($"WatcherCount - {stream.WatcherCount}"); Assert.IsTrue(stream.WatcherCount == 0); }
public void ThrottledMarketDataStreamTasksMultithreadingAddWatcherAyncTest() { var stream = new ThrottledMarketDataStream(); List <Client> list = new List <Client>(); var tasks = new List <Task>(); for (int i = 0; i < 100; i++) { var currentClient = new Client(); list.Add(currentClient); tasks.Add(new Task(async() => await ThreadMethodAddWatcherAync(currentClient, stream))); } Parallel.ForEach(tasks, task => { task.Start(); }); Task.WhenAll(tasks).ContinueWith(done => { // this will not print untill all tasks have completed. System.Diagnostics.Debug.WriteLine("All tasks add watcher finished."); }); Thread.Sleep(100); Assert.IsTrue(stream.WatcherCount == 100); }
public void ThrottledMarketDataStreamTasksMultithreadingStartStopTest() { var stream = new ThrottledMarketDataStream(); var tasks = new List <Task>(); for (int i = 0; i < 10; i++) { if (i % 2 == 0) { tasks.Add(new Task(() => stream.Start())); } else { tasks.Add(new Task(() => stream.End())); } } Parallel.ForEach(tasks, task => { task.Start(); }); Task.WhenAll(tasks).ContinueWith(done => { // this will not print untill all tasks have completed. System.Diagnostics.Debug.WriteLine("All tasks _stream Start/End finished."); stream.End(); }); }
public void Run() { //// Arrange var stream1 = new MarketDataStream(); var stream2 = new MarketDataStream(); var aggregator = new ThrottledMarketDataStream(); stream1.AddWatcher(aggregator); stream2.AddWatcher(aggregator); var client = new Client(); aggregator.AddWatcher(client); // Act aggregator.Start(); stream1.Start(); stream2.Start(); Thread.Sleep(3000); // Assert }
public void Run() { //// Arrange var stream1 = new MarketDataStream(); var stream2 = new MarketDataStream(); var aggregator = new ThrottledMarketDataStream(); stream1.AddWatcher(aggregator); stream2.AddWatcher(aggregator); var logClient = new LogClientStrategy(); var client = new Client(logClient); aggregator.AddWatcher(client); // Act aggregator.Start(); stream1.Start(); stream2.Start(); Thread.Sleep(3000); // Assert var result = logClient.Print(); Assert.IsNotNull(result); Assert.IsFalse(string.IsNullOrWhiteSpace(result)); }
public void ThrottledMarketDataStreamMultithreadingAddWatcherTest() { var stream = new ThrottledMarketDataStream(); List <Client> list = new List <Client>(); list.AddRange(new Client[] { new Client(), new Client(), new Client(), new Client(), new Client() }); ThrottledMarketDataStreamMultithreadingAddWatchers(list, stream); // this will not print untill all threads have completed System.Diagnostics.Debug.WriteLine("All threads finished."); Assert.IsTrue(stream.WatcherCount == 5); }
public void ThrottledMarketDataStreamTasksMultithreadingOnUpdateSecondTest() { var stream = new ThrottledMarketDataStream(); var randomizer = new Random(new Random().Next(1, int.MaxValue)); var tasks = new List <Task>(); List <MarketDataUpdate> list = new List <MarketDataUpdate>(); for (int i = 0; i < 1000; i++) { var update = new MarketDataUpdate() { InstrumentId = "AAPL_" + randomizer.Next(1, 100), Fields = new Dictionary <byte, long>(), }; for (int j = 0; j < randomizer.Next(1, 5); j++) { update.Fields[(byte)randomizer.Next(1, 20)] = randomizer.Next(1, 10000); } list.Add(update); } for (int i = 0; i < list.Count - 1; i++) { tasks.Add(new Task(() => stream.OnUpdate(list[i]))); } Parallel.ForEach(tasks, task => { task.Start(); }); Task.WhenAll(tasks).ContinueWith(done => { // this will not print untill all tasks have completed. System.Diagnostics.Debug.WriteLine("All tasks OnUpdate finished."); }); }
public void Run() { //// Arrange var aggregator = new ThrottledMarketDataStream(); var streams = new List <MarketDataStream>(); var client = new Client(); for (var i = 0; i < 1000; i++) { var stream = new MarketDataStream(); stream.AddWatcher(aggregator); streams.Add(stream); } aggregator.AddWatcher(client); //// Act aggregator.Start(); foreach (var stream in streams) { stream.Start(); } Thread.Sleep(10000); foreach (var stream in streams) { stream.End(); } aggregator.End(); //// Assert }
public void ThrottledMarketDataStreamOnUpdateNullIgnore() { var stream = new ThrottledMarketDataStream(); stream.OnUpdate(null); }
public void Run() { // Arrange var expectedInput1 = new List <MarketDataUpdate> { new MarketDataUpdate { InstrumentId = "AAPL_1", Fields = new Dictionary <byte, long> { { 1, 10 }, { 4, 200 }, { 12, 187 } } }, new MarketDataUpdate { InstrumentId = "AAPL_2", Fields = new Dictionary <byte, long> { { 1, 12 }, { 4, 210 } } }, new MarketDataUpdate { InstrumentId = "AAPL_1", Fields = new Dictionary <byte, long> { { 12, 189 } } }, new MarketDataUpdate { InstrumentId = "AAPL_1", Fields = new Dictionary <byte, long> { { 2, 24 } } }, new MarketDataUpdate { InstrumentId = "AAPL_2", Fields = new Dictionary <byte, long> { { 5, 120 } } } }; string expected1 = "[1: 10, 4: 200, 12: 189, 2: 24]"; string expected2 = "[1: 12, 4: 210, 5: 120]"; var stream1 = new MarketDataStream(new ListDataStreamStrategy(expectedInput1)); var aggregator = new ThrottledMarketDataStream(300); stream1.AddWatcher(aggregator); var logClient = new LogClientStrategy(); var client = new Client(logClient); aggregator.AddWatcher(client); // Act aggregator.Start(); stream1.Start(); Thread.Sleep(2000); // Assert var result = logClient.Print(); Assert.IsNotNull(result); Assert.IsFalse(string.IsNullOrWhiteSpace(result)); Assert.IsTrue(result.Contains(expected1), $"Wrong result \n\tExpected to contain: \t{expected1}\n\tActual: \t{result}\n"); Assert.IsTrue(result.Contains(expected2), $"Wrong result \n\tExpected to contain: \t{expected2}\n\tActual: \t{result}\n"); }