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