1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.struts2.dispatcher;
23
24 import java.io.IOException;
25 import java.util.HashMap;
26
27 import javax.servlet.FilterConfig;
28 import javax.servlet.ServletContext;
29 import javax.servlet.ServletException;
30 import javax.servlet.ServletRequest;
31 import javax.servlet.ServletResponse;
32 import javax.servlet.http.HttpServletRequest;
33 import javax.servlet.http.HttpServletResponse;
34
35 import junit.framework.TestCase;
36
37 import org.apache.struts2.StrutsTestCase;
38 import org.apache.struts2.dispatcher.mapper.ActionMapper;
39 import org.apache.struts2.dispatcher.mapper.ActionMapping;
40 import org.springframework.mock.web.MockFilterConfig;
41 import org.springframework.mock.web.MockHttpServletRequest;
42 import org.springframework.mock.web.MockHttpServletResponse;
43 import org.springframework.mock.web.MockServletContext;
44
45 import com.mockobjects.servlet.MockFilterChain;
46 import com.opensymphony.xwork2.ObjectFactory;
47 import com.opensymphony.xwork2.config.ConfigurationManager;
48 import com.opensymphony.xwork2.inject.Container;
49
50
51 /***
52 *
53 * @version $Date: 2008-04-27 13:41:38 +0000 (Sun, 27 Apr 2008) $ $Id: FilterTest.java 651946 2008-04-27 13:41:38Z apetrelli $
54 */
55 public class FilterTest extends StrutsTestCase {
56
57 protected MockFilterConfig filterConfig;
58 protected MockHttpServletRequest request;
59 protected MockHttpServletResponse response;
60 protected MockFilterChain filterChain;
61 protected MockFilterChain filterChain2;
62 protected MockServletContext servletContext;
63
64 protected InnerDispatcher _dispatcher1;
65 protected InnerDispatcher _dispatcher2;
66 protected ActionContextCleanUp cleanUp;
67 protected FilterDispatcher filterDispatcher;
68
69 protected int cleanUpFilterCreateDispatcherCount = 0;
70 protected int filterDispatcherCreateDispatcherCount = 0;
71
72
73 @Override
74 protected void tearDown() throws Exception {
75 super.tearDown();
76 filterConfig = null;
77 request = null;
78 response = null;
79 filterChain = null;
80 filterChain2 = null;
81 servletContext = null;
82 _dispatcher1 = null;
83 _dispatcher2 = null;
84 cleanUp = null;
85 filterDispatcher = null;
86 }
87
88 @Override
89 protected void setUp() throws Exception {
90 super.setUp();
91 Dispatcher.setInstance(null);
92
93 filterConfig = new MockFilterConfig();
94 request = new MockHttpServletRequest();
95 response = new MockHttpServletResponse();
96 servletContext = new MockServletContext();
97
98 _dispatcher1 = new InnerDispatcher(servletContext){
99 @Override
100 public String toString() {
101 return "dispatcher1";
102 }
103 };
104 _dispatcher2 = new InnerDispatcher(servletContext){
105 @Override
106 public String toString() {
107 return "dispatcher2";
108 }
109 };
110 filterChain = new MockFilterChain() {
111 @Override
112 public void doFilter(ServletRequest req, ServletResponse res) throws IOException, ServletException {
113 filterDispatcher.doFilter(req, res, filterChain2);
114 }
115 };
116 filterChain2 = new MockFilterChain() {
117 @Override
118 public void doFilter(ServletRequest req, ServletResponse res) throws IOException, ServletException {
119 }
120 };
121
122
123 cleanUp = new ActionContextCleanUp();
124
125 filterDispatcher = new FilterDispatcher() {
126 @Override
127 protected Dispatcher createDispatcher(FilterConfig filterConfig) {
128 filterDispatcherCreateDispatcherCount++;
129 return _dispatcher2;
130 }
131
132 @Override
133 public String toString() {
134 return "filterDispatcher";
135 }
136 };
137 }
138
139 public void testUsingFilterDispatcherOnly() throws Exception {
140 assertEquals(cleanUpFilterCreateDispatcherCount, 0);
141 assertEquals(filterDispatcherCreateDispatcherCount, 0);
142 assertFalse(_dispatcher1.init);
143 assertFalse(_dispatcher1.prepare);
144 assertFalse(_dispatcher1.wrapRequest);
145 assertFalse(_dispatcher1.service);
146 assertFalse(_dispatcher2.init);
147 assertFalse(_dispatcher2.prepare);
148 assertFalse(_dispatcher2.wrapRequest);
149 assertFalse(_dispatcher2.service);
150
151 filterDispatcher.init(filterConfig);
152 filterDispatcher.setActionMapper(new FilterTest.InnerMapper());
153 filterDispatcher.doFilter(request, response, filterChain2);
154 filterDispatcher.destroy();
155
156
157 assertEquals(cleanUpFilterCreateDispatcherCount, 0);
158 assertEquals(filterDispatcherCreateDispatcherCount, 1);
159 assertFalse(_dispatcher1.init);
160 assertFalse(_dispatcher1.prepare);
161 assertFalse(_dispatcher1.wrapRequest);
162 assertFalse(_dispatcher1.service);
163 assertTrue(_dispatcher2.init);
164 assertTrue(_dispatcher2.prepare);
165 assertTrue(_dispatcher2.wrapRequest);
166 assertTrue(_dispatcher2.service);
167 assertTrue(Dispatcher.getInstance() == null);
168 }
169
170
171 public void testUsingFilterDispatcherOnly_Multiple() throws Exception {
172
173 filterDispatcher.setActionMapper(new FilterTest.InnerMapper());
174
175 assertEquals(cleanUpFilterCreateDispatcherCount, 0);
176 assertEquals(filterDispatcherCreateDispatcherCount, 0);
177 assertFalse(_dispatcher1.prepare);
178 assertFalse(_dispatcher1.wrapRequest);
179 assertFalse(_dispatcher1.service);
180 assertFalse(_dispatcher1.cleanUp);
181 assertFalse(_dispatcher2.prepare);
182 assertFalse(_dispatcher2.wrapRequest);
183 assertFalse(_dispatcher2.service);
184 assertFalse(_dispatcher2.cleanUp);
185
186 filterDispatcher.init(filterConfig);
187 filterDispatcher.setActionMapper(new FilterTest.InnerMapper());
188 filterDispatcher.doFilter(request, response, filterChain2);
189 filterDispatcher.doFilter(request, response, filterChain2);
190 filterDispatcher.destroy();
191
192 assertEquals(cleanUpFilterCreateDispatcherCount, 0);
193
194 assertEquals(filterDispatcherCreateDispatcherCount, 1);
195 assertFalse(_dispatcher1.prepare);
196 assertFalse(_dispatcher1.wrapRequest);
197 assertFalse(_dispatcher1.service);
198 assertFalse(_dispatcher1.cleanUp);
199 assertTrue(_dispatcher2.prepare);
200 assertTrue(_dispatcher2.wrapRequest);
201 assertTrue(_dispatcher2.service);
202 assertTrue(_dispatcher2.cleanUp);
203 assertTrue(Dispatcher.getInstance() == null);
204
205 }
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285 class InnerDispatcher extends Dispatcher {
286 public boolean init = false;
287 public boolean prepare = false;
288 public boolean wrapRequest = false;
289 public boolean service = false;
290 public boolean cleanUp = false;
291
292 public InnerDispatcher(ServletContext servletContext) {
293 super(servletContext, new HashMap<String, String>());
294 }
295
296 @Override
297 public void init() {
298 init= true;
299 }
300
301 @Override
302 public Container getContainer() {
303 return container;
304 }
305
306 @Override
307 public void prepare(HttpServletRequest request, HttpServletResponse response) {
308 prepare = true;
309 }
310
311 @Override
312 public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
313 wrapRequest = true;
314 return request;
315 }
316
317 @Override
318 public void serviceAction(HttpServletRequest request, HttpServletResponse response, ServletContext context, ActionMapping mapping) throws ServletException {
319 service = true;
320 }
321
322 @Override
323 public void cleanup() {
324 cleanUp = true;
325 }
326 }
327
328 class NullInnerMapper implements ActionMapper {
329 public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) {
330 return null;
331 }
332
333 public ActionMapping getMappingFromActionName(String actionName) {
334 return null;
335 }
336
337 public String getUriFromActionMapping(ActionMapping mapping) {
338 return null;
339 }
340 }
341
342 public static class InnerMapper implements ActionMapper {
343
344 public InnerMapper() {}
345
346 public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) {
347 return new ActionMapping();
348 }
349
350 public ActionMapping getMappingFromActionName(String actionName) {
351 return null;
352 }
353
354 public String getUriFromActionMapping(ActionMapping mapping) {
355 return "";
356 }
357 }
358
359 class InnerObjectFactory extends ObjectFactory {
360 public InnerObjectFactory() {
361 super();
362 }
363 }
364 }
365