public void TestLoadQuotesFromServer() { GapMap.Instance.Clear(); // найти в истории гэпы var gaps = FileGapActualizator.VerifyTickerHistory(Ticker, timeHistStart, quoteFolder, null, timeNow); Assert.NotNull(gaps, "VerifyHistory: gaps is not null"); Assert.Greater(gaps.Count, 0, "VerifyHistory: gaps is not empty"); // подкачать котировки FileGapActualizator.FillGapsByTicker(Ticker, timeHistStart, gaps, quoteFolder, null, (s, list) => {}); // сравнить количество свечек "на клиенте" и "на сервере" var clientCandles = AtomCandleStorage.Instance.GetAllMinuteCandles(Ticker); Assert.Greater(clientCandles.Count, 0, "VerifyHistory: client candles are loaded"); var serverCandlesPacked = QuoteStorage.Instance.proxy.GetMinuteCandlesPacked(Ticker, timeHistStart, DateTime.Now); var serverCandles = serverCandlesPacked.GetCandles(); var lastServerTime = serverCandles[serverCandles.Count - 1].timeOpen; var lastClientTime = clientCandles[clientCandles.Count - 1].timeOpen; Assert.AreEqual(lastServerTime, lastClientTime, "VerifyHistory: last candle is loaded"); // убедиться в том, что дырок больше нет var gapsNew = FileGapActualizator.VerifyTickerHistory(Ticker, timeHistStart, quoteFolder, null, timeNow); var gapsNewThatIsNotOnServer = gapsNew.Count(g => !serverGaps.Any(sg => sg.AreEqual(g.start, g.end))); Assert.AreEqual(0, gapsNewThatIsNotOnServer, "VerifyHistory: no gaps left"); // нет повторяющихся свечей var hasDouble = false; for (var i = 1; i < clientCandles.Count; i++) { if (clientCandles[i].timeOpen <= clientCandles[i - 1].timeOpen) { hasDouble = true; break; } } Assert.AreEqual(false, hasDouble, "VerifyHistory: no doubled candles"); // повторно подкачать гэпы - убедиться, что новых обращений к серверу не было, // ибо вся необходимая история серверных гэпов сохранена FileGapActualizator.FillGapsByTicker(Ticker, timeHistStart, gapsNew, quoteFolder, null, (s, list) => { Assert.Fail("VerifyHistory: no redundant calls to server"); }); //moq.Verify(lw => lw.GetMinuteCandlesPacked(It.IsAny<string>(), // It.IsAny<DateTime>(), It.IsAny<DateTime>()), // Times.Exactly(gaps.Count), "VerifyHistory: no redundant calls to server"); }
private void DoLoadQuotesFromTradeSharp(BackgroundWorkerTask taskParam) { var folder = (string)taskParam.DataParam; var totalCount = Directory.GetFiles(folder, "*.quote").Count(); var count = 0; workerQuote.ReportProgress(0); foreach (var fileName in Directory.GetFiles(folder, "*.quote")) { var lastDate = GetFileLastDate(fileName); if (!lastDate.HasValue) { continue; } var existFileName = fileName + ".temp"; File.Move(fileName, existFileName); var ticker = Path.GetFileNameWithoutExtension(fileName).ToUpper(); FileGapActualizator.FillGapsByTicker(ticker, lastDate.Value, new List <GapInfo> { new GapInfo { start = lastDate.Value.AddMinutes(1), end = DateTime.Now, status = GapInfo.GapStatus.Gap } }, folder, workerQuote, (s, list) => { }); QuoteDownloader.Merge2Files(existFileName, fileName); workerQuote.ReportProgress(100 * (count++) / totalCount); } }