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