Repository: logging-log4j2 Updated Branches: refs/heads/master 6f6d95d3f -> e4ddcd9a8
Refactor JUnit cleaning rules to allow a logger to be plugged in for debugging tests that use these rules. Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e4ddcd9a Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e4ddcd9a Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e4ddcd9a Branch: refs/heads/master Commit: e4ddcd9a898c22ce4992b2cf59ae029bc35e01d3 Parents: 6f6d95d Author: Gary Gregory <[email protected]> Authored: Thu Jul 27 17:53:18 2017 -0700 Committer: Gary Gregory <[email protected]> Committed: Thu Jul 27 17:53:18 2017 -0700 ---------------------------------------------------------------------- .../junit/AbstractExternalFileCleaner.java | 22 ++++++- .../apache/logging/log4j/junit/CleanFiles.java | 10 +-- .../logging/log4j/junit/CleanFolders.java | 68 ++++++++++++++------ 3 files changed, 72 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e4ddcd9a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java index ce7eafd..b5f5476 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/AbstractExternalFileCleaner.java @@ -27,41 +27,50 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; import org.junit.Assert; import org.junit.rules.ExternalResource; public abstract class AbstractExternalFileCleaner extends ExternalResource { + protected static final Marker CLEANER_MARKER = MarkerManager.getMarker("CLEANER"); + private static final int SLEEP_RETRY_MILLIS = 200; private final boolean cleanAfter; private final boolean cleanBefore; private final Set<Path> files; private final int maxTries; + private final Logger logger; - public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries, + public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries, Logger logger, final File... files) { this.cleanBefore = before; this.cleanAfter = after; this.maxTries = maxTries; this.files = new HashSet<>(files.length); + this.logger = logger; for (final File file : files) { this.files.add(file.toPath()); } } - public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries, + public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries, Logger logger, final Path... files) { this.cleanBefore = before; this.cleanAfter = after; this.maxTries = maxTries; + this.logger = logger; this.files = new HashSet<>(Arrays.asList(files)); } - public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries, + public AbstractExternalFileCleaner(final boolean before, final boolean after, final int maxTries, Logger logger, final String... fileNames) { this.cleanBefore = before; this.cleanAfter = after; this.maxTries = maxTries; + this.logger = logger; this.files = new HashSet<>(fileNames.length); for (final String fileName : fileNames) { this.files.add(Paths.get(fileName)); @@ -96,6 +105,9 @@ public abstract class AbstractExternalFileCleaner extends ExternalResource { break; } } catch (final IOException e) { + if (logger != null) { + logger.error("Caught exception cleaning {}", this, e); + } // We will try again. failures.put(path, e); } @@ -134,6 +146,10 @@ public abstract class AbstractExternalFileCleaner extends ExternalResource { return cleanBefore; } + public Logger getLogger() { + return logger; + } + public int getMaxTries() { return maxTries; } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e4ddcd9a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java index a73be99..de95bfb 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFiles.java @@ -37,23 +37,23 @@ public class CleanFiles extends AbstractExternalFileCleaner { private static final int MAX_TRIES = 10; public CleanFiles(final boolean before, final boolean after, final int maxTries, final File... files) { - super(before, after, maxTries, files); + super(before, after, maxTries, null, files); } public CleanFiles(final boolean before, final boolean after, final int maxTries, final String... fileNames) { - super(before, after, maxTries, fileNames); + super(before, after, maxTries, null, fileNames); } public CleanFiles(final File... files) { - super(true, true, MAX_TRIES, files); + super(true, true, MAX_TRIES, null, files); } public CleanFiles(final Path... paths) { - super(true, true, MAX_TRIES, paths); + super(true, true, MAX_TRIES, null, paths); } public CleanFiles(final String... fileNames) { - super(true, true, MAX_TRIES, fileNames); + super(true, true, MAX_TRIES, null, fileNames); } @Override http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e4ddcd9a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java index 09704ec..6d16ae6 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/junit/CleanFolders.java @@ -24,53 +24,81 @@ import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import org.apache.logging.log4j.Logger; + /** * A JUnit test rule to automatically delete folders recursively before (optional) and after (optional) a test is run. */ public class CleanFolders extends AbstractExternalFileCleaner { + + public static final class DeleteAllFileVisitor extends SimpleFileVisitor<Path> { + + private final Logger logger; + + public DeleteAllFileVisitor(final Logger logger) { + this.logger = logger; + } + + @Override + public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) throws IOException { + if (logger != null) { + logger.debug(CLEANER_MARKER, "Deleting directory {}", dir); + } + final boolean deleted = Files.deleteIfExists(dir); + if (logger != null) { + logger.debug(CLEANER_MARKER, "Deleted directory {}: {}", dir, deleted); + } + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException { + if (logger != null) { + logger.debug(CLEANER_MARKER, "Deleting file {} with {}", file, attrs); + } + final boolean deleted = Files.deleteIfExists(file); + if (logger != null) { + logger.debug(CLEANER_MARKER, "Deleted file {}: {}", file, deleted); + } + return FileVisitResult.CONTINUE; + } + } + private static final int MAX_TRIES = 10; public CleanFolders(final boolean before, final boolean after, final int maxTries, final File... files) { - super(before, after, maxTries, files); + super(before, after, maxTries, null, files); } public CleanFolders(final boolean before, final boolean after, final int maxTries, final String... fileNames) { - super(before, after, maxTries, fileNames); + super(before, after, maxTries, null, fileNames); } public CleanFolders(final File... folders) { - super(true, true, MAX_TRIES, folders); + super(true, true, MAX_TRIES, null, folders); + } + + public CleanFolders(final Logger logger, final File... folders) { + super(true, true, MAX_TRIES, logger, folders); } public CleanFolders(final Path... paths) { - super(true, true, MAX_TRIES, paths); + super(true, true, MAX_TRIES, null, paths); } public CleanFolders(final String... folderNames) { - super(true, true, MAX_TRIES, folderNames); + super(true, true, MAX_TRIES, null, folderNames); } - private void cleanFolder(final Path folder) throws IOException { + private void cleanFolder(final Path folder, final int tryIndex) throws IOException { if (Files.exists(folder) && Files.isDirectory(folder)) { - Files.walkFileTree(folder, new SimpleFileVisitor<Path>() { - @Override - public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) throws IOException { - Files.deleteIfExists(dir); - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException { - Files.deleteIfExists(file); - return FileVisitResult.CONTINUE; - } - }); + Files.walkFileTree(folder, new DeleteAllFileVisitor(getLogger())); } } @Override protected boolean clean(final Path path, final int tryIndex) throws IOException { - cleanFolder(path); + cleanFolder(path, tryIndex); return true; } }
