This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-io.git
The following commit(s) were added to refs/heads/master by this push: new 8cb945a77 Add FileUtilsTest.testForceDeleteUnwritableDirectory() 8cb945a77 is described below commit 8cb945a7736813b7b822400b4807545cbd3b8ed9 Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Sun Mar 24 19:05:36 2024 -0400 Add FileUtilsTest.testForceDeleteUnwritableDirectory() --- .../java/org/apache/commons/io/FileUtilsTest.java | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/test/java/org/apache/commons/io/FileUtilsTest.java b/src/test/java/org/apache/commons/io/FileUtilsTest.java index d3aa328f7..cc8ca3d17 100644 --- a/src/test/java/org/apache/commons/io/FileUtilsTest.java +++ b/src/test/java/org/apache/commons/io/FileUtilsTest.java @@ -1730,6 +1730,53 @@ public class FileUtilsTest extends AbstractTempDirTest { } } + /** + * TODO Passes on macOS, fails on Linux and Windows with AccessDeniedException. + */ + @Test + @EnabledOnOs(value = OS.MAC) + public void testForceDeleteUnwritableDirectory() throws Exception { + try (TempDirectory destDir = TempDirectory.create("dir-"); + TempFile file = TempFile.create(destDir, "test-", ".txt")) { + // sanity check structure + assertTrue(Files.isDirectory(destDir.get())); + assertEquals(destDir.get(), file.get().getParent()); + // sanity check attributes + final File dir = destDir.toFile(); + assertTrue(dir.canWrite()); + // Windows: setWritable(false) returns false. + assertTrue(dir.setWritable(false), () -> "setWritable(false) on " + dir); + assertFalse(dir.canWrite()); + assertTrue(dir.canRead()); + // sanity check that File.delete() cannot delete non-empty directories. + assertFalse(dir.delete()); + // delete underlying file. + assertFalse(file.toFile().delete()); + // reset attribute so we can delete file and auto-close/delete dir. + assertTrue(dir.setWritable(true)); + assertTrue(file.toFile().delete()); + } + try (TempDirectory destDir = TempDirectory.create("dir-"); + TempFile file = TempFile.create(destDir, "test-", ".txt")) { + // sanity check structure + assertTrue(Files.isDirectory(destDir.get())); + assertEquals(destDir.get(), file.get().getParent()); + // sanity check attributes + final File dir = destDir.toFile(); + assertTrue(dir.canWrite()); + assertTrue(dir.setWritable(false)); + assertFalse(dir.canWrite()); + assertTrue(dir.canRead()); + // sanity check that File.delete() cannot delete non-empty directories. + assertFalse(dir.delete()); + // test + // Linux: Fails with AccessDeniedException. + FileUtils.forceDelete(dir); + assertFalse(file.exists()); + assertFalse(dir.exists()); + } + } + @Test public void testForceDeleteUnwritableFile() throws Exception { try (TempFile destination = TempFile.create("test-", ".txt")) {