1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.dispatcher.ng;
22
23 import com.opensymphony.xwork2.ActionContext;
24 import junit.framework.TestCase;
25 import org.apache.struts2.dispatcher.Dispatcher;
26 import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
27 import org.springframework.mock.web.MockFilterChain;
28 import org.springframework.mock.web.MockFilterConfig;
29 import org.springframework.mock.web.MockHttpServletRequest;
30 import org.springframework.mock.web.MockHttpServletResponse;
31
32 import javax.servlet.ServletException;
33 import javax.servlet.ServletRequest;
34 import javax.servlet.ServletResponse;
35 import javax.servlet.FilterConfig;
36 import java.io.IOException;
37 import java.util.regex.Pattern;
38 import java.util.ArrayList;
39
40 /***
41 * Integration tests for the filter
42 */
43 public class StrutsPrepareAndExecuteFilterIntegrationTest extends TestCase {
44
45 public void test404() throws ServletException, IOException {
46 MockHttpServletRequest request = new MockHttpServletRequest();
47 MockHttpServletResponse response = new MockHttpServletResponse();
48 MockFilterConfig filterConfig = new MockFilterConfig();
49 MockFilterChain filterChain = new MockFilterChain() {
50 @Override
51 public void doFilter(ServletRequest req, ServletResponse res) {
52 fail("Shouldn't get here");
53 }
54 };
55
56 request.setRequestURI("/foo.action");
57 StrutsPrepareAndExecuteFilter filter = new StrutsPrepareAndExecuteFilter();
58 filter.init(filterConfig);
59 filter.doFilter(request, response, filterChain);
60 assertEquals(404, response.getStatus());
61 assertNull(ActionContext.getContext());
62 assertNull(Dispatcher.getInstance());
63 }
64
65 public void test200() throws ServletException, IOException {
66 MockHttpServletRequest request = new MockHttpServletRequest();
67 MockHttpServletResponse response = new MockHttpServletResponse();
68 MockFilterConfig filterConfig = new MockFilterConfig();
69 MockFilterChain filterChain = new MockFilterChain() {
70 @Override
71 public void doFilter(ServletRequest req, ServletResponse res) {
72 fail("Shouldn't get here");
73 }
74 };
75
76 request.setRequestURI("/hello.action");
77 StrutsPrepareAndExecuteFilter filter = new StrutsPrepareAndExecuteFilter();
78 filter.init(filterConfig);
79 filter.doFilter(request, response, filterChain);
80 assertEquals(200, response.getStatus());
81 assertNull(ActionContext.getContext());
82 assertNull(Dispatcher.getInstance());
83 }
84
85 public void testActionMappingLookup() throws ServletException, IOException {
86 MockHttpServletRequest request = new MockHttpServletRequest();
87 MockHttpServletResponse response = new MockHttpServletResponse();
88 MockFilterConfig filterConfig = new MockFilterConfig();
89 MockFilterChain filterChain = new MockFilterChain() {
90 @Override
91 public void doFilter(ServletRequest req, ServletResponse res) {
92 fail("Shouldn't get here");
93 }
94 };
95
96 request.setRequestURI("/hello.action");
97 StrutsPrepareAndExecuteFilter filter = new StrutsPrepareAndExecuteFilter();
98 filter.init(filterConfig);
99 filter.doFilter(request, response, filterChain);
100 assertEquals(200, response.getStatus());
101 assertNull(ActionContext.getContext());
102 assertNull(Dispatcher.getInstance());
103
104
105 MockFilterChain filterChain2 = new MockFilterChain() {
106 @Override
107 public void doFilter(ServletRequest req, ServletResponse res) {
108 req.setAttribute("__invoked", true);
109 }
110 };
111 request.setRequestURI("hello.jsp");
112 filter.doFilter(request, response, filterChain2);
113 assertEquals(200, response.getStatus());
114 assertNull(ActionContext.getContext());
115 assertNull(Dispatcher.getInstance());
116 assertTrue((Boolean) request.getAttribute("__invoked"));
117 }
118
119 public void testUriPatternExclusion() throws ServletException, IOException {
120 MockHttpServletRequest request = new MockHttpServletRequest();
121 MockHttpServletResponse response = new MockHttpServletResponse();
122 MockFilterConfig filterConfig = new MockFilterConfig();
123 MockFilterChain filterChain = new MockFilterChain() {
124 @Override
125 public void doFilter(ServletRequest req, ServletResponse res) {
126 req.setAttribute("i_was", "invoked");
127 }
128 };
129
130 request.setRequestURI("/hello.action");
131 StrutsPrepareAndExecuteFilter filter = new StrutsPrepareAndExecuteFilter() {
132 @Override
133 public void init( FilterConfig filterConfig ) throws ServletException {
134 super.init(filterConfig);
135 excludedPatterns = new ArrayList<Pattern>();
136 excludedPatterns.add(Pattern.compile(".*hello.*"));
137 }
138 };
139 filter.init(filterConfig);
140 filter.doFilter(request, response, filterChain);
141 assertEquals(200, response.getStatus());
142 assertEquals("invoked", request.getAttribute("i_was"));
143 }
144
145 public void testStaticFallthrough() throws ServletException, IOException {
146 MockHttpServletRequest request = new MockHttpServletRequest();
147 MockHttpServletResponse response = new MockHttpServletResponse();
148 MockFilterConfig filterConfig = new MockFilterConfig();
149 MockFilterChain filterChain = new MockFilterChain() {
150 @Override
151 public void doFilter(ServletRequest req, ServletResponse res) {
152 assertNotNull(ActionContext.getContext());
153 assertNotNull(Dispatcher.getInstance());
154 try {
155 res.getWriter().write("found");
156 } catch (IOException e) {
157 fail(e.getMessage());
158 }
159 }
160 };
161
162 request.setRequestURI("/foo.txt");
163 StrutsPrepareAndExecuteFilter filter = new StrutsPrepareAndExecuteFilter();
164 filter.init(filterConfig);
165 filter.doFilter(request, response, filterChain);
166 assertEquals(200, response.getStatus());
167 assertEquals("found", response.getContentAsString());
168 assertNull(ActionContext.getContext());
169 assertNull(Dispatcher.getInstance());
170 }
171
172 public void testStaticExecute() throws ServletException, IOException {
173 MockHttpServletRequest request = new MockHttpServletRequest();
174 MockHttpServletResponse response = new MockHttpServletResponse();
175 MockFilterConfig filterConfig = new MockFilterConfig();
176 MockFilterChain filterChain = new MockFilterChain() {
177 @Override
178 public void doFilter(ServletRequest req, ServletResponse res) {
179 fail("Should never get here");
180 }
181 };
182
183 request.setRequestURI("/struts/utils.js");
184 StrutsPrepareAndExecuteFilter filter = new StrutsPrepareAndExecuteFilter();
185 filter.init(filterConfig);
186 filter.doFilter(request, response, filterChain);
187 assertEquals(200, response.getStatus());
188 assertTrue(response.getContentAsString().contains("StrutsUtils"));
189 assertNull(ActionContext.getContext());
190 assertNull(Dispatcher.getInstance());
191 }
192 }