/// <summary> /// Get next data file in the same repo folder. /// </summary> /// <param name="backwards"> /// The direction in which to look for data file relative to this file: to the past or to the future /// </param> /// <returns> /// Next data file or <see langword="null"/> if none exists. /// </returns> public IRepositoryFile GetNext(bool backwards) { IRepositoryFile retval = null; IRepositoryFileName fileInSameFolder = ContainingFolder.GetNextDataFile(this.Name, backwards); if (null != fileInSameFolder) { retval = new RepositoryFile(containingFolder: ContainingFolder, fileName: fileInSameFolder); } else { // scanning sibling leaf folders until first data file is found for ( IDataFolder nextFolder = ContainingFolder.GetNextSiblingInTree(backwards); nextFolder != null && retval == null; nextFolder = nextFolder.GetNextSiblingInTree(backwards)) { retval = nextFolder.FindFirstDataFile(backwards); } } return(retval); }
public void MyClassInitialize() { lock (GetType()) { if (_emptyDataFolder == null) { const int itemsCount = 100000; _daysPerFile = ((double)_dataItemsPerFile) * _itemsIntervalMinutes / 60.0 / 24.0; // 200 * 20 minutes = 8000 minutes per file (5.55556 days) DateTime firstTime = DateTime.Now.AddDays(-10); _firstDataItemTime = firstTime; //_expectedFileCount = (int)Math.Ceiling((double)itemsCount / (double)_dataItemsPerFile); IFolder targetFolder = (IFolder)FixtureRootRepoFolder; string targetFolderPath = targetFolder.FullPath; targetFolder.Properties.DesiredItemsPerFile = _dataItemsPerFile; using (IRepositoryWriter writer = targetFolder.GetWriter()) { DateTime lastTime = DateTime.MinValue; int n; for (n = 0; n < itemsCount; ++n) { Mock.TestDataItem item = Mock.TestDataItem.GetTestItem(n); lastTime = firstTime.AddMinutes(n * _itemsIntervalMinutes); item.DateTime = lastTime; writer.Write(item); } _lastDataItemTime = lastTime; writer.Flush(); writer.Close(); } for ( var dataFile = targetFolder.RootDataFolder.FindFirstDataFile(false); dataFile != null; dataFile = dataFile.GetNext(false), ++_expectedFileCount ) { } Console.WriteLine("Expected file count enumerated via RepositoryFile: {0}", _expectedFileCount); // data folder boundaries may split data files thus extra ones Assert.GreaterOrEqual(_expectedFileCount, (int)Math.Ceiling((double)itemsCount / (double)_dataItemsPerFile), "Data file count unexpected"); // creating empty folder IRepositoryFile file = targetFolder.RootDataFolder.Seek(firstTime.AddMinutes(itemsCount * _itemsIntervalMinutes / 3), false); _emptyDataFolder = file.ContainingFolder; for ( file = _emptyDataFolder.FindFirstDataFile(false); file != null && file.ContainingFolder == _emptyDataFolder; file = file.GetNext(false)) { file.Delete(); --_expectedFileCount; } Assert.AreEqual(0, _emptyDataFolder.DataFileBrowser.FileCount); Console.WriteLine("Expected file count after removing file by file: {0}", _expectedFileCount); // IDataFolder dfolderToDelete = _emptyDataFolder.ParentDataFolder.GetNextSiblingInTree(false).GetNextSiblingInTree(false); Assert.AreEqual(1, dfolderToDelete.Level); _deletedDataFolder = new RepoFileContainerDescriptor() { Start = dfolderToDelete.Start, End = dfolderToDelete.End, Level = dfolderToDelete.Level, RelativePath = dfolderToDelete.RelativePath }; _expectedFileCount -= dfolderToDelete.GetSubfolders(DateTime.MinValue, false).Sum((f) => f.DataFileBrowser.FileCount); Console.WriteLine("Expected file count after removing data folder {0}: {1}", dfolderToDelete.PathInRepository, _expectedFileCount); Console.WriteLine("Removing folder {0}", dfolderToDelete.PathInRepository); dfolderToDelete.Delete(false); Assert.IsFalse(dfolderToDelete.Exists); } } //lock }