public void CreateReplacementFileInitiallyAbsent() { using (FileStream fs = FileUtilities.CreateReplacementFile(GetFullPath("Ghost"), FileShare.Read | FileShare.Delete)) { XAssert.IsNotNull(fs); XAssert.AreEqual(0, fs.Length); fs.WriteByte(1); } }
public void CreateReplacementFileCanReplaceRunningExecutableLink() { string exeLink = GetFullPath("DummyWaiterLink"); XAssert.IsTrue(CreateHardLinkIfSupported(link: exeLink, linkTarget: DummyWaiter.GetDummyWaiterExeLocation())); using (var waiter = DummyWaiter.RunAndWait()) { using (FileStream fs = FileUtilities.CreateReplacementFile(exeLink, FileShare.Delete)) { XAssert.AreEqual(0, fs.Length); } } }
public void CreateReplacementFileReplacesFileEvenIfTruncationWasPossible() { const string Target = @"Target"; FileId originalId; using (FileStream original = File.Create(GetFullPath(Target))) { originalId = FileUtilities.ReadFileUsnByHandle(original.SafeFileHandle).Value.FileId; } using (FileStream fs = FileUtilities.CreateReplacementFile(GetFullPath(Target), FileShare.Read | FileShare.Delete)) { XAssert.IsNotNull(fs); XAssert.AreNotEqual(originalId, FileUtilities.ReadFileUsnByHandle(fs.SafeFileHandle).Value.FileId, "File was truncated rather than replaced"); XAssert.AreEqual(0, fs.Length); fs.WriteByte(1); } }
public void CreateReplacementFileCanReplaceMemoryMappedFile() { string file = GetFullPath("File"); string link = GetFullPath("link"); WithNewFileMemoryMapped( file, () => { if (!CreateHardLinkIfSupported(link: link, linkTarget: file)) { return; } using (FileStream fs = FileUtilities.CreateReplacementFile(link, FileShare.Delete)) { XAssert.AreEqual(0, fs.Length); } }); }
public void CreateReplacementFileReplacesAfterRemovingReadonlyFlagIfDenyWriteACLPresent() { const string Target = @"Target"; FileId originalId; using (FileStream original = File.Create(GetFullPath(Target))) { originalId = FileUtilities.ReadFileUsnByHandle(original.SafeFileHandle).Value.FileId; } SetReadonlyFlag(GetFullPath(Target)); AddDenyWriteACL(GetFullPath(Target)); using (FileStream fs = FileUtilities.CreateReplacementFile(GetFullPath(Target), FileShare.Read | FileShare.Delete)) { XAssert.IsNotNull(fs); XAssert.AreNotEqual(originalId, FileUtilities.ReadFileUsnByHandle(fs.SafeFileHandle).Value.FileId, "File was truncated rather than replaced"); XAssert.AreEqual(0, fs.Length); fs.WriteByte(1); } }