示例#1
0
        public void DeltaHashProviderConstructor_Should_Apply_Capacity()
        {
            const int deltaCount = 9;

            BuildDeltasAndSetCacheExpectations(deltaCount);

            const int cacheCapacity     = 3;
            var       deltaHashProvider = new DeltaHashProvider(_deltaCache, Substitute.For <IDeltaIndexService>(), _logger, cacheCapacity);

            Enumerable.Range(1, deltaCount - 1).ToList().ForEach(i =>
            {
                var updated = deltaHashProvider.TryUpdateLatestHash(GetHash(i - 1), GetHash(i));
                updated.Should().BeTrue();
            });

            deltaHashProvider.GetLatestDeltaHash().Should().Be(GetHash(deltaCount - 1));

            var evictedCount    = deltaCount - cacheCapacity;
            var nonEvictedRange = Enumerable.Range(evictedCount, deltaCount - evictedCount);

            nonEvictedRange.ToList().ForEach(i =>
            {
                deltaHashProvider.GetLatestDeltaHash(GetDateTimeForIndex(i))
                .Should().Be(GetHash(i));
            });

            var evictedRange = Enumerable.Range(0, evictedCount);

            evictedRange.ToList().ForEach(i =>
            {
                deltaHashProvider.GetLatestDeltaHash(GetDateTimeForIndex(i))
                .Should().Be(default);
示例#2
0
        public void TryUpdateLatestHash_Should_Update_If_Hashes_Are_Valid()
        {
            const int deltaCount = 2;

            BuildDeltasAndSetCacheExpectations(deltaCount);

            var hashProvider = new DeltaHashProvider(_deltaCache, Substitute.For <IDeltaIndexService>(), _logger, 3);
            var updated      = hashProvider.TryUpdateLatestHash(GetHash(0), GetHash(1));

            updated.Should().BeTrue();

            hashProvider.GetLatestDeltaHash()
            .Should().Be(GetHash(1));
        }
示例#3
0
        public void TryUpdateLatestHash_Should_Push_New_Hash_On_Stream_When_Updating_Latest()
        {
            const int deltaCount = 2;

            BuildDeltasAndSetCacheExpectations(deltaCount);
            var observer = Substitute.For <IObserver <Cid> >();

            var hashProvider = new DeltaHashProvider(_deltaCache, Substitute.For <IDeltaIndexService>(), _logger, 3);

            using (hashProvider.DeltaHashUpdates.Subscribe(observer))
            {
                hashProvider.TryUpdateLatestHash(GetHash(0), GetHash(1));

                observer.Received(1).OnNext(Arg.Is(GetHash(1)));
            }
        }
        public void CheckDeltaHash()
        {
            DeltaHashProvider hash = new DeltaHashProvider(DeltaRunnerFactory.CreateDeltaRunner(null, null));

            hash.AddDeltaHash("1", "hash001");
            hash.AddDeltaHash("2", "hash002");
            hash.AddDeltaHash("3", "hash003");
            hash.AddDeltaHash("4", "hash004");
            hash.AddDeltaHash("5", "hash005");

            Assert.AreEqual(true, hash.CheckDeltaHash("1", "hash001"));
            Assert.AreEqual(true, hash.CheckDeltaHash("2", "hash002"));
            Assert.AreEqual(true, hash.CheckDeltaHash("3", "hash003"));
            Assert.AreEqual(true, hash.CheckDeltaHash("4", "hash004"));
            Assert.AreEqual(true, hash.CheckDeltaHash("5", "hash005"));
        }
示例#5
0
        public void TryUpdateLatestHash_Should_Put_New_Hash_At_The_Top_Of_The_List()
        {
            const int deltaCount = 3;

            BuildDeltasAndSetCacheExpectations(deltaCount);

            var hashProvider = new DeltaHashProvider(_deltaCache, Substitute.For <IDeltaIndexService>(), _logger, 4);
            var updated      = hashProvider.TryUpdateLatestHash(GetHash(0), GetHash(1));

            updated.Should().BeTrue();
            updated = hashProvider.TryUpdateLatestHash(GetHash(1), GetHash(2));
            updated.Should().BeTrue();

            hashProvider.GetLatestDeltaHash()
            .Should().Be(GetHash(2));
        }
        public void EnsureHashDoesntIncludeBadChars()
        {
            DeltaHashProvider hashProvider = new DeltaHashProvider(DeltaRunnerFactory.CreateDeltaRunner(null, null));

            FileInfo[] files = new FileInfo[100];

            for (int i = 0; i < files.Length; i++)
            {
                FileInfo tempFile = new FileInfo(Path.Combine(Path.GetTempPath(), string.Format("00{0}.sql", i)));
                using(StreamWriter sw = new StreamWriter(tempFile.OpenWrite()))
                {
                    sw.WriteLine("test test {0}", i);
                    sw.Close();

                    string hash = DeltaHashProvider.GetMD5Hash(tempFile);

                    string fileContents = hashProvider.GetFileContext(tempFile);
                    Assert.AreEqual(-1, hash.IndexOf('\r'), string.Format("Contents: {0}", fileContents));
                    Assert.AreEqual(-1, hash.IndexOf('|'), string.Format("Contents: {0}", fileContents));
                }
            }
        }
        public void GetMD5Hash_CheckForMOdifications()
        {
            FileInfo tempFile001 = new FileInfo(Path.Combine(Path.GetTempPath(), "001.sql"));
            StreamWriter sw = new StreamWriter(tempFile001.OpenWrite());
            sw.WriteLine("test test 111");
            sw.Close();

            FileInfo tempFile002 = new FileInfo(Path.Combine(Path.GetTempPath(), "002.sql"));
            StreamWriter sw2 = new StreamWriter(tempFile002.OpenWrite());
            sw2.WriteLine("test test 222");
            sw2.Close();

            DeltaHashProvider hashProvider = new DeltaHashProvider(DeltaRunnerFactory.CreateDeltaRunner(null, null));
            hashProvider.AddDeltaHash(tempFile001.Name, DeltaHashProvider.GetMD5Hash(tempFile001));
            hashProvider.AddDeltaHash(tempFile002.Name, DeltaHashProvider.GetMD5Hash(tempFile002));

            Assert.AreEqual(null, hashProvider.CheckForModifications(new FileInfo[]{tempFile001, tempFile002}));
        }
        public void GetMD5Hash_CheckForMOdifications_WithModificationsToSecondFile()
        {
            FileInfo tempFile001 = new FileInfo(Path.Combine(Path.GetTempPath(), "001.sql"));
            using(StreamWriter sw = new StreamWriter(tempFile001.OpenWrite()))
            {
                sw.WriteLine("test test 111");
                sw.Close();
            }

            FileInfo tempFile002 = new FileInfo(Path.Combine(Path.GetTempPath(), "002.sql"));
            using(StreamWriter sw2 = new StreamWriter(tempFile002.OpenWrite()))
            {
                sw2.WriteLine("test test 222");
                sw2.Close();
            }

            DeltaHashProvider hashProvider = new DeltaHashProvider(DeltaRunnerFactory.CreateDeltaRunner(null, null));
            hashProvider.AddDeltaHash(tempFile001.Name, DeltaHashProvider.GetMD5Hash(tempFile001));
            hashProvider.AddDeltaHash(tempFile002.Name, DeltaHashProvider.GetMD5Hash(tempFile002));

            using(StreamWriter sw3 = new StreamWriter(tempFile002.Open(FileMode.OpenOrCreate, FileAccess.Write)))
            {
                sw3.WriteLine("test test changes to 222");
                sw3.Close();
            }

            Assert.AreEqual(tempFile002, hashProvider.CheckForModifications(new FileInfo[]{tempFile001, tempFile002}));
        }
        public void GetMD5Hash_CheckForMOdifications_WithModificationsToRandomFile()
        {
            DeltaHashProvider hashProvider = new DeltaHashProvider(DeltaRunnerFactory.CreateDeltaRunner(null, null));

            FileInfo[] files = new FileInfo[100];

            Console.Out.WriteLine("Creating [{0}] Temp Deltas", files.Length);

            for (int i = 0; i < files.Length; i++)
            {
                FileInfo tempFile = new FileInfo(Path.Combine(Path.GetTempPath(), string.Format("00{0}.sql", i)));
                using(StreamWriter sw = new StreamWriter(tempFile.OpenWrite()))
                {
                    sw.WriteLine("test test {0}", i);
                    sw.Close();
                    hashProvider.AddDeltaHash(tempFile.Name, DeltaHashProvider.GetMD5Hash(tempFile));
                    files[i] = tempFile;
                }
            }

            Random r = new Random(DateTime.Now.Millisecond);
            int randomFileIndex = r.Next(1,files.Length-1);
            FileInfo randomTempFile = files[randomFileIndex];

            Console.Out.WriteLine("Random Temp File = {0} : {1}", randomFileIndex, randomTempFile.FullName);

            using(StreamWriter sw2 = new StreamWriter(randomTempFile.Open(FileMode.OpenOrCreate, FileAccess.Write)))
            {
                Console.Out.WriteLine("Modifying Delta");
                sw2.WriteLine("changes to this delta!!");
                sw2.Close();
            }

            Assert.AreEqual(randomTempFile, hashProvider.CheckForModifications(files));
        }
        public void GetMD5Hash_CheckForModifications_TimeTracker()
        {
            FileInfo[] files = new FileInfo[3];

            DeltaHashProvider hashProvider = new DeltaHashProvider(DeltaRunnerFactory.CreateDeltaRunner(null, null));

            int i = 0;
            foreach (FileInfo file in new DirectoryInfo("../../TestFiles/FullTest3_TimeTracker/").GetFiles())
            {
                files[i++] = file;
                string hashCode = DeltaHashProvider.GetMD5Hash(file);
                Console.Out.WriteLine("hashCode = {0}", hashCode);
                hashProvider.AddDeltaHash(file.Name, hashCode);
            }

            Assert.AreEqual(null, hashProvider.CheckForModifications(files));
        }