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

📄 urlrewritertest.java

📁 jsp中 urlRewrite的源代码 很有用的喔
💻 JAVA
字号:
/**
 * Copyright (c) 2005, Paul Tuckey
 * All rights reserved.
 *
 * Each copy or derived work must preserve the copyright notice and this
 * notice unmodified.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */
package org.tuckey.web.filters.urlrewrite;

import junit.framework.TestCase;
import org.tuckey.web.MockRequest;
import org.tuckey.web.MockResponse;
import org.tuckey.web.filters.urlrewrite.utils.Log;

import javax.servlet.ServletException;
import java.io.IOException;

/**
 * @author Paul Tuckey
 * @version $Revision: 1.19 $ $Date: 2005/12/07 10:22:16 $
 */
public class UrlRewriterTest extends TestCase {

    private MockResponse response = new MockResponse();

    public void setUp() {
        Log.setLevel("DEBUG");
        response = new MockResponse();
    }

    public void test1() throws IOException, ServletException {
        Conf conf = new Conf();
        Rule rule1 = new Rule();
        rule1.setFrom("/aaa");
        rule1.setTo("/bbb");
        conf.addRule(rule1);
        conf.initialise();

        UrlRewriter urlRewriter = new UrlRewriter(conf);

        MockRequest request = new MockRequest("/aaa");
        RewrittenUrl rewrittenRequest = urlRewriter.processRequest(request, response);

        assertTrue(rewrittenRequest.isForward());
        assertEquals("/bbb", rewrittenRequest.getTarget());

        // test null url
        request = new MockRequest();
        rewrittenRequest = urlRewriter.processRequest(request, response);
        assertNull(rewrittenRequest);

        // test query string
        request = new MockRequest("/aaa");
        request.setQueryString("bb=cc");
        rewrittenRequest = urlRewriter.processRequest(request, response);
        assertEquals("/bbb?bb=cc", rewrittenRequest.getTarget());
    }

    public void testAbsoluteRedir() throws IOException, ServletException {
        Conf conf = new Conf();
        Rule rule1 = new Rule();
        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 {
        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 {
        Conf conf = new Conf();
        Rule rule1 = new Rule();
        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 {
        Conf conf = new Conf();
        Rule rule0 = new Rule();
        rule0.setFrom("/bbb([0-9]+)");
        rule0.setTo("/qqq");
        rule0.setToLast("false");

        Rule rule1 = new Rule();
        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());

    }

    public void testBadConf() throws IOException, ServletException {
        Conf conf = new Conf();
        Rule rule1 = new Rule();
        conf.addRule(rule1);
        conf.initialise();
        UrlRewriter urlRewriter = new UrlRewriter(conf);
        MockRequest request = new MockRequest("/aaa");
        RewrittenUrl rewrittenRequest = urlRewriter.processRequest(request, response);
        assertNull(rewrittenRequest);
    }

    /**
     * Goal is to be able to process 2000 reqs a second for a simple rule set of 10000.
     */
    public void testLoadsOfRules() throws IOException, ServletException {
        // turn off logging
        Log.setLevel("ERROR");

        float testAmount = 10000; // number of times to run test
        float timePerRule = 3;  // ms per rule

        // test with 1000 rules, more than anybody would normally have
        Conf conf = new Conf();
        for (int i = 0; i < 1000; i++) {
            Rule rule = new Rule();
            rule.setFrom("^/([a-z]+)/([0-9]+)/" + i + "/$");
            rule.setTo("/blah/a/$2/");
            conf.addRule(rule);
        }
        conf.initialise();
        UrlRewriter urlRewriter = new UrlRewriter(conf);

        MockRequest request = new MockRequest("/dir/999/45/");
        // warm up
        urlRewriter.processRequest(request, response);

        long timeStart = System.currentTimeMillis();
        for (float i = 0; i < testAmount; i++) {
            urlRewriter.processRequest(request, response);
            if (i % 500 == 0 && i > 0) {
                System.out.println("avg so far " + ((System.currentTimeMillis() - timeStart) / i) + "ms per rule");
            }
        }
        long took = System.currentTimeMillis() - timeStart;
        System.out.println("took " + took + "ms " + (took / testAmount) + "ms  p er rule");
        assertTrue((took / testAmount) < timePerRule);
    }


    /**
     * Special test for rule application with no to element.
     */
    public void testNoToElement() throws IOException, ServletException {
        Rule rule1 = new Rule();
        rule1.setFrom(".*");
        Condition condition1 = new Condition();
        condition1.setType("header");
        condition1.setName("accept");
        condition1.setValue(".*image/gif.*");
        SetAttribute setAttribute1 = new SetAttribute();
        setAttribute1.setName("imageType");
        setAttribute1.setValue("gif");
        rule1.addSetAttribute(setAttribute1);
        rule1.addCondition(condition1);
        rule1.initialise(null);

        Rule rule2 = new Rule();
        rule2.setFrom(".*");
        Condition condition2 = new Condition();
        condition2.setType("header");
        condition2.setName("accept");
        condition2.setValue(".*image/jpeg.*");
        SetAttribute setAttribute2 = new SetAttribute();
        setAttribute2.setName("imageType");
        setAttribute2.setValue("jpeg");
        rule2.addSetAttribute(setAttribute2);
        rule2.addCondition(condition2);
        rule2.initialise(null);

        Rule rule3 = new Rule();
        rule3.setFrom(".*");
        Condition condition3 = new Condition();
        condition3.setType("header");
        condition3.setName("accept");
        condition3.setValue(".*image/png.*");
        SetAttribute setAttribute3 = new SetAttribute();
        setAttribute3.setName("imageType");
        setAttribute3.setValue("png");
        rule3.addSetAttribute(setAttribute3);
        rule3.addCondition(condition3);
        rule3.initialise(null);

        Rule rule4 = new Rule();
        rule4.setFrom(".*");
        Condition condition4 = new Condition();
        condition4.setType("header");
        condition4.setName("user-agent");
        condition4.setValue("SonyEricssonT68.*");
        SetAttribute setAttribute4 = new SetAttribute();
        setAttribute4.setName("imageType");
        setAttribute4.setValue("png");
        rule4.addSetAttribute(setAttribute4);
        rule4.addCondition(condition4);
        rule4.initialise(null);

        Conf conf = new Conf();
        conf.addRule(rule1);
        conf.addRule(rule2);
        conf.addRule(rule3);
        conf.addRule(rule4);

        conf.initialise();
        UrlRewriter urlRewriter = new UrlRewriter(conf);

        MockRequest request = new MockRequest("/images/my.png");
        request.setHeader("accept", "image/png,*/*;q=0.5");

        RewrittenUrl rewrittenUrl1 = urlRewriter.processRequest(request, response);

        assertEquals("png", (String) request.getAttribute("imageType"));
        assertEquals(null, rewrittenUrl1);

    }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -