1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
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);
143 control.setVoidCallable();
144
145 control.replay();
146 interceptor.intercept(mai);
147 control.verify();
148 }
149
150 public void testPrincipalProxy() throws Exception {
151
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 }