Beispiel #1
0
            /// <summary>
            /// Returns the cached checksum for the file, generating it if it's not already cached.
            /// </summary>
            /// <param name="entry"></param>
            /// <param name="fileName"></param>
            /// <returns></returns>
            private string GetOrGenerateLocalFileChecksum(ChecksumFileEntry entry, string fileName)
            {
                string result = null;

                var localFileChecksumMap = _LocalFileChecksumMap;
                var watcher     = _FileSystemWatcher;
                var checksumKey = entry.FileName;
                var fileSystemWatcherMissing = watcher == null || !watcher.Enabled;

                if (fileSystemWatcherMissing || !localFileChecksumMap.TryGetValue(checksumKey, out result))
                {
                    result = ChecksumFileEntry.GenerateChecksum(fileName);

                    if (!fileSystemWatcherMissing)
                    {
                        lock (_SyncLock) {
                            var newMap = CollectionHelper.ShallowCopy(_LocalFileChecksumMap);
                            if (newMap.ContainsKey(checksumKey))
                            {
                                newMap[checksumKey] = result;
                            }
                            else
                            {
                                newMap.Add(checksumKey, result);
                            }
                            _LocalFileChecksumMap = newMap;
                        }
                    }
                }

                return(result);
            }
        public void TestInitialise()
        {
            _Snapshot = Factory.TakeSnapshot();

            _FileSystem = new MockFileSystemProvider();
            Factory.RegisterInstance <IFileSystemProvider>(_FileSystem);
            _ChecksumGenerator = new Crc64();

            _Instance = new ChecksumFileEntry();
        }
Beispiel #3
0
            /// <summary>
            /// Returns the checksum entry for the file passed across or null if no such checksum exists.
            /// </summary>
            /// <param name="requestPath"></param>
            /// <param name="requestPathIsNormalised"></param>
            /// <returns></returns>
            public ChecksumFileEntry FindChecksum(string requestPath, bool requestPathIsNormalised = false)
            {
                ChecksumFileEntry result = null;
                if(IsProtectedContent) {
                    if(!requestPathIsNormalised) requestPath = NormaliseRequestPath(requestPath);
                    RequestChecksumMap.TryGetValue(requestPath, out result);
                }

                return result;
            }
            /// <summary>
            /// Tests whether the file described by the checksum entry has been altered.
            /// </summary>
            /// <param name="entry"></param>
            /// <param name="content"></param>
            /// <returns></returns>
            public bool TestChecksum(ChecksumFileEntry entry, byte[] content)
            {
                var result = entry != null;

                if (result)
                {
                    var checksum = ChecksumFileEntry.GenerateChecksum(content);
                    result = checksum == entry.Checksum;
                }

                return(result);
            }
Beispiel #5
0
        public void ChecksumFileEntry_GenerateChecksum_Generates_Correct_Checksum_For_Known_Content()
        {
            var fileName = Path.Combine(TestContext.TestDeploymentDir, "Dummy-Whatever-DeleteMe.txt");

            File.WriteAllText(fileName, "Don't change this");
            try {
                var checksum = ChecksumFileEntry.GenerateChecksum(fileName);
                Assert.AreEqual("4A71A99D584C95CD", checksum);
            } finally {
                File.Delete(fileName);
            }
        }
Beispiel #6
0
        public void ChecksumFileEntry_GetFileSize_Returns_Correct_Length_For_File()
        {
            var fileName = Path.Combine(TestContext.TestDeploymentDir, "Dummy-Whatever-DeleteMe.txt");

            File.WriteAllText(fileName, "Don't change this");
            try {
                var length = ChecksumFileEntry.GetFileSize(fileName);
                Assert.AreEqual(17, length);
            } finally {
                File.Delete(fileName);
            }
        }
        public void ChecksumFileEntry_GetFileSize_Returns_Correct_Length_For_File()
        {
            var fileName = @"c:\web\file.txt";
            var content  = "Don't change this";
            var bytes    = Encoding.UTF8.GetBytes(content);

            _FileSystem.AddFile(fileName, bytes);

            var length = ChecksumFileEntry.GetFileSize(fileName);

            Assert.AreEqual(bytes.Length, length);
        }
        public void ChecksumFileEntry_GenerateChecksum_Generates_Correct_Checksum_For_Known_Content()
        {
            var fileName         = @"c:\web\file.txt";
            var content          = "Don't change this";
            var bytes            = Encoding.UTF8.GetBytes(content);
            var expectedChecksum = _ChecksumGenerator.ComputeChecksumString(bytes, 0, bytes.Length);

            _FileSystem.AddFile(fileName, bytes);

            var checksum = ChecksumFileEntry.GenerateChecksum(fileName);

            Assert.AreEqual(expectedChecksum, checksum);
        }
