public void TestSerialisation() { const string folderKey = "jdosdv/vdvsd/dvsdv"; DateTime positionTime = DateTime.Now; int numberOfItems = new Random().Next(10) + 1; int verificationHash = new Random().Next(); FolderReadingPosition position = new FolderReadingPosition(folderKey: folderKey); position.Time = positionTime; position.NumberOfItemsWithTheTimestampRead = numberOfItems; position.VerificationLastReadItemHash = verificationHash; FolderReadingPosition copy = (FolderReadingPosition)position.Clone(); Assert.AreEqual(position, copy); Assert.AreEqual(folderKey, copy.FolderKey); Assert.AreEqual(positionTime, copy.Time); Assert.AreEqual(numberOfItems, copy.NumberOfItemsWithTheTimestampRead); Assert.AreEqual(verificationHash, copy.VerificationLastReadItemHash); Assert.IsTrue(copy.IsExact); using (var stream = new MemoryStream(512)) { BinaryFormatter fmt = new BinaryFormatter(); fmt.Serialize(stream, position); stream.Position = 0; copy = (FolderReadingPosition)fmt.Deserialize(stream); } Assert.AreEqual(position, copy); }
public void TestPositionHashVerification() { var folderName = "TestPositionHashVerification"; IFolder folder = CreateNewTestFolder(folderName); folder.Properties.DesiredItemsPerFile = 10; var testItems = new TestDataItem[200]; for (int n = 0; n < testItems.Length; ++n) { var item = TestDataItem.GetTestItem(n); item.DateTime = DateTime.Now.AddDays(n); testItems[n] = item; } using (var writer = folder.GetWriter()) { foreach (var item in testItems) { writer.Write(item); } } SeekStatusListener seekStatusListener = new SeekStatusListener(); using (var reader = folder.GetReader(DateTime.Now.AddHours(-1), false)) { Random random = new Random(); int skipItems = random.Next(50, 150); for (int n = 0; n < skipItems; ++n) { Assert.AreEqual(testItems[n], reader.Read().DataItem); } var position = new ReadingPosition(reader.Position); FolderReadingPosition folderPos = (FolderReadingPosition)position.FolderPositions[folder.FolderKey]; Assert.IsNotNull(folderPos); folderPos.VerificationLastReadItemHash = ~folderPos.VerificationLastReadItemHash; using (var altReader = Repository.ObjectFactory.GetReader(position, seekStatusListener.HanldeStatus)) { for (int n = skipItems; n < testItems.Length; ++n) { Assert.AreEqual(testItems[n], altReader.Read().DataItem); } } Assert.AreEqual(1, seekStatusListener.Statuses.Count); Assert.AreEqual(FolderSeekStatus.PositionStatus.DataItemHashMismatch, seekStatusListener.Statuses[0].Status); } }
public override bool Equals(object obj) { if (obj == null) { return(false); } FolderReadingPosition that = obj as FolderReadingPosition; if (obj == null) { return(false); } return(this.FolderKey == that.FolderKey && this.Time == that.Time && this.NumberOfItemsWithTheTimestampRead == that.NumberOfItemsWithTheTimestampRead && this.VerificationLastReadItemHash == that.VerificationLastReadItemHash); }