1
// ========================================================================
2
// Copyright 2006 Mort Bay Consulting Pty. Ltd.
3
// ------------------------------------------------------------------------
4
// Licensed under the Apache License, Version 2.0 (the "License");
5
// you may not use this file except in compliance with the License.
6
// You may obtain a copy of the License at
7
// http://www.apache.org/licenses/LICENSE-2.0
8
// Unless required by applicable law or agreed to in writing, software
9
// distributed under the License is distributed on an "AS IS" BASIS,
10
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
// See the License for the specific language governing permissions and
12
// limitations under the License.
13
// ========================================================================
14
package org.mortbay.jetty.handler.rewrite;
16
import java.io.IOException;
18
import javax.servlet.ServletException;
19
import javax.servlet.http.HttpServletRequest;
20
import javax.servlet.http.HttpServletResponse;
22
import org.mortbay.jetty.handler.AbstractHandler;
25
public class RewriteHandlerTest extends AbstractRuleTestCase
27
RewriteHandler _handler;
28
RewritePatternRule _rule1;
29
RewritePatternRule _rule2;
30
RewritePatternRule _rule3;
33
public void setUp() throws Exception
35
_handler=new RewriteHandler();
36
_server.setHandler(_handler);
37
_handler.setHandler(new AbstractHandler(){
39
public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException
41
response.setStatus(201);
42
request.setAttribute("target",target);
43
request.setAttribute("URI",request.getRequestURI());
44
request.setAttribute("info",request.getPathInfo());
49
_rule1 = new RewritePatternRule();
50
_rule1.setPattern("/aaa/*");
51
_rule1.setReplacement("/bbb");
52
_rule2 = new RewritePatternRule();
53
_rule2.setPattern("/bbb/*");
54
_rule2.setReplacement("/ccc");
55
_rule3 = new RewritePatternRule();
56
_rule3.setPattern("/ccc/*");
57
_rule3.setReplacement("/ddd");
59
_handler.setRules(new Rule[]{_rule1,_rule2,_rule3});
65
public void test() throws Exception
67
_response.setStatus(200);
68
_request.setHandled(false);
69
_handler.setOriginalPathAttribute("/before");
70
_handler.setRewriteRequestURI(false);
71
_handler.setRewritePathInfo(false);
72
_request.setRequestURI("/foo/bar");
73
_request.setPathInfo("/foo/bar");
74
_handler.handle("/foo/bar",_request,_response,0);
75
assertEquals(201,_response.getStatus());
76
assertEquals("/foo/bar",_request.getAttribute("target"));
77
assertEquals("/foo/bar",_request.getAttribute("URI"));
78
assertEquals("/foo/bar",_request.getAttribute("info"));
79
assertEquals(null,_request.getAttribute("before"));
82
_response.setStatus(200);
83
_request.setHandled(false);
84
_handler.setOriginalPathAttribute(null);
85
_request.setRequestURI("/aaa/bar");
86
_request.setPathInfo("/aaa/bar");
87
_handler.handle("/aaa/bar",_request,_response,0);
88
assertEquals(201,_response.getStatus());
89
assertEquals("/ddd/bar",_request.getAttribute("target"));
90
assertEquals("/aaa/bar",_request.getAttribute("URI"));
91
assertEquals("/aaa/bar",_request.getAttribute("info"));
92
assertEquals(null,_request.getAttribute("before"));
95
_response.setStatus(200);
96
_request.setHandled(false);
97
_handler.setOriginalPathAttribute("before");
98
_handler.setRewriteRequestURI(true);
99
_handler.setRewritePathInfo(true);
100
_request.setRequestURI("/aaa/bar");
101
_request.setPathInfo("/aaa/bar");
102
_handler.handle("/aaa/bar",_request,_response,0);
103
assertEquals(201,_response.getStatus());
104
assertEquals("/ddd/bar",_request.getAttribute("target"));
105
assertEquals("/ddd/bar",_request.getAttribute("URI"));
106
assertEquals("/ddd/bar",_request.getAttribute("info"));
107
assertEquals("/aaa/bar",_request.getAttribute("before"));
110
_response.setStatus(200);
111
_request.setHandled(false);
112
_rule2.setTerminating(true);
113
_request.setRequestURI("/aaa/bar");
114
_request.setPathInfo("/aaa/bar");
115
_handler.handle("/aaa/bar",_request,_response,0);
116
assertEquals(201,_response.getStatus());
117
assertEquals("/ccc/bar",_request.getAttribute("target"));
118
assertEquals("/ccc/bar",_request.getAttribute("URI"));
119
assertEquals("/ccc/bar",_request.getAttribute("info"));
120
assertEquals("/aaa/bar",_request.getAttribute("before"));
122
_response.setStatus(200);
123
_request.setHandled(false);
124
_rule2.setHandling(true);
125
_request.setAttribute("before",null);
126
_request.setAttribute("target",null);
127
_request.setAttribute("URI",null);
128
_request.setAttribute("info",null);
129
_request.setRequestURI("/aaa/bar");
130
_request.setPathInfo("/aaa/bar");
131
_handler.handle("/aaa/bar",_request,_response,0);
132
assertEquals(200,_response.getStatus());
133
assertEquals(null,_request.getAttribute("target"));
134
assertEquals(null,_request.getAttribute("URI"));
135
assertEquals(null,_request.getAttribute("info"));
136
assertEquals("/aaa/bar",_request.getAttribute("before"));
137
assertTrue(_request.isHandled());