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;
     }
 }

Reply via email to