public void ReadEmptyFolderTest() { string targetFolderName = "ReadEmptyFolderTest"; IRepositoryFolder targetFolder = FixtureRootRepoFolder.CreateSubfolder(targetFolderName); using (IRepositoryReader target = targetFolder.GetReader(DateTime.MinValue, true)) { Assert.IsFalse(target.HasData); } }
private void CheckAllDataInFolder(IRepositoryFolder folder, IDataItem[] expectedData) { List <IDataItem> dataRead = new List <IDataItem>(expectedData.Length); using (IRepositoryReader reader = folder.GetReader(DateTime.MinValue, true)) { while (reader.HasData) { dataRead.Add(reader.Read().DataItem); } } Assert.AreEqual(expectedData.Length, dataRead.Count, "The total number of items read after writing does not match the amount written"); for (int n = 0; n < expectedData.Length; ++n) { Assert.AreEqual(expectedData[n], dataRead[n]); } }
public void QuickReaderTest() { string targetFolderName = "QuickReaderTest"; IRepositoryFolder targetFolder = FixtureRootRepoFolder.GetSubFolder(targetFolderName); if (targetFolder != null) { targetFolder.Delete(true, true); } targetFolder = FixtureRootRepoFolder.CreateSubfolder(targetFolderName); string targetFolderPath = targetFolder.FullPath; const int subfolderCount = 3; const int itemsIntervalHours = 1; const int desiredFileSize = 2000; targetFolder.Properties.DesiredItemsPerFile = desiredFileSize; IRepositoryWriter writer = targetFolder.GetWriter(); IDataRouter dataRouter = new NumberedDataRouter(subfolderCount); writer.DataRouter = dataRouter; writer.AllowSubfoldersCreation = true; DateTime firstTime = DateTime.Now.AddDays(-10); DateTime lastTime = DateTime.MinValue; int itemsCount = 100000; int n; for (n = 0; n < itemsCount; ++n) { Mock.TestDataItem item = Mock.TestDataItem.GetTestItem(n); lastTime = firstTime.AddHours(n * itemsIntervalHours); item.DateTime = lastTime; writer.Write(item); } writer.Flush(); writer.Close(); // will test lazy loading targetFolder.UnloadSubfolders(); Assert.IsTrue(targetFolder.SubFolders.Count == subfolderCount, "Router had to make writer create the configured number of subfolders"); IRepositoryFolder firstItemSubfolder = targetFolder.GetDescendant( dataRouter.GetRelativePath(Mock.TestDataItem.GetTestItem(0)), false); Assert.AreEqual(firstTime, firstItemSubfolder.FirstTimestamp , "Fisrt item timestamp reported incorrectly by Folder.FirstTimestamp"); Assert.AreEqual(firstTime, targetFolder.GetFirstItemTimestamp(true, false) , "Fisrt item timestamp reported incorrectly by Folder.GetFirstItemTimestamp"); IRepositoryReader reader = targetFolder.GetReader(firstTime, true); Assert.IsTrue(reader.HasData, "Folder just populated but no data can be read"); IDataItemRead ritem = null; n = 0; IRepositoryReader altReader = null; SeekStatusListener seekStatusListener = new SeekStatusListener(); while (reader.HasData) { if (n > 0 && n % 100 == 0) { altReader = Repository.ObjectFactory.GetReader(reader.Position, seekStatusListener.HanldeStatus); } ritem = reader.Read(); Assert.IsNotNull(ritem, "reader.Read() returned null after returning true from HasData"); Assert.AreNotSame(targetFolder, ritem.RepositoryFolder, "Router failed"); Assert.IsInstanceOf <Mock.TestDataItem>(ritem.DataItem, "Data item read from repository is of different type"); Assert.AreEqual(firstTime.AddHours(n * itemsIntervalHours), ritem.DataItem.DateTime); ((Mock.TestDataItem)ritem.DataItem).Check(n); if (altReader != null) { IDataItemRead altItem = altReader.Read(); Assert.AreEqual(ritem.DataItem.DateTime, altItem.DataItem.DateTime); Assert.AreEqual(0, seekStatusListener.Statuses.Count); } ++n; } Assert.AreEqual(lastTime, ritem.DataItem.DateTime, "Last item has unexpected timestamp"); Assert.AreEqual(itemsCount, n, "Unexpected number of data items read"); DateTime timestampToSeek = firstTime.AddHours(desiredFileSize / 3 * itemsIntervalHours); reader.Seek(timestampToSeek); Assert.IsTrue(reader.HasData, "Repeated Seek after reading all failed"); ritem = reader.Read(); Assert.IsNotNull(ritem); Assert.AreEqual(timestampToSeek, ritem.DataItem.DateTime, "First read item timestamp unexpected"); reader.Direction = bfs.Repository.Util.EnumerationDirection.Backwards; Assert.IsTrue(reader.HasData, "No data after reversing in the middle of data"); //ritem = reader.Read(); //Assert.AreEqual<DateTime>(timestampToSeek, ritem.DataItem.DateTime // , "First read item timestamp unexpected after changing direction"); n = 0; altReader = null; while (reader.HasData) { if (n > 0 && n % 100 == 0) { if (altReader != null) { altReader.Dispose(); } altReader = Repository.ObjectFactory.GetReader(reader.Position, seekStatusListener.HanldeStatus); } ritem = reader.Read(); Assert.IsNotNull(ritem, "reader.Read() returned null after returning true from HasData"); Assert.AreEqual(timestampToSeek.AddHours(-n * itemsIntervalHours), ritem.DataItem.DateTime); if (altReader != null) { IDataItemRead altItem = altReader.Read(); Assert.AreEqual(ritem.DataItem.DateTime, altItem.DataItem.DateTime); } ++n; } Assert.AreEqual(firstTime, ritem.DataItem.DateTime, "Did not pick up first item after reversing"); // reversing after reaching end reader.Direction = bfs.Repository.Util.EnumerationDirection.Forwards; ritem = reader.Read(); Assert.IsNotNull(ritem, "Did not read firts item reversing after reaching end"); Assert.AreEqual(firstTime, ritem.DataItem.DateTime, "Did not pick up first item after reversing after reaching end"); // cleanup //targetFolder.Delete(true, false); //Assert.IsFalse(Directory.Exists(targetFolderPath), "Test repo directory not removed from disk by Delete()"); }