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.interceptor;
22
23 import java.util.HashMap;
24 import java.util.Map;
25
26 import javax.servlet.ServletContext;
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.http.HttpServletResponse;
29
30 import org.apache.struts2.StrutsStatics;
31 import org.apache.struts2.StrutsTestCase;
32 import org.apache.struts2.util.ServletContextAware;
33 import org.easymock.MockControl;
34 import org.springframework.mock.web.MockHttpServletRequest;
35 import org.springframework.mock.web.MockHttpServletResponse;
36 import org.springframework.mock.web.MockServletContext;
37
38 import com.opensymphony.xwork2.Action;
39 import com.opensymphony.xwork2.ActionContext;
40 import com.opensymphony.xwork2.mock.MockActionInvocation;
41
42 /***
43 * Unit test for {@link ServletConfigInterceptor}.
44 *
45 */
46 public class ServletConfigInterceptorTest extends StrutsTestCase {
47
48 private ServletConfigInterceptor interceptor;
49
50 public void testServletRequestAware() throws Exception {
51 MockControl control = MockControl.createControl(ServletRequestAware.class);
52 ServletRequestAware mock = (ServletRequestAware) control.getMock();
53
54 MockHttpServletRequest req = new MockHttpServletRequest();
55
56 MockActionInvocation mai = createActionInvocation(mock);
57 mai.getInvocationContext().put(StrutsStatics.HTTP_REQUEST, req);
58
59 mock.setServletRequest((HttpServletRequest) req);
60 control.setVoidCallable();
61
62 control.replay();
63 interceptor.intercept(mai);
64 control.verify();
65 }
66
67 public void testServletResponseAware() throws Exception {
68 MockControl control = MockControl.createControl(ServletResponseAware.class);
69 ServletResponseAware mock = (ServletResponseAware) control.getMock();
70
71 MockHttpServletResponse res = new MockHttpServletResponse();
72
73 MockActionInvocation mai = createActionInvocation(mock);
74 mai.getInvocationContext().put(StrutsStatics.HTTP_RESPONSE, res);
75
76 mock.setServletResponse((HttpServletResponse) res);
77 control.setVoidCallable();
78
79 control.replay();
80 interceptor.intercept(mai);
81 control.verify();
82 }
83
84 public void testParameterAware() throws Exception {
85 MockControl control = MockControl.createControl(ParameterAware.class);
86 ParameterAware mock = (ParameterAware) control.getMock();
87
88 MockActionInvocation mai = createActionInvocation(mock);
89
90 Map param = new HashMap();
91 mai.getInvocationContext().setParameters(param);
92
93 mock.setParameters(param);
94 control.setVoidCallable();
95
96 control.replay();
97 interceptor.intercept(mai);
98 control.verify();
99 }
100
101 public void testSessionAware() throws Exception {
102 MockControl control = MockControl.createControl(SessionAware.class);
103 SessionAware mock = (SessionAware) control.getMock();
104
105 MockActionInvocation mai = createActionInvocation(mock);
106
107 Map session = new HashMap();
108 mai.getInvocationContext().setSession(session);
109
110 mock.setSession(session);
111 control.setVoidCallable();
112
113 control.replay();
114 interceptor.intercept(mai);
115 control.verify();
116 }
117
118 public void testApplicationAware() throws Exception {
119 MockControl control = MockControl.createControl(ApplicationAware.class);
120 ApplicationAware mock = (ApplicationAware) control.getMock();
121
122 MockActionInvocation mai = createActionInvocation(mock);
123
124 Map app = new HashMap();
125 mai.getInvocationContext().setApplication(app);
126
127 mock.setApplication(app);
128 control.setVoidCallable();
129
130 control.replay();
131 interceptor.intercept(mai);
132 control.verify();
133 }
134
135 public void testPrincipalAware() throws Exception {
136 MockControl control = MockControl.createControl(PrincipalAware.class);
137 control.setDefaultMatcher(MockControl.ALWAYS_MATCHER);
138 PrincipalAware mock = (PrincipalAware) control.getMock();
139
140 MockActionInvocation mai = createActionInvocation(mock);
141
142 MockServletContext ctx = new MockServletContext();
143 mai.getInvocationContext().put(StrutsStatics.SERVLET_CONTEXT, ctx);
144
145 mock.setPrincipalProxy(null);
146 control.setVoidCallable();
147
148 control.replay();
149 interceptor.intercept(mai);
150 control.verify();
151 }
152
153 public void testPrincipalProxy() throws Exception {
154
155 MockHttpServletRequest req = new MockHttpServletRequest();
156 req.setUserPrincipal(null);
157 req.setRemoteUser("Santa");
158
159 MyPrincipalAction action = new MyPrincipalAction();
160 MockActionInvocation mai = createActionInvocation(action);
161 mai.getInvocationContext().put(StrutsStatics.HTTP_REQUEST, req);
162
163 assertNull(action.getProxy());
164 interceptor.intercept(mai);
165 assertNotNull(action.getProxy());
166
167 PrincipalProxy proxy = action.getProxy();
168 assertEquals(proxy.getRequest(), req);
169 assertNull(proxy.getUserPrincipal());
170 assertTrue(! proxy.isRequestSecure());
171 assertTrue(! proxy.isUserInRole("no.role"));
172 assertEquals("Santa", proxy.getRemoteUser());
173
174 }
175
176 public void testServletContextAware() throws Exception {
177 MockControl control = MockControl.createControl(ServletContextAware.class);
178 ServletContextAware mock = (ServletContextAware) control.getMock();
179
180 MockActionInvocation mai = createActionInvocation(mock);
181
182 MockServletContext ctx = new MockServletContext();
183 mai.getInvocationContext().put(StrutsStatics.SERVLET_CONTEXT, ctx);
184
185 mock.setServletContext((ServletContext) ctx);
186 control.setVoidCallable();
187
188 control.replay();
189 interceptor.intercept(mai);
190 control.verify();
191 }
192
193 private MockActionInvocation createActionInvocation(Object mock) {
194 MockActionInvocation mai = new MockActionInvocation();
195 mai.setResultCode("success");
196 mai.setInvocationContext(ActionContext.getContext());
197 mai.setAction(mock);
198 return mai;
199 }
200
201
202 protected void setUp() throws Exception {
203 super.setUp();
204 interceptor = new ServletConfigInterceptor();
205 interceptor.init();
206 }
207
208 protected void tearDown() throws Exception {
209 super.tearDown();
210 interceptor.destroy();
211 interceptor = null;
212 }
213
214 private class MyPrincipalAction implements Action, PrincipalAware {
215
216 private PrincipalProxy proxy;
217
218 public String execute() throws Exception {
219 return SUCCESS;
220 }
221
222 public void setPrincipalProxy(PrincipalProxy proxy) {
223 this.proxy = proxy;
224 }
225
226 public PrincipalProxy getProxy() {
227 return proxy;
228 }
229 }
230
231 }