Author: markt
Date: Mon Jun  5 20:07:56 2017
New Revision: 1797692

URL: http://svn.apache.org/viewvc?rev=1797692&view=rev
Log:
Enable TesterLogValidationFilter to test log levels and throwables as well as 
messages.
Fix some test errors when running the disabled memory leak tests.

Modified:
    
tomcat/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderThreadLocalMemoryLeak.java
    tomcat/trunk/test/org/apache/tomcat/unittest/TesterLogValidationFilter.java

Modified: 
tomcat/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderThreadLocalMemoryLeak.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderThreadLocalMemoryLeak.java?rev=1797692&r1=1797691&r2=1797692&view=diff
==============================================================================
--- 
tomcat/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderThreadLocalMemoryLeak.java
 (original)
+++ 
tomcat/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderThreadLocalMemoryLeak.java
 Mon Jun  5 20:07:56 2017
@@ -18,7 +18,6 @@ package org.apache.catalina.loader;
 
 import java.io.InputStream;
 import java.util.concurrent.Executor;
-import java.util.logging.LogManager;
 
 import javax.servlet.http.HttpServletResponse;
 
@@ -74,17 +73,16 @@ public class TestWebappClassLoaderThread
         ((ThreadPoolExecutor) executor).setThreadRenewalDelay(-1);
 
         // Configure logging filter to check leak message appears
-        TesterLogValidationFilter f = new TesterLogValidationFilter(
-                "The web application [ROOT] created a ThreadLocal with key 
of");
-        LogManager.getLogManager().getLogger(
-                
"org.apache.catalina.loader.WebappClassLoaderBase").setFilter(f);
+        TesterLogValidationFilter f = TesterLogValidationFilter.add(null,
+                "The web application [ROOT] created a ThreadLocal with key 
of", null,
+                "org.apache.catalina.loader.WebappClassLoaderBase");
 
         // Need to force loading of all web application classes via the web
         // application class loader
         loadClass("TesterCounter",
-                (WebappClassLoader) ctx.getLoader().getClassLoader());
+                (WebappClassLoaderBase) ctx.getLoader().getClassLoader());
         loadClass("TesterLeakingServlet1",
-                (WebappClassLoader) ctx.getLoader().getClassLoader());
+                (WebappClassLoaderBase) ctx.getLoader().getClassLoader());
 
         // This will trigger the ThreadLocal creation
         int rc = getUrl("http://localhost:"; + getPort() + "/leak1",
@@ -130,19 +128,18 @@ public class TestWebappClassLoaderThread
         ((ThreadPoolExecutor) executor).setThreadRenewalDelay(-1);
 
         // Configure logging filter to check leak message appears
-        TesterLogValidationFilter f = new TesterLogValidationFilter(
-                "The web application [ROOT] created a ThreadLocal with key 
of");
-        LogManager.getLogManager().getLogger(
-                
"org.apache.catalina.loader.WebappClassLoaderBase").setFilter(f);
+        TesterLogValidationFilter f = TesterLogValidationFilter.add(null,
+                "The web application [ROOT] created a ThreadLocal with key 
of", null,
+                "org.apache.catalina.loader.WebappClassLoaderBase");
 
         // Need to force loading of all web application classes via the web
         // application class loader
         loadClass("TesterCounter",
-                (WebappClassLoader) ctx.getLoader().getClassLoader());
+                (WebappClassLoaderBase) ctx.getLoader().getClassLoader());
         loadClass("TesterThreadScopedHolder",
-                (WebappClassLoader) ctx.getLoader().getClassLoader());
+                (WebappClassLoaderBase) ctx.getLoader().getClassLoader());
         loadClass("TesterLeakingServlet2",
-                (WebappClassLoader) ctx.getLoader().getClassLoader());
+                (WebappClassLoaderBase) ctx.getLoader().getClassLoader());
 
         // This will trigger the ThreadLocal creation
         int rc = getUrl("http://localhost:"; + getPort() + "/leak2",
@@ -177,7 +174,7 @@ public class TestWebappClassLoaderThread
      *
      * This method assumes that all classes are in the current package.
      */
-    private void loadClass(String name, WebappClassLoader cl) throws Exception 
{
+    private void loadClass(String name, WebappClassLoaderBase cl) throws 
Exception {
         try (InputStream is = cl.getResourceAsStream(
                 "org/apache/tomcat/unittest/" + name + ".class")) {
             // We know roughly how big the class will be (~ 1K) so allow 2k as 
a

Modified: 
tomcat/trunk/test/org/apache/tomcat/unittest/TesterLogValidationFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/unittest/TesterLogValidationFilter.java?rev=1797692&r1=1797691&r2=1797692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/unittest/TesterLogValidationFilter.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/unittest/TesterLogValidationFilter.java 
Mon Jun  5 20:07:56 2017
@@ -16,18 +16,27 @@
  */
 package org.apache.tomcat.unittest;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Filter;
+import java.util.logging.Level;
+import java.util.logging.LogManager;
 import java.util.logging.LogRecord;
 
 public class TesterLogValidationFilter implements Filter {
 
-    private String targetMessage;
-    private AtomicInteger messageCount = new AtomicInteger(0);
+    private final Level targetLevel;
+    private final String targetMessage;
+    private final String targetThrowableString;
+    private final AtomicInteger messageCount = new AtomicInteger(0);
 
 
-    public TesterLogValidationFilter(String targetMessage) {
+    public TesterLogValidationFilter(Level targetLevel, String targetMessage,
+            String targetThrowableString) {
+        this.targetLevel = targetLevel;
         this.targetMessage = targetMessage;
+        this.targetThrowableString = targetThrowableString;
     }
 
 
@@ -38,11 +47,44 @@ public class TesterLogValidationFilter i
 
     @Override
     public boolean isLoggable(LogRecord record) {
-        String msg = record.getMessage();
-        if (msg != null && msg.contains(targetMessage)) {
-            messageCount.incrementAndGet();
+        if (targetLevel != null) {
+            Level level = record.getLevel();
+            if (targetLevel != level) {
+                return true;
+            }
         }
 
+        if (targetMessage != null) {
+            String msg = record.getMessage();
+            if (msg == null || !msg.contains(targetMessage)) {
+                return true;
+            }
+        }
+
+        if (targetThrowableString != null) {
+            StringWriter sw = new StringWriter();
+            PrintWriter pw = new PrintWriter(sw);
+            record.getThrown().printStackTrace(pw);
+            pw.close();
+            String throwableString = sw.toString();
+            if (!throwableString.contains(targetThrowableString)) {
+                return true;
+            }
+
+
+        }
+
+        messageCount.incrementAndGet();
+
         return true;
     }
+
+
+    public static TesterLogValidationFilter add(Level targetLevel, String 
targetMessage,
+            String targetThrowableString, String loggerName) {
+        TesterLogValidationFilter f = new 
TesterLogValidationFilter(targetLevel, targetMessage,
+                targetThrowableString);
+        LogManager.getLogManager().getLogger(loggerName).setFilter(f);
+        return f;
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to