Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java')
-rw-r--r--jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java124
1 files changed, 118 insertions, 6 deletions
diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java
index 729e88e30d..3bc61e67f0 100644
--- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java
+++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletContextHandlerTest.java
@@ -18,15 +18,12 @@
package org.eclipse.jetty.servlet;
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -52,6 +49,8 @@ import org.eclipse.jetty.server.handler.HandlerWrapper;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.handler.gzip.GzipHandler;
import org.eclipse.jetty.server.session.SessionHandler;
+import org.eclipse.jetty.util.DecoratedObjectFactory;
+import org.eclipse.jetty.util.Decorator;
import org.hamcrest.Matchers;
import org.junit.After;
import org.junit.Assert;
@@ -361,6 +360,59 @@ public class ServletContextHandlerTest
Assert.assertThat(response, Matchers.containsString("404 Fell Through"));
}
+
+ /**
+ * Test behavior of legacy {@link ServletContextHandler.Decorator}, with
+ * new DecoratedObjectFactory class
+ */
+ @SuppressWarnings("deprecation")
+ @Test
+ public void testLegacyDecorator() throws Exception
+ {
+ ServletContextHandler context = new ServletContextHandler();
+ context.addDecorator(new DummyLegacyDecorator());
+ _server.setHandler(context);
+
+ context.addServlet(DecoratedObjectFactoryServlet.class, "/objfactory/*");
+ _server.start();
+
+ String response= _connector.getResponses("GET /objfactory/ HTTP/1.0\r\n\r\n");
+ assertThat("Response status code", response, containsString("200 OK"));
+
+ String expected = String.format("Attribute[%s] = %s", DecoratedObjectFactory.ATTR, DecoratedObjectFactory.class.getName());
+ assertThat("Has context attribute", response, containsString(expected));
+
+ assertThat("Decorators size", response, containsString("Decorators.size = [1]"));
+
+ expected = String.format("decorator[] = %s", DummyLegacyDecorator.class.getName());
+ assertThat("Specific Legacy Decorator", response, containsString(expected));
+ }
+
+ /**
+ * Test behavior of new {@link org.eclipse.jetty.util.Decorator}, with
+ * new DecoratedObjectFactory class
+ */
+ @Test
+ public void testUtilDecorator() throws Exception
+ {
+ ServletContextHandler context = new ServletContextHandler();
+ context.getObjectFactory().addDecorator(new DummyUtilDecorator());
+ _server.setHandler(context);
+
+ context.addServlet(DecoratedObjectFactoryServlet.class, "/objfactory/*");
+ _server.start();
+
+ String response= _connector.getResponses("GET /objfactory/ HTTP/1.0\r\n\r\n");
+ assertThat("Response status code", response, containsString("200 OK"));
+
+ String expected = String.format("Attribute[%s] = %s", DecoratedObjectFactory.ATTR, DecoratedObjectFactory.class.getName());
+ assertThat("Has context attribute", response, containsString(expected));
+
+ assertThat("Decorators size", response, containsString("Decorators.size = [1]"));
+
+ expected = String.format("decorator[] = %s", DummyUtilDecorator.class.getName());
+ assertThat("Specific Legacy Decorator", response, containsString(expected));
+ }
private int assertResponseContains(String expected, String response)
{
@@ -391,6 +443,66 @@ public class ServletContextHandlerTest
writer.write("Hello World");
}
}
+
+ public static class DummyUtilDecorator implements org.eclipse.jetty.util.Decorator
+ {
+ @Override
+ public <T> T decorate(T o)
+ {
+ return o;
+ }
+
+ @Override
+ public void destroy(Object o)
+ {
+ }
+ }
+
+ public static class DummyLegacyDecorator implements org.eclipse.jetty.servlet.ServletContextHandler.Decorator
+ {
+ @Override
+ public <T> T decorate(T o)
+ {
+ return o;
+ }
+
+ @Override
+ public void destroy(Object o)
+ {
+ }
+ }
+
+ public static class DecoratedObjectFactoryServlet extends HttpServlet
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
+ {
+ resp.setContentType("text/plain");
+ resp.setStatus(HttpServletResponse.SC_OK);
+ PrintWriter out = resp.getWriter();
+
+ Object obj = req.getServletContext().getAttribute(DecoratedObjectFactory.ATTR);
+ out.printf("Attribute[%s] = %s%n",DecoratedObjectFactory.ATTR,obj.getClass().getName());
+
+ if (obj instanceof DecoratedObjectFactory)
+ {
+ out.printf("Object is a DecoratedObjectFactory%n");
+ DecoratedObjectFactory objFactory = (DecoratedObjectFactory)obj;
+ List<Decorator> decorators = objFactory.getDecorators();
+ out.printf("Decorators.size = [%d]%n",decorators.size());
+ for (Decorator decorator : decorators)
+ {
+ out.printf(" decorator[] = %s%n",decorator.getClass().getName());
+ }
+ }
+ else
+ {
+ out.printf("Object is NOT a DecoratedObjectFactory%n");
+ }
+ }
+ }
public static class TestServlet extends HttpServlet
{

Back to the top