Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-server/src/test/java/org/eclipse/jetty/server/handler/HandlerTest.java')
-rw-r--r--jetty-server/src/test/java/org/eclipse/jetty/server/handler/HandlerTest.java342
1 files changed, 342 insertions, 0 deletions
diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HandlerTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HandlerTest.java
new file mode 100644
index 0000000000..c09e4037ba
--- /dev/null
+++ b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/HandlerTest.java
@@ -0,0 +1,342 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+package org.eclipse.jetty.server.handler;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.nullValue;
+import static org.junit.Assert.*;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.handler.HandlerWrapper;
+import org.hamcrest.Matchers;
+import org.junit.Test;
+
+public class HandlerTest
+{
+
+ @Test
+ public void testWrapperSetServer()
+ {
+ Server s=new Server();
+ HandlerWrapper a = new HandlerWrapper();
+ HandlerWrapper b = new HandlerWrapper();
+ HandlerWrapper c = new HandlerWrapper();
+ a.setHandler(b);
+ b.setHandler(c);
+
+ a.setServer(s);
+ assertThat(b.getServer(),equalTo(s));
+ assertThat(c.getServer(),equalTo(s));
+ }
+
+ @Test
+ public void testWrapperServerSet()
+ {
+ Server s=new Server();
+ HandlerWrapper a = new HandlerWrapper();
+ HandlerWrapper b = new HandlerWrapper();
+ HandlerWrapper c = new HandlerWrapper();
+ a.setServer(s);
+ b.setHandler(c);
+ a.setHandler(b);
+
+ assertThat(b.getServer(),equalTo(s));
+ assertThat(c.getServer(),equalTo(s));
+ }
+
+ @Test
+ public void testWrapperThisLoop()
+ {
+ HandlerWrapper a = new HandlerWrapper();
+
+ try
+ {
+ a.setHandler(a);
+ fail();
+ }
+ catch(IllegalStateException e)
+ {
+ assertThat(e.getMessage(),containsString("loop"));
+ }
+ }
+
+ @Test
+ public void testWrapperSimpleLoop()
+ {
+ HandlerWrapper a = new HandlerWrapper();
+ HandlerWrapper b = new HandlerWrapper();
+
+ a.setHandler(b);
+
+ try
+ {
+ b.setHandler(a);
+ fail();
+ }
+ catch(IllegalStateException e)
+ {
+ assertThat(e.getMessage(),containsString("loop"));
+ }
+ }
+
+ @Test
+ public void testWrapperDeepLoop()
+ {
+ HandlerWrapper a = new HandlerWrapper();
+ HandlerWrapper b = new HandlerWrapper();
+ HandlerWrapper c = new HandlerWrapper();
+
+ a.setHandler(b);
+ b.setHandler(c);
+
+ try
+ {
+ c.setHandler(a);
+ fail();
+ }
+ catch(IllegalStateException e)
+ {
+ assertThat(e.getMessage(),containsString("loop"));
+ }
+ }
+
+ @Test
+ public void testWrapperChainLoop()
+ {
+ HandlerWrapper a = new HandlerWrapper();
+ HandlerWrapper b = new HandlerWrapper();
+ HandlerWrapper c = new HandlerWrapper();
+
+ a.setHandler(b);
+ c.setHandler(a);
+
+ try
+ {
+ b.setHandler(c);
+ fail();
+ }
+ catch(IllegalStateException e)
+ {
+ assertThat(e.getMessage(),containsString("loop"));
+ }
+ }
+
+
+ @Test
+ public void testCollectionSetServer()
+ {
+ Server s=new Server();
+ HandlerCollection a = new HandlerCollection();
+ HandlerCollection b = new HandlerCollection();
+ HandlerCollection b1 = new HandlerCollection();
+ HandlerCollection b2 = new HandlerCollection();
+ HandlerCollection c = new HandlerCollection();
+ HandlerCollection c1 = new HandlerCollection();
+ HandlerCollection c2 = new HandlerCollection();
+
+ a.addHandler(b);
+ a.addHandler(c);
+ b.setHandlers(new Handler[]{b1,b2});
+ c.setHandlers(new Handler[]{c1,c2});
+ a.setServer(s);
+
+ assertThat(b.getServer(),equalTo(s));
+ assertThat(c.getServer(),equalTo(s));
+ assertThat(b1.getServer(),equalTo(s));
+ assertThat(b2.getServer(),equalTo(s));
+ assertThat(c1.getServer(),equalTo(s));
+ assertThat(c2.getServer(),equalTo(s));
+ }
+
+ @Test
+ public void testCollectionServerSet()
+ {
+ Server s=new Server();
+ HandlerCollection a = new HandlerCollection();
+ HandlerCollection b = new HandlerCollection();
+ HandlerCollection b1 = new HandlerCollection();
+ HandlerCollection b2 = new HandlerCollection();
+ HandlerCollection c = new HandlerCollection();
+ HandlerCollection c1 = new HandlerCollection();
+ HandlerCollection c2 = new HandlerCollection();
+
+ a.setServer(s);
+ a.addHandler(b);
+ a.addHandler(c);
+ b.setHandlers(new Handler[]{b1,b2});
+ c.setHandlers(new Handler[]{c1,c2});
+
+ assertThat(b.getServer(),equalTo(s));
+ assertThat(c.getServer(),equalTo(s));
+ assertThat(b1.getServer(),equalTo(s));
+ assertThat(b2.getServer(),equalTo(s));
+ assertThat(c1.getServer(),equalTo(s));
+ assertThat(c2.getServer(),equalTo(s));
+ }
+
+ @Test
+ public void testCollectionThisLoop()
+ {
+ HandlerCollection a = new HandlerCollection();
+
+ try
+ {
+ a.addHandler(a);
+ fail();
+ }
+ catch(IllegalStateException e)
+ {
+ assertThat(e.getMessage(),containsString("loop"));
+ }
+ }
+
+ @Test
+ public void testCollectionDeepLoop()
+ {
+ HandlerCollection a = new HandlerCollection();
+ HandlerCollection b = new HandlerCollection();
+ HandlerCollection b1 = new HandlerCollection();
+ HandlerCollection b2 = new HandlerCollection();
+ HandlerCollection c = new HandlerCollection();
+ HandlerCollection c1 = new HandlerCollection();
+ HandlerCollection c2 = new HandlerCollection();
+
+ a.addHandler(b);
+ a.addHandler(c);
+ b.setHandlers(new Handler[]{b1,b2});
+ c.setHandlers(new Handler[]{c1,c2});
+
+ try
+ {
+ b2.addHandler(a);
+ fail();
+ }
+ catch(IllegalStateException e)
+ {
+ assertThat(e.getMessage(),containsString("loop"));
+ }
+ }
+
+ @Test
+ public void testCollectionChainLoop()
+ {
+ HandlerCollection a = new HandlerCollection();
+ HandlerCollection b = new HandlerCollection();
+ HandlerCollection b1 = new HandlerCollection();
+ HandlerCollection b2 = new HandlerCollection();
+ HandlerCollection c = new HandlerCollection();
+ HandlerCollection c1 = new HandlerCollection();
+ HandlerCollection c2 = new HandlerCollection();
+
+ a.addHandler(c);
+ b.setHandlers(new Handler[]{b1,b2});
+ c.setHandlers(new Handler[]{c1,c2});
+ b2.addHandler(a);
+
+ try
+ {
+ a.addHandler(b);
+ fail();
+ }
+ catch(IllegalStateException e)
+ {
+ assertThat(e.getMessage(),containsString("loop"));
+ }
+ }
+
+ @Test
+ public void testInsertWrapperTail()
+ {
+ HandlerWrapper a = new HandlerWrapper();
+ HandlerWrapper b = new HandlerWrapper();
+
+ a.insertHandler(b);
+ assertThat(a.getHandler(),equalTo(b));
+ assertThat(b.getHandler(),nullValue());
+ }
+
+ @Test
+ public void testInsertWrapper()
+ {
+ HandlerWrapper a = new HandlerWrapper();
+ HandlerWrapper b = new HandlerWrapper();
+ HandlerWrapper c = new HandlerWrapper();
+
+ a.insertHandler(c);
+ a.insertHandler(b);
+ assertThat(a.getHandler(),equalTo(b));
+ assertThat(b.getHandler(),equalTo(c));
+ assertThat(c.getHandler(),nullValue());
+ }
+
+ @Test
+ public void testInsertWrapperChain()
+ {
+ HandlerWrapper a = new HandlerWrapper();
+ HandlerWrapper b = new HandlerWrapper();
+ HandlerWrapper c = new HandlerWrapper();
+ HandlerWrapper d = new HandlerWrapper();
+
+ a.insertHandler(d);
+ b.insertHandler(c);
+ a.insertHandler(b);
+ assertThat(a.getHandler(),equalTo(b));
+ assertThat(b.getHandler(),equalTo(c));
+ assertThat(c.getHandler(),equalTo(d));
+ assertThat(d.getHandler(),nullValue());
+ }
+
+ @Test
+ public void testInsertWrapperBadChain()
+ {
+ HandlerWrapper a = new HandlerWrapper();
+ HandlerWrapper b = new HandlerWrapper();
+ HandlerWrapper c = new HandlerWrapper();
+ HandlerWrapper d = new HandlerWrapper();
+
+ a.insertHandler(d);
+ b.insertHandler(c);
+ c.setHandler(new AbstractHandler()
+ {
+ @Override
+ public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ {
+ }
+ });
+
+ try
+ {
+ a.insertHandler(b);
+ fail();
+ }
+ catch(IllegalArgumentException e)
+ {
+ assertThat(e.getMessage(),containsString("bad tail"));
+ }
+ }
+}

Back to the top