You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by rm...@apache.org on 2015/04/01 19:00:56 UTC
svn commit: r1670729 - in
/commons/proper/jcs/trunk/commons-jcs-jcache-extras: pom.xml
src/main/java/org/apache/commons/jcs/jcache/extras/web/InMemoryResponse.java
src/test/java/org/apache/commons/jcs/jcache/extras/web/JCacheFilterTest.java
Author: rmannibucau
Date: Wed Apr 1 17:00:55 2015
New Revision: 1670729
URL: http://svn.apache.org/r1670729
Log:
JCS-140 dont really flush http response when flushing our internal buffer + testing with tomcat to avoid surprises
Modified:
commons/proper/jcs/trunk/commons-jcs-jcache-extras/pom.xml
commons/proper/jcs/trunk/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs/jcache/extras/web/InMemoryResponse.java
commons/proper/jcs/trunk/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs/jcache/extras/web/JCacheFilterTest.java
Modified: commons/proper/jcs/trunk/commons-jcs-jcache-extras/pom.xml
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache-extras/pom.xml?rev=1670729&r1=1670728&r2=1670729&view=diff
==============================================================================
--- commons/proper/jcs/trunk/commons-jcs-jcache-extras/pom.xml (original)
+++ commons/proper/jcs/trunk/commons-jcs-jcache-extras/pom.xml Wed Apr 1 17:00:55 2015
@@ -71,5 +71,23 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-catalina</artifactId>
+ <version>8.0.18</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-jasper</artifactId>
+ <version>8.0.18</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.4</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified: commons/proper/jcs/trunk/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs/jcache/extras/web/InMemoryResponse.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs/jcache/extras/web/InMemoryResponse.java?rev=1670729&r1=1670728&r2=1670729&view=diff
==============================================================================
--- commons/proper/jcs/trunk/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs/jcache/extras/web/InMemoryResponse.java (original)
+++ commons/proper/jcs/trunk/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs/jcache/extras/web/InMemoryResponse.java Wed Apr 1 17:00:55 2015
@@ -18,10 +18,6 @@
*/
package org.apache.commons.jcs.jcache.extras.web;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
@@ -34,6 +30,10 @@ import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.CopyOnWriteArraySet;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
public class InMemoryResponse extends HttpServletResponseWrapper implements Serializable
{
@@ -257,7 +257,6 @@ public class InMemoryResponse extends Ht
{
buffer.flush();
}
- super.flushBuffer();
}
public int getContentLength()
Modified: commons/proper/jcs/trunk/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs/jcache/extras/web/JCacheFilterTest.java
URL: http://svn.apache.org/viewvc/commons/proper/jcs/trunk/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs/jcache/extras/web/JCacheFilterTest.java?rev=1670729&r1=1670728&r2=1670729&view=diff
==============================================================================
--- commons/proper/jcs/trunk/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs/jcache/extras/web/JCacheFilterTest.java (original)
+++ commons/proper/jcs/trunk/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs/jcache/extras/web/JCacheFilterTest.java Wed Apr 1 17:00:55 2015
@@ -18,173 +18,129 @@
*/
package org.apache.commons.jcs.jcache.extras.web;
-import org.junit.After;
-import org.junit.Before;
+import org.apache.catalina.Context;
+import org.apache.catalina.LifecycleException;
+import org.apache.catalina.LifecycleState;
+import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.commons.io.IOUtils;
+import org.apache.tomcat.util.descriptor.web.FilterDef;
+import org.apache.tomcat.util.descriptor.web.FilterMap;
+import org.junit.BeforeClass;
import org.junit.Test;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContext;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.concurrent.atomic.AtomicInteger;
import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.assertEquals;
public class JCacheFilterTest
{
- private final ThreadLocal<ByteArrayOutputStream> outputStreamAsBytes = new ThreadLocal<ByteArrayOutputStream>() {
- @Override
- protected ByteArrayOutputStream initialValue()
- {
- return new ByteArrayOutputStream();
- }
- };
- private final ThreadLocal<ServletOutputStream> outputStream = new ThreadLocal<ServletOutputStream>() {
- @Override
- protected ServletOutputStream initialValue()
- {
- return new ServletOutputStream()
- {
- @Override
- public void write(final int b) throws IOException
- {
- outputStreamAsBytes.get().write(b);
- }
- };
- }
-
- @Override
- public void remove()
- {
- super.remove();
- outputStreamAsBytes.remove();
- }
- };
+ private static File docBase;
- @Before
- @After
- public void cleanup() {
- outputStream.remove();
+ @BeforeClass
+ public static void createEmptyDir() {
+ docBase = new File("target/missing/");
+ docBase.mkdirs();
+ docBase.deleteOnExit();
}
@Test
- public void testFilterNoOutput() throws ServletException, IOException
+ public void testFilterNoOutput() throws Exception
{
- final Filter filter = initFilter();
- final AtomicInteger counter = new AtomicInteger(0);
- final FilterChain chain = new FilterChain()
- {
- @Override
- public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException
- {
- counter.incrementAndGet();
- response.getWriter().write("");
- }
- };
- filter.doFilter(new HttpServletRequestWrapper(newProxy(HttpServletRequest.class)), new HttpServletResponseWrapper(newProxy(HttpServletResponse.class)), chain);
- assertEquals(1, counter.get());
- assertEquals("", new String(outputStreamAsBytes.get().toByteArray()));
- outputStream.remove();
- filter.doFilter(new HttpServletRequestWrapper(newProxy(HttpServletRequest.class)), new HttpServletResponseWrapper(newProxy(HttpServletResponse.class)), chain);
- assertEquals(1, counter.get());
- assertEquals("", new String(outputStreamAsBytes.get().toByteArray()));
- filter.destroy();
+ Empty.COUNTER.set(0);
+ final Tomcat tomcat = new Tomcat();
+ tomcat.setHostname("localhost");
+ tomcat.setPort(0);
+ try {
+ tomcat.getEngine();
+ tomcat.start();
+ final Context ctx = tomcat.addWebapp("/sample", docBase.getAbsolutePath());
+ Tomcat.addServlet(ctx, "empty", Empty.class.getName());
+ ctx.addServletMapping("/", "empty");
+ addJcsFilter(ctx);
+ StandardContext.class.cast(ctx).filterStart();
+
+ final URL url = new URL("http://localhost:" + tomcat.getConnector().getLocalPort() + "/sample/");
+
+ assertEquals("", IOUtils.toString(url.openStream()));
+ assertEquals(1, Empty.COUNTER.get());
+
+ assertEquals("", IOUtils.toString(url.openStream()));
+ assertEquals(1, Empty.COUNTER.get());
+ } finally {
+ stop(tomcat);
+ }
}
@Test
- public void testFilter() throws ServletException, IOException
+ public void testFilter() throws Exception
{
- final Filter filter = initFilter();
- final AtomicInteger counter = new AtomicInteger(0);
- final FilterChain chain = new FilterChain()
- {
- @Override
- public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException
- {
- counter.incrementAndGet();
- response.getWriter().write("Hello!");
- }
- };
- filter.doFilter(new HttpServletRequestWrapper(newProxy(HttpServletRequest.class)), new HttpServletResponseWrapper(newProxy(HttpServletResponse.class)), chain);
- assertEquals(1, counter.get());
- assertEquals("Hello!", new String(outputStreamAsBytes.get().toByteArray()));
- outputStream.remove();
- filter.doFilter(new HttpServletRequestWrapper(newProxy(HttpServletRequest.class)), new HttpServletResponseWrapper(newProxy(HttpServletResponse.class)), chain);
- assertEquals(1, counter.get());
- assertEquals("Hello!", new String(outputStreamAsBytes.get().toByteArray()));
- filter.destroy();
+ Hello.COUNTER.set(0);
+ final Tomcat tomcat = new Tomcat();
+ tomcat.setPort(0);
+ try {
+ tomcat.getEngine();
+ tomcat.start();
+ final Context ctx = tomcat.addContext("/sample", docBase.getAbsolutePath());
+ Tomcat.addServlet(ctx, "hello", Hello.class.getName());
+ ctx.addServletMapping("/", "hello");
+ addJcsFilter(ctx);
+ StandardContext.class.cast(ctx).filterStart();
+
+ final URL url = new URL("http://localhost:" + tomcat.getConnector().getLocalPort() + "/sample/");
+ assertEquals("hello", IOUtils.toString(url.openStream()));
+ assertEquals(1, Hello.COUNTER.get());
+
+ assertEquals("hello", IOUtils.toString(url.openStream()));
+ assertEquals(1, Hello.COUNTER.get());
+ } finally {
+ stop(tomcat);
+ }
}
- private JCacheFilter initFilter() throws ServletException
- {
- final JCacheFilter filter = new JCacheFilter();
- filter.init(new FilterConfig()
- {
- @Override
- public String getFilterName()
- {
- return null;
- }
-
- @Override
- public ServletContext getServletContext()
- {
- return newProxy(ServletContext.class);
- }
-
- @Override
- public String getInitParameter(String name)
- {
- return null;
- }
-
- @Override
- public Enumeration<String> getInitParameterNames()
- {
- return Collections.<String>enumeration(Collections.<String>emptySet()); // emptyEnumeration() is Java 1.7+
- }
- });
- return filter;
+ private void stop(final Tomcat tomcat) throws LifecycleException {
+ if (LifecycleState.STARTED.equals(tomcat.getServer().getState())) {
+ tomcat.stop();
+ tomcat.destroy();
+ }
}
- private <T> T newProxy(final Class<T> clazz)
- {
- return clazz.cast(Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class<?>[]{clazz}, new InvocationHandler()
- {
- @Override
- public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable
- {
- if (method.getReturnType().getName().equals("boolean"))
- {
- return false;
- }
- if ("getCharacterEncoding".equals(method.getName()))
- {
- return "UTF-8";
- }
- if ("getOutputStream".equals(method.getName()))
- {
- return outputStream.get();
- }
- return null;
- }
- }
- )
- );
+ private void addJcsFilter(final Context ctx) {
+ final FilterDef filterDef = new FilterDef();
+ filterDef.setFilterName("jcs");
+ filterDef.setFilterClass(JCacheFilter.class.getName());
+ ctx.addFilterDef(filterDef);
+
+ final FilterMap filterMap = new FilterMap();
+ filterMap.setFilterName(filterDef.getFilterName());
+ filterMap.addURLPattern("/*");
+ ctx.addFilterMap(filterMap);
+ }
+
+ public static class Hello extends HttpServlet {
+ public static final AtomicInteger COUNTER = new AtomicInteger();
+
+ @Override
+ protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
+ resp.getWriter().write("hello");
+ COUNTER.incrementAndGet();
+ }
+ }
+
+ public static class Empty extends HttpServlet {
+ public static final AtomicInteger COUNTER = new AtomicInteger();
+
+ @Override
+ protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
+ resp.getWriter().write("");
+ COUNTER.incrementAndGet();
+ }
}
}