blob: d6e1090cd358b98ecfcb3a7a6e569622ac8124db [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2017 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.rewrite.handler;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.junit.Before;
import org.junit.Test;
public class RewriteHandlerTest extends AbstractRuleTestCase
{
private RewriteHandler _handler;
private RewritePatternRule _rule1;
private RewritePatternRule _rule2;
private RewritePatternRule _rule3;
private RewriteRegexRule _rule4;
@Before
public void init() throws Exception
{
_handler=new RewriteHandler();
_handler.setServer(_server);
_handler.setHandler(new AbstractHandler()
{
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
response.setStatus(201);
request.setAttribute("target",target);
request.setAttribute("URI",request.getRequestURI());
request.setAttribute("info",request.getPathInfo());
}
});
_handler.start();
_rule1 = new RewritePatternRule();
_rule1.setPattern("/aaa/*");
_rule1.setReplacement("/bbb");
_rule2 = new RewritePatternRule();
_rule2.setPattern("/bbb/*");
_rule2.setReplacement("/ccc");
_rule3 = new RewritePatternRule();
_rule3.setPattern("/ccc/*");
_rule3.setReplacement("/ddd");
_rule4 = new RewriteRegexRule();
_rule4.setRegex("/xxx/(.*)");
_rule4.setReplacement("/$1/zzz");
_handler.setRules(new Rule[]{_rule1,_rule2,_rule3,_rule4});
start(false);
}
@Test
public void test() throws Exception
{
_response.setStatus(200);
_request.setHandled(false);
_handler.setOriginalPathAttribute("/before");
_handler.setRewriteRequestURI(true);
_handler.setRewritePathInfo(true);
_request.setRequestURI("/xxx/bar");
_request.setPathInfo("/xxx/bar");
_handler.handle("/xxx/bar",_request,_request, _response);
assertEquals(201,_response.getStatus());
assertEquals("/bar/zzz",_request.getAttribute("target"));
assertEquals("/bar/zzz",_request.getAttribute("URI"));
assertEquals("/bar/zzz",_request.getAttribute("info"));
assertEquals(null,_request.getAttribute("before"));
_response.setStatus(200);
_request.setHandled(false);
_handler.setOriginalPathAttribute("/before");
_handler.setRewriteRequestURI(false);
_handler.setRewritePathInfo(false);
_request.setRequestURI("/foo/bar");
_request.setPathInfo("/foo/bar");
_handler.handle("/foo/bar",_request,_request, _response);
assertEquals(201,_response.getStatus());
assertEquals("/foo/bar",_request.getAttribute("target"));
assertEquals("/foo/bar",_request.getAttribute("URI"));
assertEquals("/foo/bar",_request.getAttribute("info"));
assertEquals(null,_request.getAttribute("before"));
_response.setStatus(200);
_request.setHandled(false);
_handler.setOriginalPathAttribute(null);
_request.setRequestURI("/aaa/bar");
_request.setPathInfo("/aaa/bar");
_handler.handle("/aaa/bar",_request,_request, _response);
assertEquals(201,_response.getStatus());
assertEquals("/ddd/bar",_request.getAttribute("target"));
assertEquals("/aaa/bar",_request.getAttribute("URI"));
assertEquals("/aaa/bar",_request.getAttribute("info"));
assertEquals(null,_request.getAttribute("before"));
_response.setStatus(200);
_request.setHandled(false);
_handler.setOriginalPathAttribute("before");
_handler.setRewriteRequestURI(true);
_handler.setRewritePathInfo(true);
_request.setRequestURI("/aaa/bar");
_request.setPathInfo("/aaa/bar");
_handler.handle("/aaa/bar",_request,_request, _response);
assertEquals(201,_response.getStatus());
assertEquals("/ddd/bar",_request.getAttribute("target"));
assertEquals("/ddd/bar",_request.getAttribute("URI"));
assertEquals("/ddd/bar",_request.getAttribute("info"));
assertEquals("/aaa/bar",_request.getAttribute("before"));
_response.setStatus(200);
_request.setHandled(false);
_rule2.setTerminating(true);
_request.setRequestURI("/aaa/bar");
_request.setPathInfo("/aaa/bar");
_handler.handle("/aaa/bar",_request,_request, _response);
assertEquals(201,_response.getStatus());
assertEquals("/ccc/bar",_request.getAttribute("target"));
assertEquals("/ccc/bar",_request.getAttribute("URI"));
assertEquals("/ccc/bar",_request.getAttribute("info"));
assertEquals("/aaa/bar",_request.getAttribute("before"));
_response.setStatus(200);
_request.setHandled(false);
_rule2.setHandling(true);
_request.setAttribute("before",null);
_request.setAttribute("target",null);
_request.setAttribute("URI",null);
_request.setAttribute("info",null);
_request.setRequestURI("/aaa/bar");
_request.setPathInfo("/aaa/bar");
_handler.handle("/aaa/bar",_request,_request, _response);
assertEquals(200,_response.getStatus());
assertEquals(null,_request.getAttribute("target"));
assertEquals(null,_request.getAttribute("URI"));
assertEquals(null,_request.getAttribute("info"));
assertEquals("/aaa/bar",_request.getAttribute("before"));
assertTrue(_request.isHandled());
}
@Test
public void testEncodedPattern() throws Exception
{
_response.setStatus(200);
_request.setHandled(false);
_handler.setOriginalPathAttribute("/before");
_handler.setRewriteRequestURI(true);
_handler.setRewritePathInfo(false);
_request.setRequestURI("/ccc/x%20y");
_request.setPathInfo("/ccc/x y");
_handler.handle("/ccc/x y",_request,_request, _response);
assertEquals(201,_response.getStatus());
assertEquals("/ddd/x y",_request.getAttribute("target"));
assertEquals("/ddd/x%20y",_request.getAttribute("URI"));
assertEquals("/ccc/x y",_request.getAttribute("info"));
}
@Test
public void testEncodedRegex() throws Exception
{
_response.setStatus(200);
_request.setHandled(false);
_handler.setOriginalPathAttribute("/before");
_handler.setRewriteRequestURI(true);
_handler.setRewritePathInfo(false);
_request.setRequestURI("/xxx/x%20y");
_request.setPathInfo("/xxx/x y");
_handler.handle("/xxx/x y",_request,_request, _response);
assertEquals(201,_response.getStatus());
assertEquals("/x y/zzz",_request.getAttribute("target"));
assertEquals("/x%20y/zzz",_request.getAttribute("URI"));
assertEquals("/xxx/x y",_request.getAttribute("info"));
}
}