Repository: logging-log4j2
Updated Branches:
  refs/heads/LOG4J2-649 [created] c672c93fa


Make sure that IdlePurgePolicy can handle an appender which hang on shutdown


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/c672c93f
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/c672c93f
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/c672c93f

Branch: refs/heads/LOG4J2-649
Commit: c672c93fa5422103fb2e602520de09991a377f11
Parents: 7f64fe8
Author: Mikael Ståldal <mikael.stal...@magine.com>
Authored: Tue Dec 1 17:48:36 2015 +0100
Committer: Mikael Ståldal <mikael.stal...@magine.com>
Committed: Tue Dec 1 17:48:36 2015 +0100

----------------------------------------------------------------------
 .../log4j/core/appender/HangingAppender.java    | 16 ++++++++++++--
 .../routing/RoutingAppenderWithPurgingTest.java | 23 ++++++++++++--------
 .../src/test/resources/log4j-routing-purge.xml  | 10 +++++++++
 3 files changed, 38 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c672c93f/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java
index a3ebbf0..1707388 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/HangingAppender.java
@@ -33,10 +33,12 @@ public class HangingAppender extends AbstractAppender {
     private static final long serialVersionUID = 1L;
 
     private final long delay;
+    private final long shutdownDelay;
 
-    public HangingAppender(final String name, final long delay) {
+    public HangingAppender(final String name, final long delay, final long 
shutdownDelay) {
         super(name, null, null);
         this.delay = delay;
+        this.shutdownDelay = shutdownDelay;
     }
 
     @Override
@@ -54,9 +56,19 @@ public class HangingAppender extends AbstractAppender {
             @Required(message = "No name provided for HangingAppender")
             final String name,
             @PluginAttribute("delay") final long delay,
+            @PluginAttribute("shutdownDelay") final long shutdownDelay,
             @PluginElement("Layout") final Layout<? extends Serializable> 
layout,
             @PluginElement("Filter") final Filter filter) {
-        return new HangingAppender(name, delay);
+        return new HangingAppender(name, delay, shutdownDelay);
     }
 
+    @Override
+    public void stop() {
+        super.stop();
+        try {
+            Thread.sleep(shutdownDelay);
+        } catch (InterruptedException ignore) {
+            // ignore
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c672c93f/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java
index 1c3df3d..f3b2639 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java
@@ -16,11 +16,6 @@
  */
 package org.apache.logging.log4j.core.appender.routing;
 
-import static org.junit.Assert.*;
-
-import java.io.File;
-import java.util.List;
-
 import org.apache.logging.log4j.EventLogger;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.junit.CleanFiles;
@@ -32,6 +27,11 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import java.io.File;
+import java.util.List;
+
+import static org.junit.Assert.*;
+
 /**
  * Testing Routing appender purge facilities
  */
@@ -47,6 +47,7 @@ public class RoutingAppenderWithPurgingTest {
 
     private ListAppender app;
     private RoutingAppender routingAppenderIdle;
+    private RoutingAppender routingAppenderIdleWithHangingAppender;
     private RoutingAppender routingAppenderManual;
 
     @Rule
@@ -61,6 +62,8 @@ public class RoutingAppenderWithPurgingTest {
     public void setUp() throws Exception {
         this.app = this.init.getListAppender("List");
         this.routingAppenderIdle = 
this.init.getRequiredAppender("RoutingPurgeIdle", RoutingAppender.class);
+        this.routingAppenderIdleWithHangingAppender =
+                
this.init.getRequiredAppender("RoutingPurgeIdleWithHangingAppender", 
RoutingAppender.class);
         this.routingAppenderManual = 
this.init.getRequiredAppender("RoutingPurgeManual", RoutingAppender.class);
     }
 
@@ -69,7 +72,7 @@ public class RoutingAppenderWithPurgingTest {
         this.app.clear();
     }
 
-    @Test
+    @Test(timeout = 5000)
     public void routingTest() throws InterruptedException {
         StructuredDataMessage msg = new StructuredDataMessage("1", "This is a 
test 1", "Service");
         EventLogger.logEvent(msg);
@@ -84,18 +87,20 @@ public class RoutingAppenderWithPurgingTest {
         assertFileExistance(files);
         
         assertEquals("Incorrect number of appenders with IdlePurgePolicy.", 3, 
routingAppenderIdle.getAppenders().size());
+        assertEquals("Incorrect number of appenders with IdlePurgePolicy with 
HangingAppender.",
+                3, 
routingAppenderIdleWithHangingAppender.getAppenders().size());
         assertEquals("Incorrect number of appenders manual purge.", 3, 
routingAppenderManual.getAppenders().size());
-        
+
         Thread.sleep(3000);
         EventLogger.logEvent(msg);
-        
+
         assertEquals("Incorrect number of appenders with IdlePurgePolicy.", 1, 
routingAppenderIdle.getAppenders().size());
         assertEquals("Incorrect number of appenders with manual purge.", 3, 
routingAppenderManual.getAppenders().size());
         
         routingAppenderManual.deleteAppender("1");
         routingAppenderManual.deleteAppender("2");
         routingAppenderManual.deleteAppender("3");
-        
+
         assertEquals("Incorrect number of appenders with IdlePurgePolicy.", 1, 
routingAppenderIdle.getAppenders().size());
         assertEquals("Incorrect number of appenders with manual purge.", 0, 
routingAppenderManual.getAppenders().size());
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/c672c93f/log4j-core/src/test/resources/log4j-routing-purge.xml
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/resources/log4j-routing-purge.xml 
b/log4j-core/src/test/resources/log4j-routing-purge.xml
index 995148b..0efc296 100644
--- a/log4j-core/src/test/resources/log4j-routing-purge.xml
+++ b/log4j-core/src/test/resources/log4j-routing-purge.xml
@@ -43,6 +43,15 @@
       <IdlePurgePolicy timeToLive="2" timeUnit="seconds" />
     </Routing>
     
+    <Routing name="RoutingPurgeIdleWithHangingAppender">
+      <Routes pattern="$${sd:id}">
+        <Route>
+          <Hanging name="Routing-${sd:id}" shutdownDelay="10000"/>
+        </Route>
+      </Routes>
+      <IdlePurgePolicy timeToLive="2" timeUnit="seconds" />
+    </Routing>
+
     <Routing name="RoutingPurgeManual">
       <Routes pattern="$${sd:id}">
         <Route>
@@ -59,6 +68,7 @@
   <Loggers>
     <Logger name="EventLogger" level="info" additivity="false">
       <AppenderRef ref="RoutingPurgeIdle"/>
+      <AppenderRef ref="RoutingPurgeIdleWithHangingAppender"/>
       <AppenderRef ref="RoutingPurgeManual"/>
       <AppenderRef ref="List"/>
     </Logger>

Reply via email to