/// <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(); }
/// <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); }
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); } }
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); }
/// <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; }
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); }
public void TestInitialise() { _Instance = new ChecksumFileEntry(); }
public void ChecksumFileEntry_GetFileSize_Throws_If_FileName_Is_Null() { ChecksumFileEntry.GetFileSize(null); }
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"); }