예제 #1
0
        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);
        }
예제 #2
0
        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);
        }