View Javadoc

1   /*
2    * $Id: DefaultActionSupport.java 651946 2008-04-27 13:41:38Z apetrelli $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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         //simulate a FORWARD
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 }