📄 urlrewritertest.java
字号:
/**
* Copyright (c) 2005-2007, Paul Tuckey
* All rights reserved.
* ====================================================================
* Licensed under the BSD License. Text as follows.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* - Neither the name tuckey.org nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
package org.tuckey.web.filters.urlrewrite;
import junit.framework.TestCase;
import org.tuckey.web.testhelper.MockRequest;
import org.tuckey.web.testhelper.MockResponse;
import org.tuckey.web.testhelper.BenchmarkRunner;
import org.tuckey.web.testhelper.MockFilterChain;
import org.tuckey.web.testhelper.MockServletContext;
import org.tuckey.web.filters.urlrewrite.test.MockRewriteMatch;
import org.tuckey.web.filters.urlrewrite.utils.Log;
import org.tuckey.web.filters.urlrewrite.test.TestRunObj;
import javax.servlet.ServletException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
/**
* @author Paul Tuckey
* @version $Revision: 44 $ $Date: 2006-11-02 12:29:14 +1300 (Thu, 02 Nov 2006) $
*/
public class UrlRewriterTest extends TestCase {
MockResponse response;
MockRequest request;
MockServletContext servletContext;
MockFilterChain chain;
public void setUp() {
Log.setLevel("DEBUG");
response = new MockResponse();
request = new MockRequest("/");
servletContext = new MockServletContext();
chain = new MockFilterChain();
TestRunObj.resetTestFlags();
}
public void test1() throws IOException, ServletException, InvocationTargetException {
Conf conf = new Conf();
NormalRule rule1 = new NormalRule();
rule1.setFrom("/aaa");
rule1.setTo("/bbb");
conf.addRule(rule1);
conf.setUseQueryString(true);
conf.setDecodeUsing("null");
conf.initialise();
assertFalse(conf.isDecodeUsingCustomCharsetRequired());
UrlRewriter urlRewriter = new UrlRewriter(conf);
MockRequest request = new MockRequest("/aaa");
NormalRewrittenUrl rewrittenRequest = (NormalRewrittenUrl) urlRewriter.processRequest(request, response);
assertTrue(rewrittenRequest.isForward());
assertEquals("/bbb", rewrittenRequest.getTarget());
// test null url
request = new MockRequest();
rewrittenRequest = (NormalRewrittenUrl) urlRewriter.processRequest(request, response);
assertNull(rewrittenRequest);
// test query string
request = new MockRequest("/aaa");
request.setQueryString("bb=cc");
rewrittenRequest = (NormalRewrittenUrl) urlRewriter.processRequest(request, response);
assertEquals("/bbb?bb=cc", rewrittenRequest.getTarget());
request = new MockRequest("/aaa%20");
rewrittenRequest = (NormalRewrittenUrl) urlRewriter.processRequest(request, response);
assertEquals("/bbb%20", rewrittenRequest.getTarget());
}
public void testDefaultDecode() throws IOException, ServletException, InvocationTargetException {
Conf conf = new Conf();
NormalRule rule1 = new NormalRule();
rule1.setFrom("^/ca&t/(.*)$");
rule1.setTo("/search/?c=y&q=$1");
conf.addRule(rule1);
conf.initialise();
assertTrue("isDecodeUsingEncodingHeader should be true", conf.isDecodeUsingEncodingHeader());
assertTrue("isDecodeUsingCustomCharsetRequired should be true", conf.isDecodeUsingCustomCharsetRequired());
UrlRewriter urlRewriter = new UrlRewriter(conf);
MockRequest request = new MockRequest("/ca&t/abc");
NormalRewrittenUrl rewrittenRequest = (NormalRewrittenUrl) urlRewriter.processRequest(request, response);
assertTrue("should be forward", rewrittenRequest.isForward());
assertEquals("/search/?c=y&q=abc", rewrittenRequest.getTarget());
}
public void testAbsoluteRedir() throws IOException, ServletException, InvocationTargetException {
Conf conf = new Conf();
NormalRule rule1 = new NormalRule();
rule1.setFrom("^(.*)$");
rule1.setToType("permanent-redirect");
rule1.setTo("http://sss.sss.sss");
conf.addRule(rule1);
conf.initialise();
UrlRewriter urlRewriter = new UrlRewriter(conf);
MockRequest request = new MockRequest("/aaa");
RewrittenUrl rewrittenRequest = urlRewriter.processRequest(request, response);
rewrittenRequest.doRewrite(request, response, null);
assertEquals("http://sss.sss.sss", response.getHeader("Location"));
}
public void testNoRules() throws IOException, ServletException, InvocationTargetException {
Conf conf = new Conf();
conf.initialise();
UrlRewriter urlRewriter = new UrlRewriter(conf);
MockRequest request = new MockRequest("/aaa");
RewrittenUrl rewrittenRequest = urlRewriter.processRequest(request, response);
assertNull(rewrittenRequest);
}
public void testSetSimple() throws IOException, ServletException, InvocationTargetException {
Conf conf = new Conf();
NormalRule rule1 = new NormalRule();
rule1.setFrom("^/aaa([0-9]+)(.*)$");
SetAttribute setAttribute1 = new SetAttribute();
setAttribute1.setName("blah");
setAttribute1.setValue("someval");
rule1.addSetAttribute(setAttribute1);
SetAttribute setAttribute2 = new SetAttribute();
setAttribute2.setType("session");
setAttribute2.setName("sblah");
setAttribute2.setValue("$1");
rule1.addSetAttribute(setAttribute2);
SetAttribute setAttribute3 = new SetAttribute();
setAttribute3.setType("response-header");
setAttribute3.setName("Cache-control");
setAttribute3.setValue("none");
rule1.addSetAttribute(setAttribute3);
SetAttribute setAttribute4 = new SetAttribute();
setAttribute4.setName("action");
setAttribute4.setValue("delete");
rule1.addSetAttribute(setAttribute4);
conf.addRule(rule1);
conf.initialise();
UrlRewriter urlRewriter = new UrlRewriter(conf);
MockRequest request = new MockRequest("/aaa4?asdadasd");
urlRewriter.processRequest(request, response);
assertEquals("someval", request.getAttribute("blah"));
assertEquals("4", request.getSession().getAttribute("sblah"));
assertEquals("delete", request.getAttribute("action"));
assertEquals("none", response.getHeader("Cache-control"));
}
public void testSetSimpleWithRule() throws IOException, ServletException, InvocationTargetException {
Conf conf = new Conf();
NormalRule rule0 = new NormalRule();
rule0.setFrom("/bbb([0-9]+)");
rule0.setTo("/qqq");
rule0.setToLast("false");
NormalRule rule1 = new NormalRule();
rule1.setFrom("^/aaa([0-9]+)$");
SetAttribute setAttribute1 = new SetAttribute();
setAttribute1.setType("status");
setAttribute1.setValue("404");
rule1.addSetAttribute(setAttribute1);
conf.addRule(rule0);
conf.addRule(rule1);
conf.initialise();
UrlRewriter urlRewriter = new UrlRewriter(conf);
MockRequest request = new MockRequest("/bbb2?asdadasd");
RewrittenUrl rewrittenRequest = urlRewriter.processRequest(request, response);
assertEquals("/qqq?asdadasd", rewrittenRequest.getTarget());
assertEquals(200, response.getStatus());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -