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: [email protected]
For additional commands, e-mail: [email protected]