public void DeleteFilesCancellationDoesNotCrash() { const int FileDeletionsAllowed = 2; var testHook = new DirectoryScrubber.TestHooks { OnDeletion = new Action <string, int>((path, numDeletedSoFar) => { if (numDeletedSoFar > FileDeletionsAllowed) { m_cancellationTokenSource.Cancel(); } }) }; string rootDir = Path.Combine(TemporaryDirectory, nameof(DeleteFilesCanDeleteFile)); List <string> files = new List <string>(); for (var i = 0; i < FileDeletionsAllowed * 3; i++) { string fullFilePath = WriteFile(Path.Combine(rootDir, $"out{i}.txt")); XAssert.FileExists(fullFilePath); files.Add(fullFilePath); } XAssert.IsFalse(m_cancellationTokenSource.IsCancellationRequested); var numDeleted = Scrubber.DeleteFiles(files.ToArray(), testHook: testHook); XAssert.IsTrue(m_cancellationTokenSource.IsCancellationRequested); XAssert.Equals(FileDeletionsAllowed, numDeleted); }
public void DeleteFilesCannotDeleteFolder() { string rootDir = Path.Combine(TemporaryDirectory, nameof(DeleteFilesCannotDeleteFolder)); Directory.CreateDirectory(rootDir); XAssert.IsTrue(Directory.Exists(rootDir)); var numDeleted = Scrubber.DeleteFiles(new[] { rootDir }); XAssert.IsTrue(Directory.Exists(rootDir)); XAssert.AreEqual(0, numDeleted); }
public void DeleteFilesCanDeleteSymlinkToAbsentFile(bool declareSymlinkTargetAsFile) { string rootDir = Path.Combine(TemporaryDirectory, nameof(DeleteFilesCanDeleteSymlinkToAbsentFile)); string fullSymlinkPath = WriteSymlink(Path.Combine(rootDir, "symlink-to-absent"), "non-existent-target", isTargetFile: declareSymlinkTargetAsFile); XAssert.IsTrue(FileUtilities.FileExistsNoFollow(fullSymlinkPath)); var numDeleted = Scrubber.DeleteFiles(new[] { fullSymlinkPath }); XAssert.AreEqual(1, numDeleted); XAssert.IsFalse(File.Exists(fullSymlinkPath)); }
public void DeleteFilesCanDeleteFile() { string rootDir = Path.Combine(TemporaryDirectory, nameof(DeleteFilesCanDeleteFile)); string fullFilePath = WriteFile(Path.Combine(rootDir, "out.txt")); XAssert.IsTrue(File.Exists(fullFilePath)); var numDeleted = Scrubber.DeleteFiles(new[] { fullFilePath }); XAssert.IsFalse(File.Exists(fullFilePath)); XAssert.AreEqual(1, numDeleted); }
public void DeleteFilesWithPreExistingCancellationDoesNotCrash() { string rootDir = Path.Combine(TemporaryDirectory, nameof(DeleteFilesCanDeleteFile)); string fullFilePath = WriteFile(Path.Combine(rootDir, "out.txt")); XAssert.FileExists(fullFilePath); m_cancellationTokenSource.Cancel(); var numDeleted = Scrubber.DeleteFiles(new[] { fullFilePath }); XAssert.FileExists(fullFilePath); XAssert.AreEqual(0, numDeleted); }
public void DeleteFilesHandlesAbsentFiles() { string rootDir = Path.Combine(TemporaryDirectory, nameof(DeleteFilesHandlesAbsentFiles)); Directory.CreateDirectory(rootDir); XAssert.IsTrue(Directory.Exists(rootDir)); var absentFile = Path.Combine(rootDir, "a b s e n t"); XAssert.IsFalse(File.Exists(absentFile)); var numDeleted = Scrubber.DeleteFiles(new[] { absentFile }); XAssert.IsFalse(File.Exists(absentFile)); XAssert.AreEqual(0, numDeleted); }
public void DeleteFilesCanDeleteDirectorySymlink() { string rootDir = Path.Combine(TemporaryDirectory, nameof(DeleteFilesCanDeleteDirectorySymlink)); string fullTargetDirPath = Path.Combine(rootDir, "target-dir"); Directory.CreateDirectory(fullTargetDirPath); XAssert.IsTrue(Directory.Exists(fullTargetDirPath)); string fullSymlinkPath = WriteSymlink(Path.Combine(rootDir, "directory symlink"), fullTargetDirPath, isTargetFile: false); XAssert.IsTrue(FileUtilities.FileExistsNoFollow(fullSymlinkPath)); var numDeleted = Scrubber.DeleteFiles(new[] { fullSymlinkPath }); XAssert.AreEqual(1, numDeleted); XAssert.IsFalse(File.Exists(fullSymlinkPath)); XAssert.IsTrue(Directory.Exists(fullTargetDirPath)); }
public void DeleteFilesDeletesSymlinkButNotTarget(bool useRelativeTargetForSymlink) { string rootDir = Path.Combine(TemporaryDirectory, nameof(DeleteFilesDeletesSymlinkButNotTarget)); string fileBasename = "out.txt"; string fullFilePath = WriteFile(Path.Combine(rootDir, fileBasename)); XAssert.IsTrue(File.Exists(fullFilePath)); string fullSymlinkPath = WriteSymlink( Path.Combine(rootDir, $"sym-{fileBasename}"), useRelativeTargetForSymlink ? fileBasename : fullFilePath, isTargetFile: true); XAssert.IsTrue(FileUtilities.FileExistsNoFollow(fullSymlinkPath)); var numDeleted = Scrubber.DeleteFiles(new[] { fullSymlinkPath }); XAssert.AreEqual(1, numDeleted); XAssert.IsFalse(File.Exists(fullSymlinkPath)); XAssert.IsTrue(File.Exists(fullFilePath)); }