View Javadoc

1   /*
2    * $Id: ServletConfigInterceptorTest.java 439747 2006-09-03 09:22:46Z mrdon $
3    *
4    * Copyright 2006 The Apache Software Foundation.
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10   *      http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   */
18  package org.apache.struts2.interceptor;
19  
20  import java.util.HashMap;
21  import java.util.Map;
22  
23  import javax.servlet.ServletContext;
24  import javax.servlet.http.HttpServletRequest;
25  import javax.servlet.http.HttpServletResponse;
26  
27  import org.apache.struts2.StrutsStatics;
28  import org.apache.struts2.StrutsTestCase;
29  import org.apache.struts2.util.ServletContextAware;
30  import org.easymock.MockControl;
31  import org.springframework.mock.web.MockHttpServletRequest;
32  import org.springframework.mock.web.MockHttpServletResponse;
33  import org.springframework.mock.web.MockServletContext;
34  
35  import com.opensymphony.xwork2.Action;
36  import com.opensymphony.xwork2.ActionContext;
37  import com.opensymphony.xwork2.mock.MockActionInvocation;
38  
39  /***
40   * Unit test for {@link ServletConfigInterceptor}.
41   *
42   */
43  public class ServletConfigInterceptorTest extends StrutsTestCase {
44  
45      private ServletConfigInterceptor interceptor;
46  
47      public void testServletRequestAware() throws Exception {
48          MockControl control = MockControl.createControl(ServletRequestAware.class);
49          ServletRequestAware mock = (ServletRequestAware) control.getMock();
50  
51          MockHttpServletRequest req = new MockHttpServletRequest();
52  
53          MockActionInvocation mai = createActionInvocation(mock);
54          mai.getInvocationContext().put(StrutsStatics.HTTP_REQUEST, req);
55  
56          mock.setServletRequest((HttpServletRequest) req);
57          control.setVoidCallable();
58  
59          control.replay();
60          interceptor.intercept(mai);
61          control.verify();
62      }
63  
64      public void testServletResponseAware() throws Exception {
65          MockControl control = MockControl.createControl(ServletResponseAware.class);
66          ServletResponseAware mock = (ServletResponseAware) control.getMock();
67  
68          MockHttpServletResponse res = new MockHttpServletResponse();
69  
70          MockActionInvocation mai = createActionInvocation(mock);
71          mai.getInvocationContext().put(StrutsStatics.HTTP_RESPONSE, res);
72  
73          mock.setServletResponse((HttpServletResponse) res);
74          control.setVoidCallable();
75  
76          control.replay();
77          interceptor.intercept(mai);
78          control.verify();
79      }
80  
81      public void testParameterAware() throws Exception {
82          MockControl control = MockControl.createControl(ParameterAware.class);
83          ParameterAware mock = (ParameterAware) control.getMock();
84  
85          MockActionInvocation mai = createActionInvocation(mock);
86  
87          Map param = new HashMap();
88          mai.getInvocationContext().setParameters(param);
89  
90          mock.setParameters(param);
91          control.setVoidCallable();
92  
93          control.replay();
94          interceptor.intercept(mai);
95          control.verify();
96      }
97  
98      public void testSessionAware() throws Exception {
99          MockControl control = MockControl.createControl(SessionAware.class);
100         SessionAware mock = (SessionAware) control.getMock();
101 
102         MockActionInvocation mai = createActionInvocation(mock);
103 
104         Map session = new HashMap();
105         mai.getInvocationContext().setSession(session);
106 
107         mock.setSession(session);
108         control.setVoidCallable();
109 
110         control.replay();
111         interceptor.intercept(mai);
112         control.verify();
113     }
114 
115     public void testApplicationAware() throws Exception {
116         MockControl control = MockControl.createControl(ApplicationAware.class);
117         ApplicationAware mock = (ApplicationAware) control.getMock();
118 
119         MockActionInvocation mai = createActionInvocation(mock);
120 
121         Map app = new HashMap();
122         mai.getInvocationContext().setApplication(app);
123 
124         mock.setApplication(app);
125         control.setVoidCallable();
126 
127         control.replay();
128         interceptor.intercept(mai);
129         control.verify();
130     }
131 
132     public void testPrincipalAware() throws Exception {
133         MockControl control = MockControl.createControl(PrincipalAware.class);
134         control.setDefaultMatcher(MockControl.ALWAYS_MATCHER); // less strick match is needed for this unit test to be conducted using mocks
135         PrincipalAware mock = (PrincipalAware) control.getMock();
136 
137         MockActionInvocation mai = createActionInvocation(mock);
138 
139         MockServletContext ctx = new MockServletContext();
140         mai.getInvocationContext().put(StrutsStatics.SERVLET_CONTEXT, ctx);
141 
142         mock.setPrincipalProxy(null); // we can do this because of ALWAYS_MATCHER
143         control.setVoidCallable();
144 
145         control.replay();
146         interceptor.intercept(mai);
147         control.verify();
148     }
149 
150     public void testPrincipalProxy() throws Exception {
151         // uni test that does not use mock, but an Action so we also get code coverage for the PrincipalProxy class
152         MockHttpServletRequest req = new MockHttpServletRequest();
153         req.setUserPrincipal(null);
154         req.setRemoteUser("Santa");
155 
156         MyPrincipalAction action = new MyPrincipalAction();
157         MockActionInvocation mai = createActionInvocation(action);
158         mai.getInvocationContext().put(StrutsStatics.HTTP_REQUEST, req);
159 
160         assertNull(action.getProxy());
161         interceptor.intercept(mai);
162         assertNotNull(action.getProxy());
163 
164         PrincipalProxy proxy = action.getProxy();
165         assertEquals(proxy.getRequest(), req);
166         assertNull(proxy.getUserPrincipal());
167         assertTrue(! proxy.isRequestSecure());
168         assertTrue(! proxy.isUserInRole("no.role"));
169         assertEquals("Santa", proxy.getRemoteUser());
170 
171     }
172 
173     public void testServletContextAware() throws Exception {
174         MockControl control = MockControl.createControl(ServletContextAware.class);
175         ServletContextAware mock = (ServletContextAware) control.getMock();
176 
177         MockActionInvocation mai = createActionInvocation(mock);
178 
179         MockServletContext ctx = new MockServletContext();
180         mai.getInvocationContext().put(StrutsStatics.SERVLET_CONTEXT, ctx);
181 
182         mock.setServletContext((ServletContext) ctx);
183         control.setVoidCallable();
184 
185         control.replay();
186         interceptor.intercept(mai);
187         control.verify();
188     }
189 
190     private MockActionInvocation createActionInvocation(Object mock) {
191         MockActionInvocation mai = new MockActionInvocation();
192         mai.setResultCode("success");
193         mai.setInvocationContext(ActionContext.getContext());
194         mai.setAction(mock);
195         return mai;
196     }
197 
198 
199     protected void setUp() throws Exception {
200         super.setUp();
201         interceptor = new ServletConfigInterceptor();
202         interceptor.init();
203     }
204 
205     protected void tearDown() throws Exception {
206         super.tearDown();
207         interceptor.destroy();
208         interceptor = null;
209     }
210 
211     private class MyPrincipalAction implements Action, PrincipalAware {
212 
213         private PrincipalProxy proxy;
214 
215         public String execute() throws Exception {
216             return SUCCESS;
217         }
218 
219         public void setPrincipalProxy(PrincipalProxy proxy) {
220             this.proxy = proxy;
221         }
222 
223         public PrincipalProxy getProxy() {
224             return proxy;
225         }
226     }
227 
228 }