1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts.util;
22
23 import junit.framework.Test;
24 import junit.framework.TestSuite;
25
26 import org.apache.struts.Globals;
27 import org.apache.struts.action.ActionForm;
28 import org.apache.struts.action.ActionMapping;
29 import org.apache.struts.action.DynaActionForm;
30 import org.apache.struts.action.RequestProcessor;
31 import org.apache.struts.config.ForwardConfig;
32 import org.apache.struts.config.ModuleConfig;
33 import org.apache.struts.mock.MockFormBean;
34 import org.apache.struts.mock.MockPrincipal;
35 import org.apache.struts.mock.TestMockBase;
36
37 import java.net.MalformedURLException;
38
39
40
41
42
43
44
45 public class TestRequestUtils extends TestMockBase {
46
47 public TestRequestUtils(String name) {
48 super(name);
49 }
50
51 public static void main(String[] args) {
52 junit.awtui.TestRunner.main(new String[] {
53 TestRequestUtils.class.getName()
54 });
55 }
56
57 public static Test suite() {
58 return (new TestSuite(TestRequestUtils.class));
59 }
60
61
62
63 public void setUp() {
64 super.setUp();
65 }
66
67 public void tearDown() {
68 super.tearDown();
69 }
70
71
72
73 public void testAbsoluteURL() {
74 request.setPathElements("/myapp", "/action.do", null, null);
75
76 String url = null;
77
78 try {
79 url = RequestUtils.absoluteURL(request, "/foo/bar.jsp").toString();
80 assertEquals("absoluteURL is correct",
81 "http://localhost:8080/myapp/foo/bar.jsp", url);
82 } catch (MalformedURLException e) {
83 fail("Threw MalformedURLException: " + e);
84 }
85 }
86
87
88
89 public void testActionURL1() {
90 request.setAttribute(Globals.MODULE_KEY, moduleConfig);
91 request.setPathElements("/myapp", "/foo.do", null, null);
92
93 String url =
94 RequestUtils.actionURL(request,
95 moduleConfig.findActionConfig("/dynamic"), "*.do");
96
97 assertNotNull("URL was returned", url);
98 assertEquals("URL value", "/dynamic.do", url);
99 }
100
101
102 public void testActionURL2() {
103 request.setAttribute(Globals.MODULE_KEY, moduleConfig2);
104 request.setPathElements("/myapp", "/2/foo.do", null, null);
105
106 String url =
107 RequestUtils.actionURL(request,
108 moduleConfig2.findActionConfig("/dynamic2"), "*.do");
109
110 assertNotNull("URL was returned", url);
111 assertEquals("URL value", "/2/dynamic2.do", url);
112 }
113
114
115 public void testActionURL3() {
116 request.setAttribute(Globals.MODULE_KEY, moduleConfig);
117 request.setPathElements("/myapp", "/do/foo", null, null);
118
119 String url =
120 RequestUtils.actionURL(request,
121 moduleConfig.findActionConfig("/dynamic"), "/do/*");
122
123 assertNotNull("URL was returned", url);
124 assertEquals("URL value", "/do/dynamic", url);
125 }
126
127
128
129 public void testCreateActionForm1a() {
130 request.setPathElements("/myapp", "/noform.do", null, null);
131
132 ActionMapping mapping =
133 (ActionMapping) moduleConfig.findActionConfig("/noform");
134
135 assertNotNull("Found /noform mapping", mapping);
136
137 ActionForm form =
138 RequestUtils.createActionForm(request, mapping, moduleConfig, null);
139
140 assertNull("No ActionForm returned", form);
141 }
142
143
144 public void testCreateActionForm1b() {
145 request.setPathElements("/myapp", "/2/noform.do", null, null);
146
147 ActionMapping mapping =
148 (ActionMapping) moduleConfig2.findActionConfig("/noform");
149
150 assertNotNull("Found /noform mapping", mapping);
151
152 ActionForm form =
153 RequestUtils.createActionForm(request, mapping, moduleConfig2, null);
154
155 assertNull("No ActionForm returned", form);
156 }
157
158
159 public void testCreateActionForm2a() {
160 request.setPathElements("/myapp", "/static.do", null, null);
161
162 ActionMapping mapping =
163 (ActionMapping) moduleConfig.findActionConfig("/static");
164
165 assertNotNull("Found /static mapping", mapping);
166 assertNotNull("Mapping has non-null name", mapping.getName());
167 assertEquals("Mapping has correct name", "static", mapping.getName());
168 assertNotNull("AppConfig has form bean " + mapping.getName(),
169 moduleConfig.findFormBeanConfig(mapping.getName()));
170
171 ActionForm form =
172 RequestUtils.createActionForm(request, mapping, moduleConfig, null);
173
174 assertNotNull("ActionForm returned", form);
175 assertTrue("ActionForm of correct type", form instanceof MockFormBean);
176 }
177
178
179 public void testCreateActionForm2b() {
180 request.setPathElements("/myapp", "/2/static.do", null, null);
181
182 ActionMapping mapping =
183 (ActionMapping) moduleConfig2.findActionConfig("/static");
184
185 assertNotNull("Found /static mapping", mapping);
186 assertNotNull("Mapping has non-null name", mapping.getName());
187 assertEquals("Mapping has correct name", "static", mapping.getName());
188 assertNotNull("AppConfig has form bean " + mapping.getName(),
189 moduleConfig.findFormBeanConfig(mapping.getName()));
190
191 ActionForm form =
192 RequestUtils.createActionForm(request, mapping, moduleConfig2, null);
193
194 assertNotNull("ActionForm returned", form);
195 assertTrue("ActionForm of correct type", form instanceof MockFormBean);
196 }
197
198
199 public void testCreateActionForm3a() {
200 request.setPathElements("/myapp", "/dynamic.do", null, null);
201
202 ActionMapping mapping =
203 (ActionMapping) moduleConfig.findActionConfig("/dynamic");
204
205 assertNotNull("Found /dynamic mapping", mapping);
206 assertNotNull("Mapping has non-null name", mapping.getName());
207 assertEquals("Mapping has correct name", "dynamic", mapping.getName());
208 assertNotNull("AppConfig has form bean " + mapping.getName(),
209 moduleConfig.findFormBeanConfig(mapping.getName()));
210
211 ActionForm form =
212 RequestUtils.createActionForm(request, mapping, moduleConfig, null);
213
214 assertNotNull("ActionForm returned", form);
215 assertTrue("ActionForm of correct type", form instanceof DynaActionForm);
216 }
217
218
219 public void testCreateActionForm3b() {
220 request.setPathElements("/myapp", "/2/dynamic2.do", null, null);
221
222 ActionMapping mapping =
223 (ActionMapping) moduleConfig2.findActionConfig("/dynamic2");
224
225 assertNotNull("Found /dynamic2 mapping", mapping);
226 assertNotNull("Mapping has non-null name", mapping.getName());
227 assertEquals("Mapping has correct name", "dynamic2", mapping.getName());
228 assertNotNull("AppConfig has form bean " + mapping.getName(),
229 moduleConfig2.findFormBeanConfig(mapping.getName()));
230
231 ActionForm form =
232 RequestUtils.createActionForm(request, mapping, moduleConfig2, null);
233
234 assertNotNull("ActionForm returned", form);
235 assertTrue("ActionForm of correct type", form instanceof DynaActionForm);
236 }
237
238
239 public void testCreateActionForm4a() {
240
241 request.setPathElements("/myapp", "/dynamic0.do", null, null);
242
243 ActionMapping mapping =
244 (ActionMapping) moduleConfig.findActionConfig("/dynamic0");
245
246 assertNotNull("Found /dynamic0 mapping", mapping);
247 assertNotNull("Mapping has non-null name", mapping.getName());
248 assertEquals("Mapping has correct name", "dynamic0", mapping.getName());
249 assertNotNull("AppConfig has form bean " + mapping.getName(),
250 moduleConfig.findFormBeanConfig(mapping.getName()));
251
252 ActionForm form =
253 RequestUtils.createActionForm(request, mapping, moduleConfig, null);
254
255 assertNotNull("ActionForm returned", form);
256 assertTrue("ActionForm of correct type", form instanceof DynaActionForm);
257
258
259 DynaActionForm dform = (DynaActionForm) form;
260 Boolean booleanProperty = (Boolean) dform.get("booleanProperty");
261
262 assertTrue("booleanProperty is true", booleanProperty.booleanValue());
263
264 String stringProperty = (String) dform.get("stringProperty");
265
266 assertEquals("stringProperty is correct", "String Property",
267 stringProperty);
268
269 Object value = null;
270
271 value = dform.get("intArray1");
272 assertNotNull("intArray1 exists", value);
273 assertTrue("intArray1 is int[]", value instanceof int[]);
274
275 int[] intArray1 = (int[]) value;
276
277 assertEquals("intArray1 length is correct", 3, intArray1.length);
278 assertEquals("intArray1[0] value is correct", 1, intArray1[0]);
279 assertEquals("intArray1[1] value is correct", 2, intArray1[1]);
280 assertEquals("intArray1[2] value is correct", 3, intArray1[2]);
281
282 value = dform.get("intArray2");
283 assertNotNull("intArray2 exists", value);
284 assertTrue("intArray2 is int[]", value instanceof int[]);
285
286 int[] intArray2 = (int[]) value;
287
288 assertEquals("intArray2 length is correct", 5, intArray2.length);
289 assertEquals("intArray2[0] value is correct", 0, intArray2[0]);
290 assertEquals("intArray2[1] value is correct", 0, intArray2[1]);
291 assertEquals("intArray2[2] value is correct", 0, intArray2[2]);
292 assertEquals("intArray2[3] value is correct", 0, intArray2[3]);
293 assertEquals("intArray2[4] value is correct", 0, intArray2[4]);
294
295 value = dform.get("principal");
296 assertNotNull("principal exists", value);
297 assertTrue("principal is MockPrincipal", value instanceof MockPrincipal);
298
299 value = dform.get("stringArray1");
300 assertNotNull("stringArray1 exists", value);
301 assertTrue("stringArray1 is int[]", value instanceof String[]);
302
303 String[] stringArray1 = (String[]) value;
304
305 assertEquals("stringArray1 length is correct", 3, stringArray1.length);
306 assertEquals("stringArray1[0] value is correct", "aaa", stringArray1[0]);
307 assertEquals("stringArray1[1] value is correct", "bbb", stringArray1[1]);
308 assertEquals("stringArray1[2] value is correct", "ccc", stringArray1[2]);
309
310 value = dform.get("stringArray2");
311 assertNotNull("stringArray2 exists", value);
312 assertTrue("stringArray2 is int[]", value instanceof String[]);
313
314 String[] stringArray2 = (String[]) value;
315
316 assertEquals("stringArray2 length is correct", 3, stringArray2.length);
317 assertEquals("stringArray2[0] value is correct", new String(),
318 stringArray2[0]);
319 assertEquals("stringArray2[1] value is correct", new String(),
320 stringArray2[1]);
321 assertEquals("stringArray2[2] value is correct", new String(),
322 stringArray2[2]);
323
324
325 Object value1 = null;
326 DynaActionForm dform1 =
327 (DynaActionForm) RequestUtils.createActionForm(request, mapping,
328 moduleConfig, null);
329
330 value = dform.get("principal");
331 value1 = dform1.get("principal");
332 assertEquals("Different form beans get equal instance values", value,
333 value1);
334 assertTrue("Different form beans get different instances 1",
335 value != value1);
336
337 value = dform.get("stringArray1");
338 value1 = dform1.get("stringArray1");
339 assertTrue("Different form beans get different instances 2",
340 value != value1);
341
342 dform1.set("stringProperty", "Different stringProperty value");
343 value = dform.get("stringProperty");
344 value1 = dform1.get("stringProperty");
345 assertTrue("Different form beans get different instances 3",
346 value != value1);
347 }
348
349
350
351 public void testForwardURL1() {
352 request.setAttribute(Globals.MODULE_KEY, moduleConfig);
353 request.setPathElements("/myapp", "/action.do", null, null);
354
355 ForwardConfig forward = null;
356 String result = null;
357
358
359 forward = moduleConfig.findForwardConfig("moduleForward");
360 assertNotNull("moduleForward found", forward);
361 result = RequestUtils.forwardURL(request, forward, null);
362 assertNotNull("moduleForward computed", result);
363 assertEquals("moduleForward value", "/module/forward", result);
364
365
366 forward = moduleConfig.findForwardConfig("moduleRedirect");
367 assertNotNull("moduleRedirect found", forward);
368 result = RequestUtils.forwardURL(request, forward, null);
369 assertNotNull("moduleRedirect computed", result);
370 assertEquals("moduleRedirect value", "/module/redirect", result);
371
372
373 forward = moduleConfig.findForwardConfig("contextForward");
374 assertNotNull("contextForward found", forward);
375 result = RequestUtils.forwardURL(request, forward, null);
376 assertNotNull("contextForward computed", result);
377 assertEquals("contextForward value", "/context/forward", result);
378
379
380 forward = moduleConfig.findForwardConfig("contextRedirect");
381 assertNotNull("contextRedirect found", forward);
382 result = RequestUtils.forwardURL(request, forward, null);
383 assertNotNull("contextRedirect computed", result);
384 assertEquals("contextRedirct value", "/context/redirect", result);
385
386
387 forward = moduleConfig.findForwardConfig("moduleNoslash");
388 assertNotNull("moduleNoslash found", forward);
389 result = RequestUtils.forwardURL(request, forward, null);
390 assertNotNull("moduleNoslash computed", result);
391 assertEquals("moduleNoslash value", "/module/noslash", result);
392
393
394 forward = moduleConfig.findForwardConfig("contextNoslash");
395 assertNotNull("contextNoslash found", forward);
396 result = RequestUtils.forwardURL(request, forward, null);
397 assertNotNull("contextNoslash computed", result);
398 assertEquals("contextNoslash value", "/context/noslash", result);
399 }
400
401
402 public void testForwardURL2() {
403 request.setAttribute(Globals.MODULE_KEY, moduleConfig2);
404 request.setPathElements("/myapp", "/2/action.do", null, null);
405
406 ForwardConfig forward = null;
407 String result = null;
408
409
410 forward = moduleConfig2.findForwardConfig("moduleForward");
411 assertNotNull("moduleForward found", forward);
412 result = RequestUtils.forwardURL(request, forward, null);
413 assertNotNull("moduleForward computed", result);
414 assertEquals("moduleForward value", "/2/module/forward", result);
415
416
417 forward = moduleConfig2.findForwardConfig("moduleRedirect");
418 assertNotNull("moduleRedirect found", forward);
419 result = RequestUtils.forwardURL(request, forward, null);
420 assertNotNull("moduleRedirect computed", result);
421 assertEquals("moduleRedirect value", "/2/module/redirect", result);
422
423
424 forward = moduleConfig2.findForwardConfig("contextForward");
425 assertNotNull("contextForward found", forward);
426 result = RequestUtils.forwardURL(request, forward, null);
427 assertNotNull("contextForward computed", result);
428 assertEquals("contextForward value", "/context/forward", result);
429
430
431 forward = moduleConfig2.findForwardConfig("contextRedirect");
432 assertNotNull("contextRedirect found", forward);
433 result = RequestUtils.forwardURL(request, forward, null);
434 assertNotNull("contextRedirect computed", result);
435 assertEquals("contextRedirct value", "/context/redirect", result);
436
437
438 forward = moduleConfig2.findForwardConfig("moduleNoslash");
439 assertNotNull("moduleNoslash found", forward);
440 result = RequestUtils.forwardURL(request, forward, null);
441 assertNotNull("moduleNoslash computed", result);
442 assertEquals("moduleNoslash value", "/2/module/noslash", result);
443
444
445 forward = moduleConfig2.findForwardConfig("contextNoslash");
446 assertNotNull("contextNoslash found", forward);
447 result = RequestUtils.forwardURL(request, forward, null);
448 assertNotNull("contextNoslash computed", result);
449 assertEquals("contextNoslash value", "/context/noslash", result);
450 }
451
452
453 public void testForwardURL3() {
454 request.setAttribute(Globals.MODULE_KEY, moduleConfig3);
455 request.setPathElements("/myapp", "/3/action.do", null, null);
456
457 ForwardConfig forward = null;
458 String result = null;
459
460
461 forward = moduleConfig3.findForwardConfig("moduleForward");
462 assertNotNull("moduleForward found", forward);
463 result = RequestUtils.forwardURL(request, forward, null);
464 assertNotNull("moduleForward computed", result);
465 assertEquals("moduleForward value", "/forwarding/3/module/forward",
466 result);
467
468
469 forward = moduleConfig3.findForwardConfig("moduleRedirect");
470 assertNotNull("moduleRedirect found", forward);
471 result = RequestUtils.forwardURL(request, forward, null);
472 assertNotNull("moduleRedirect computed", result);
473 assertEquals("moduleRedirect value", "/forwarding/3/module/redirect",
474 result);
475
476
477 forward = moduleConfig3.findForwardConfig("contextForward");
478 assertNotNull("contextForward found", forward);
479 result = RequestUtils.forwardURL(request, forward, null);
480 assertNotNull("contextForward computed", result);
481 assertEquals("contextForward value", "/forwarding/context/forward",
482 result);
483
484
485 forward = moduleConfig3.findForwardConfig("contextRedirect");
486 assertNotNull("contextRedirect found", forward);
487 result = RequestUtils.forwardURL(request, forward, null);
488 assertNotNull("contextRedirect computed", result);
489 assertEquals("contextRedirct value", "/forwarding/context/redirect",
490 result);
491
492
493 forward = moduleConfig3.findForwardConfig("moduleNoslash");
494 assertNotNull("moduleNoslash found", forward);
495 result = RequestUtils.forwardURL(request, forward, null);
496 assertNotNull("moduleNoslash computed", result);
497 assertEquals("moduleNoslash value", "/forwarding/3/module/noslash",
498 result);
499
500
501 forward = moduleConfig3.findForwardConfig("contextNoslash");
502 assertNotNull("contextNoslash found", forward);
503 result = RequestUtils.forwardURL(request, forward, null);
504 assertNotNull("contextNoslash computed", result);
505 assertEquals("contextNoslash value", "/forwarding/context/noslash",
506 result);
507 }
508
509
510 public void testForwardURLa() {
511 request.setAttribute(Globals.MODULE_KEY, moduleConfig);
512 request.setPathElements("/myapp", "/action.do", null, null);
513
514 ForwardConfig forward = null;
515 String result = null;
516
517
518 forward = moduleConfig3.findForwardConfig("moduleForward");
519 assertNotNull("moduleForward found", forward);
520 result = RequestUtils.forwardURL(request, forward, moduleConfig3);
521 assertNotNull("moduleForward computed", result);
522 assertEquals("moduleForward value", "/forwarding/3/module/forward",
523 result);
524
525
526 forward = moduleConfig3.findForwardConfig("moduleRedirect");
527 assertNotNull("moduleRedirect found", forward);
528 result = RequestUtils.forwardURL(request, forward, moduleConfig3);
529 assertNotNull("moduleRedirect computed", result);
530 assertEquals("moduleRedirect value", "/forwarding/3/module/redirect",
531 result);
532
533
534 forward = moduleConfig3.findForwardConfig("contextForward");
535 assertNotNull("contextForward found", forward);
536 result = RequestUtils.forwardURL(request, forward, moduleConfig3);
537 assertNotNull("contextForward computed", result);
538 assertEquals("contextForward value", "/forwarding/context/forward",
539 result);
540
541
542 forward = moduleConfig3.findForwardConfig("contextRedirect");
543 assertNotNull("contextRedirect found", forward);
544 result = RequestUtils.forwardURL(request, forward, moduleConfig3);
545 assertNotNull("contextRedirect computed", result);
546 assertEquals("contextRedirct value", "/forwarding/context/redirect",
547 result);
548
549
550 forward = moduleConfig3.findForwardConfig("moduleNoslash");
551 assertNotNull("moduleNoslash found", forward);
552 result = RequestUtils.forwardURL(request, forward, moduleConfig3);
553 assertNotNull("moduleNoslash computed", result);
554 assertEquals("moduleNoslash value", "/forwarding/3/module/noslash",
555 result);
556
557
558 forward = moduleConfig3.findForwardConfig("contextNoslash");
559 assertNotNull("contextNoslash found", forward);
560 result = RequestUtils.forwardURL(request, forward, moduleConfig3);
561 assertNotNull("contextNoslash computed", result);
562 assertEquals("contextNoslash value", "/forwarding/context/noslash",
563 result);
564 }
565
566
567 public void testRequestURL() {
568 request.setPathElements("/myapp", "/foo.do", null, null);
569
570 String url = null;
571
572 try {
573 url = RequestUtils.requestURL(request).toString();
574 } catch (MalformedURLException e) {
575 fail("MalformedURLException: " + e);
576 }
577
578 assertNotNull("URL was returned", url);
579 assertEquals("URL value", "http://localhost:8080/myapp/foo.do", url);
580 }
581
582
583
584 public void testSelectApplication1a() {
585 request.setPathElements("/myapp", "/noform.do", null, null);
586 ModuleUtils.getInstance().selectModule(request, context);
587
588 ModuleConfig moduleConfig =
589 (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
590
591 assertNotNull("Selected a module", moduleConfig);
592 assertEquals("Selected correct module", "", moduleConfig.getPrefix());
593
594
595 }
596
597
598 public void testSelectApplication1b() {
599 String[] prefixes = { "/1", "/2" };
600
601 context.setAttribute(Globals.MODULE_PREFIXES_KEY, prefixes);
602 request.setPathElements("/myapp", "/2/noform.do", null, null);
603
604 ModuleUtils.getInstance().selectModule(request, context);
605
606 ModuleConfig moduleConfig =
607 (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
608
609 assertNotNull("Selected a module", moduleConfig);
610 assertEquals("Selected correct module", "/2", moduleConfig.getPrefix());
611
612
613 }
614
615
616 public void testSelectApplication2a() {
617 request.setPathElements("/myapp", "/2/noform.do", null, null);
618 request.setAttribute(RequestProcessor.INCLUDE_SERVLET_PATH, "/noform.do");
619 ModuleUtils.getInstance().selectModule(request, context);
620
621 ModuleConfig moduleConfig =
622 (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
623
624 assertNotNull("Selected an application", moduleConfig);
625 assertEquals("Selected correct application", "",
626 moduleConfig.getPrefix());
627
628
629 }
630
631
632 public void testSelectApplication2b() {
633 String[] prefixes = { "/1", "/2" };
634
635 context.setAttribute(Globals.MODULE_PREFIXES_KEY, prefixes);
636 request.setPathElements("/myapp", "/noform.do", null, null);
637 request.setAttribute(RequestProcessor.INCLUDE_SERVLET_PATH,
638 "/2/noform.do");
639 ModuleUtils.getInstance().selectModule(request, context);
640
641 ModuleConfig moduleConfig =
642 (ModuleConfig) request.getAttribute(Globals.MODULE_KEY);
643
644 assertNotNull("Selected a module", moduleConfig);
645 assertEquals("Selected correct module", "/2", moduleConfig.getPrefix());
646
647
648 }
649
650
651
652 public void testServerURL() {
653 String url = null;
654
655 try {
656 url = RequestUtils.serverURL(request).toString();
657 } catch (MalformedURLException e) {
658 fail("Threw MalformedURLException: " + e);
659 }
660
661 assertNotNull("serverURL is present", url);
662 assertEquals("serverURL value", "http://localhost:8080", url);
663 }
664 }