⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 urlrewritertest.java

📁 UrlRewriteFilter 是一个不错的URL转换工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**
 * 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 + -