View Javadoc

1   /*
2    * $Id: $
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.interceptor;
22  
23  import java.util.Collections;
24  import java.util.Map;
25  
26  import javax.servlet.http.Cookie;
27  
28  import org.easymock.MockControl;
29  import org.springframework.mock.web.MockHttpServletRequest;
30  
31  import org.apache.struts2.ServletActionContext;
32  import org.apache.struts2.StrutsTestCase;
33  import com.opensymphony.xwork2.Action;
34  import com.opensymphony.xwork2.ActionContext;
35  import com.opensymphony.xwork2.ActionInvocation;
36  import com.opensymphony.xwork2.ActionSupport;
37  
38  public class CookieInterceptorTest extends StrutsTestCase {
39  
40  
41      public void testIntercepDefault() throws Exception {
42          MockHttpServletRequest request = new MockHttpServletRequest();
43          request.setCookies(new Cookie[] {
44                  new Cookie("cookie1", "cookie1value"),
45                  new Cookie("cookie2", "cookie2value"),
46                  new Cookie("cookie3", "cookie3value")
47              });
48          ServletActionContext.setRequest(request);
49  
50          MockActionWithCookieAware action = new MockActionWithCookieAware();
51  
52          ActionContext.getContext().getValueStack().push(action);
53  
54          MockControl actionInvocationControl = MockControl.createControl(ActionInvocation.class);
55          ActionInvocation invocation = (ActionInvocation) actionInvocationControl.getMock();
56          actionInvocationControl.expectAndDefaultReturn(
57                                                         invocation.getAction(), action);
58          actionInvocationControl.expectAndDefaultReturn(
59                                                         invocation.invoke(), Action.SUCCESS);
60  
61          actionInvocationControl.replay();
62  
63          // by default the interceptor doesn't accept any cookies
64          CookieInterceptor interceptor = new CookieInterceptor();
65          interceptor.intercept(invocation);
66  
67          assertTrue(action.getCookiesMap().isEmpty());
68          assertNull(action.getCookie1(), null);
69          assertNull(action.getCookie2(), null);
70          assertNull(action.getCookie3(), null);
71          assertNull(ActionContext.getContext().getValueStack().findValue("cookie1"));
72          assertNull(ActionContext.getContext().getValueStack().findValue("cookie2"));
73          assertNull(ActionContext.getContext().getValueStack().findValue("cookie3"));
74      }
75  
76      public void testInterceptAll1() throws Exception {
77          MockHttpServletRequest request = new MockHttpServletRequest();
78          request.setCookies(new Cookie[] {
79                  new Cookie("cookie1", "cookie1value"),
80                  new Cookie("cookie2", "cookie2value"),
81                  new Cookie("cookie3", "cookie3value")
82              });
83          ServletActionContext.setRequest(request);
84  
85          MockActionWithCookieAware action = new MockActionWithCookieAware();
86  
87          ActionContext.getContext().getValueStack().push(action);
88  
89          MockControl actionInvocationControl = MockControl.createControl(ActionInvocation.class);
90          ActionInvocation invocation = (ActionInvocation) actionInvocationControl.getMock();
91          actionInvocationControl.expectAndDefaultReturn(
92                                                         invocation.getAction(), action);
93          actionInvocationControl.expectAndDefaultReturn(
94                                                         invocation.invoke(), Action.SUCCESS);
95  
96          actionInvocationControl.replay();
97  
98          CookieInterceptor interceptor = new CookieInterceptor();
99          interceptor.setCookiesName("*");
100         interceptor.setCookiesValue("*");
101         interceptor.intercept(invocation);
102 
103         assertFalse(action.getCookiesMap().isEmpty());
104         assertEquals(action.getCookiesMap().size(), 3);
105         assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
106         assertEquals(action.getCookiesMap().get("cookie2"), "cookie2value");
107         assertEquals(action.getCookiesMap().get("cookie3"), "cookie3value");
108         assertEquals(action.getCookie1(), "cookie1value");
109         assertEquals(action.getCookie2(), "cookie2value");
110         assertEquals(action.getCookie3(), "cookie3value");
111         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value");
112         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), "cookie2value");
113         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), "cookie3value");
114     }
115 
116 
117     public void testInterceptAll2() throws Exception {
118         MockHttpServletRequest request = new MockHttpServletRequest();
119         request.setCookies(new Cookie[] {
120                 new Cookie("cookie1", "cookie1value"),
121                 new Cookie("cookie2", "cookie2value"),
122                 new Cookie("cookie3", "cookie3value")
123             });
124         ServletActionContext.setRequest(request);
125 
126         MockActionWithCookieAware action = new MockActionWithCookieAware();
127 
128         ActionContext.getContext().getValueStack().push(action);
129 
130         MockControl actionInvocationControl = MockControl.createControl(ActionInvocation.class);
131         ActionInvocation invocation = (ActionInvocation) actionInvocationControl.getMock();
132         actionInvocationControl.expectAndDefaultReturn(
133                                                        invocation.getAction(), action);
134         actionInvocationControl.expectAndDefaultReturn(
135                                                        invocation.invoke(), Action.SUCCESS);
136 
137         actionInvocationControl.replay();
138 
139         CookieInterceptor interceptor = new CookieInterceptor();
140         interceptor.setCookiesName("cookie1, cookie2, cookie3");
141         interceptor.setCookiesValue("cookie1value, cookie2value, cookie3value");
142         interceptor.intercept(invocation);
143 
144         assertFalse(action.getCookiesMap().isEmpty());
145         assertEquals(action.getCookiesMap().size(), 3);
146         assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
147         assertEquals(action.getCookiesMap().get("cookie2"), "cookie2value");
148         assertEquals(action.getCookiesMap().get("cookie3"), "cookie3value");
149         assertEquals(action.getCookie1(), "cookie1value");
150         assertEquals(action.getCookie2(), "cookie2value");
151         assertEquals(action.getCookie3(), "cookie3value");
152         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value");
153         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), "cookie2value");
154         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), "cookie3value");
155     }
156 
157     public void testInterceptSelectedCookiesNameOnly1() throws Exception {
158         MockHttpServletRequest request = new MockHttpServletRequest();
159         request.setCookies(new Cookie[] {
160                 new Cookie("cookie1", "cookie1value"),
161                 new Cookie("cookie2", "cookie2value"),
162                 new Cookie("cookie3", "cookie3value")
163             });
164         ServletActionContext.setRequest(request);
165 
166         MockActionWithCookieAware action = new MockActionWithCookieAware();
167 
168         ActionContext.getContext().getValueStack().push(action);
169 
170         MockControl actionInvocationControl = MockControl.createControl(ActionInvocation.class);
171         ActionInvocation invocation = (ActionInvocation) actionInvocationControl.getMock();
172         actionInvocationControl.expectAndDefaultReturn(
173                                                        invocation.getAction(), action);
174         actionInvocationControl.expectAndDefaultReturn(
175                                                        invocation.invoke(), Action.SUCCESS);
176 
177         actionInvocationControl.replay();
178 
179         CookieInterceptor interceptor = new CookieInterceptor();
180         interceptor.setCookiesName("cookie1, cookie3");
181         interceptor.setCookiesValue("cookie1value, cookie2value, cookie3value");
182         interceptor.intercept(invocation);
183 
184         assertFalse(action.getCookiesMap().isEmpty());
185         assertEquals(action.getCookiesMap().size(), 2);
186         assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
187         assertEquals(action.getCookiesMap().get("cookie2"), null);
188         assertEquals(action.getCookiesMap().get("cookie3"), "cookie3value");
189         assertEquals(action.getCookie1(), "cookie1value");
190         assertEquals(action.getCookie2(), null);
191         assertEquals(action.getCookie3(), "cookie3value");
192         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value");
193         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), null);
194         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), "cookie3value");
195     }
196 
197     public void testInterceptSelectedCookiesNameOnly2() throws Exception {
198         MockHttpServletRequest request = new MockHttpServletRequest();
199         request.setCookies(new Cookie[] {
200                 new Cookie("cookie1", "cookie1value"),
201                 new Cookie("cookie2", "cookie2value"),
202                 new Cookie("cookie3", "cookie3value")
203             });
204         ServletActionContext.setRequest(request);
205 
206         MockActionWithCookieAware action = new MockActionWithCookieAware();
207 
208         ActionContext.getContext().getValueStack().push(action);
209 
210         MockControl actionInvocationControl = MockControl.createControl(ActionInvocation.class);
211         ActionInvocation invocation = (ActionInvocation) actionInvocationControl.getMock();
212         actionInvocationControl.expectAndDefaultReturn(
213                                                        invocation.getAction(), action);
214         actionInvocationControl.expectAndDefaultReturn(
215                                                        invocation.invoke(), Action.SUCCESS);
216 
217         actionInvocationControl.replay();
218 
219         CookieInterceptor interceptor = new CookieInterceptor();
220         interceptor.setCookiesName("cookie1, cookie3");
221         interceptor.setCookiesValue("*");
222         interceptor.intercept(invocation);
223 
224         assertFalse(action.getCookiesMap().isEmpty());
225         assertEquals(action.getCookiesMap().size(), 2);
226         assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
227         assertEquals(action.getCookiesMap().get("cookie2"), null);
228         assertEquals(action.getCookiesMap().get("cookie3"), "cookie3value");
229         assertEquals(action.getCookie1(), "cookie1value");
230         assertEquals(action.getCookie2(), null);
231         assertEquals(action.getCookie3(), "cookie3value");
232         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value");
233         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), null);
234         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), "cookie3value");
235     }
236 
237     public void testInterceptSelectedCookiesNameOnly3() throws Exception {
238         MockHttpServletRequest request = new MockHttpServletRequest();
239         request.setCookies(new Cookie[] {
240                 new Cookie("cookie1", "cookie1value"),
241                 new Cookie("cookie2", "cookie2value"),
242                 new Cookie("cookie3", "cookie3value")
243             });
244         ServletActionContext.setRequest(request);
245 
246         MockActionWithCookieAware action = new MockActionWithCookieAware();
247 
248         ActionContext.getContext().getValueStack().push(action);
249 
250         MockControl actionInvocationControl = MockControl.createControl(ActionInvocation.class);
251         ActionInvocation invocation = (ActionInvocation) actionInvocationControl.getMock();
252         actionInvocationControl.expectAndDefaultReturn(
253                                                        invocation.getAction(), action);
254         actionInvocationControl.expectAndDefaultReturn(
255                                                        invocation.invoke(), Action.SUCCESS);
256 
257         actionInvocationControl.replay();
258 
259         CookieInterceptor interceptor = new CookieInterceptor();
260         interceptor.setCookiesName("cookie1, cookie3");
261         interceptor.setCookiesValue("");
262         interceptor.intercept(invocation);
263 
264         assertFalse(action.getCookiesMap().isEmpty());
265         assertEquals(action.getCookiesMap().size(), 2);
266         assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
267         assertEquals(action.getCookiesMap().get("cookie2"), null);
268         assertEquals(action.getCookiesMap().get("cookie3"), "cookie3value");
269         assertEquals(action.getCookie1(), "cookie1value");
270         assertEquals(action.getCookie2(), null);
271         assertEquals(action.getCookie3(), "cookie3value");
272         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value");
273         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), null);
274         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), "cookie3value");
275     }
276 
277 
278     public void testInterceptSelectedCookiesNameAndValue() throws Exception {
279         MockHttpServletRequest request = new MockHttpServletRequest();
280         request.setCookies(new Cookie[] {
281                 new Cookie("cookie1", "cookie1value"),
282                 new Cookie("cookie2", "cookie2value"),
283                 new Cookie("cookie3", "cookie3value")
284             });
285         ServletActionContext.setRequest(request);
286 
287         MockActionWithCookieAware action = new MockActionWithCookieAware();
288 
289         ActionContext.getContext().getValueStack().push(action);
290 
291         MockControl actionInvocationControl = MockControl.createControl(ActionInvocation.class);
292         ActionInvocation invocation = (ActionInvocation) actionInvocationControl.getMock();
293         actionInvocationControl.expectAndDefaultReturn(
294                                                        invocation.getAction(), action);
295         actionInvocationControl.expectAndDefaultReturn(
296                                                        invocation.invoke(), Action.SUCCESS);
297 
298         actionInvocationControl.replay();
299 
300         CookieInterceptor interceptor = new CookieInterceptor();
301         interceptor.setCookiesName("cookie1, cookie3");
302         interceptor.setCookiesValue("cookie1value");
303         interceptor.intercept(invocation);
304 
305         assertFalse(action.getCookiesMap().isEmpty());
306         assertEquals(action.getCookiesMap().size(), 1);
307         assertEquals(action.getCookiesMap().get("cookie1"), "cookie1value");
308         assertEquals(action.getCookiesMap().get("cookie2"), null);
309         assertEquals(action.getCookiesMap().get("cookie3"), null);
310         assertEquals(action.getCookie1(), "cookie1value");
311         assertEquals(action.getCookie2(), null);
312         assertEquals(action.getCookie3(), null);
313         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie1"), "cookie1value");
314         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie2"), null);
315         assertEquals(ActionContext.getContext().getValueStack().findValue("cookie3"), null);
316     }
317 
318 
319     public static class MockActionWithCookieAware extends ActionSupport implements CookiesAware {
320 
321         private static final long serialVersionUID = -6202290616812813386L;
322 
323         private Map cookies = Collections.EMPTY_MAP;
324         private String cookie1;
325         private String cookie2;
326         private String cookie3;
327 
328         public void setCookiesMap(Map cookies) {
329             this.cookies = cookies;
330         }
331         public Map getCookiesMap() {
332             return this.cookies;
333         }
334 
335         public String getCookie1() { return cookie1; }
336         public void setCookie1(String cookie1) { this.cookie1 = cookie1; }
337 
338         public String getCookie2() { return cookie2; }
339         public void setCookie2(String cookie2) { this.cookie2 = cookie2; }
340 
341         public String getCookie3() { return cookie3; }
342         public void setCookie3(String cookie3) { this.cookie3 = cookie3; }
343     }
344 
345 }