private static void ProcessAllQuotes(IEnumerable <Quote> quotes, ICandleHistoryRepository repo, LoggerStub logger) { var env = new EnvironmentStub(new List <AssetPair>() { new AssetPair() { Id = "btcusd", Accuracy = 3 }, //new AssetPair() { Id = "btcrub", Accuracy = 3 } }); var controller = new CandleGenerationController(repo, logger, "test component", env); var tasks = new List <Task>(); foreach (var quote in quotes) { var task = controller.HandleQuote(quote); tasks.Add(task); } Task.WaitAll(tasks.ToArray()); // ... signal controller to process quotes controller.Tick(); int counter = 0; while (counter < 5) { Task.Delay(1000).Wait(); // Wait while produce task is finished. if (controller.QueueLength == 0) { break; } counter++; } Assert.Equal(0, controller.QueueLength); }
public void ControllerHandlesRepositoryExceptions() { const string asset1 = "btcusd"; DateTime dt = new DateTime(2017, 1, 1, 0, 0, 0, DateTimeKind.Utc); var logger = new LoggerStub(); ClearTable(asset1, new string[] { "sec", "minute", "min30", "hour", "day", "week", "month" }); var repo = new CandleHistoryRepositoryResolver((string asset, string tableName) => { return(CreateStorage <CandleTableEntity>(asset, tableName, logger, 2, clear: false)); }); // 2. Process incoming quotes // var env = new EnvironmentStub(new List <AssetPair>() { new AssetPair() { Id = asset1, Accuracy = 3 } }); var controller = new CandleGenerationController(repo, logger, "test component", env); for (int i = 0; i < 5; i++) { var tasks = new List <Task>(); // pass a quote and signal controller to process quotes var q = new Quote() { AssetPair = asset1, IsBuy = true, Price = i + 1, Timestamp = dt.AddMinutes(i) }; var task = controller.HandleQuote(q); tasks.Add(task); Task.WaitAll(tasks.ToArray()); // ... signal controller to process quotes controller.Tick(); int counter = 0; while (counter < 60) { Task.Delay(1000).Wait(); // Wait while produce task is finished. if (controller.QueueLength == 0) { break; } counter++; } } Assert.Equal(0, controller.QueueLength); controller.Stop(); // ... check for errors //Assert.Equal(0, logger.Log.Where(rec => rec.Severity != LoggerStub.Severity.Info).Count()); var logs = logger.Log.Where(rec => rec.Severity != LoggerStub.Severity.Info); // 3. Read candles with repository and check count of generated candles // IEnumerable <IFeedCandle> candles = repo.GetCandlesAsync(asset1, TimeInterval.Minute, PriceType.Bid, dt.AddDays(-1), dt.AddDays(1)).Result; Assert.Equal(5, candles.Count()); candles = repo.GetCandlesAsync(asset1, TimeInterval.Sec, PriceType.Bid, dt.AddDays(-1), dt.AddDays(1)).Result; Assert.Equal(5, candles.Count()); }