Beispiel #9
0
            /// <summary>
            /// Tests whether the file described by the checksum entry has been altered.
            /// </summary>
            /// <param name="entry"></param>
            /// <param name="fileName"></param>
            /// <returns></returns>
            public bool TestChecksum(ChecksumFileEntry entry, string fileName)
            {
                var result = entry != null;
                if(result) {
                    result = File.Exists(fileName);
                    if(result) {
                        var checksum = ChecksumFileEntry.GenerateChecksum(fileName);
                        var length = ChecksumFileEntry.GetFileSize(fileName);
                        result = checksum == entry.Checksum && length == entry.FileSize;
                    }
                }

                return result;
            }
Beispiel #10
0
        private ChecksumFileEntry CreateChecksummedFile(string webRoot, string pathFromWebRoot, byte[] content)
        {
            var fileName = Path.Combine(webRoot, pathFromWebRoot);

            _FileSystemProvider.AddOrOverwriteFile(fileName, content);

            var fullPathFromRoot = (pathFromWebRoot[0] == '\\' ? pathFromWebRoot : "\\" + pathFromWebRoot);

            var result = new ChecksumFileEntry()
            {
                FileName = fullPathFromRoot,
                FileSize = content.Length,
                Checksum = ChecksumFileEntry.GenerateChecksum(content),
            };

            return(result);
        }
Beispiel #11
0
 public void TestInitialise()
 {
     _Instance = new ChecksumFileEntry();
 }
 public void ChecksumFileEntry_GetFileSize_Throws_If_FileName_Is_Null()
 {
     ChecksumFileEntry.GetFileSize(null);
 }
Beispiel #13
0
 public void ChecksumFileEntry_GetFileSize_Throws_If_File_Is_Missing()
 {
     ChecksumFileEntry.GetFileSize("c:\\hoobawhatevertibbergibberoo");
 }
 public void ChecksumFileEntry_GenerateChecksum_Throws_If_FileName_Is_Null()
 {
     ChecksumFileEntry.GenerateChecksum((string)null);
 }
 protected virtual void OnStartProcessingEntry(ChecksumFileEntry entry)
 {
     if (this.StartProcessingEntry != null)
     {
         this.StartProcessingEntry(entry);
     }
 }
        public void ChecksumFileEntry_GetFileNameFromFullPath_Translates_Forward_Slashes_In_FileName()
        {
            var entry = ChecksumFileEntry.GetFileNameFromFullPath(@"\root", @"/root/file");

            Assert.AreEqual(@"\file", entry);
        }
        public void ChecksumFileEntry_GetFileNameFromFullPath_Returns_Correct_FileName()
        {
            var entry = ChecksumFileEntry.GetFileNameFromFullPath(@"c:\root", @"c:\root\file");

            Assert.AreEqual(@"\file", entry);
        }
 public void ChecksumFileEntry_GetFileNameFromFullPath_Throws_If_FileName_Does_Not_Start_With_RootFolder()
 {
     ChecksumFileEntry.GetFileNameFromFullPath(@"c:\root", @"c:\rootatootoot\file");
 }
 public void ChecksumFileEntry_GetFileNameFromFullPath_Throws_If_RootFolder_Is_Null()
 {
     ChecksumFileEntry.GetFileNameFromFullPath(null, @"c:\whatever");
 }