diff options
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.java | 342 |
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")); + } + } +} |