1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.application.viewstate;
20
21 import java.io.ByteArrayInputStream;
22 import java.io.ByteArrayOutputStream;
23 import java.io.ObjectInputStream;
24 import java.io.ObjectOutputStream;
25 import java.util.Map;
26 import javax.faces.application.ProjectStage;
27 import javax.faces.application.StateManager;
28
29 import org.apache.myfaces.application.StateCache;
30 import org.apache.myfaces.test.base.junit4.AbstractJsfConfigurableMultipleRequestsTestCase;
31 import org.junit.Test;
32 import org.testng.Assert;
33
34 public class ServerSideStateCacheTest extends AbstractJsfConfigurableMultipleRequestsTestCase
35 {
36
37 @Test
38 public void testNumberOfSequentialViewsInSession() throws Exception
39 {
40 servletContext.addInitParameter(StateManager.STATE_SAVING_METHOD_PARAM_NAME, StateManager.STATE_SAVING_METHOD_SERVER);
41 servletContext.addInitParameter("org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION", "5");
42 servletContext.addInitParameter("org.apache.myfaces.NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION", "2");
43 servletContext.addInitParameter(StateManager.SERIALIZE_SERVER_STATE_PARAM_NAME, "true");
44
45
46 setupRequest();
47 StateCache stateCache = new ServerSideStateCacheImpl();
48 tearDownRequest();
49
50 Object savedToken;
51 Object firstSavedToken;
52
53 try
54 {
55 setupRequest();
56
57 facesContext.getViewRoot().setViewId("view1.xhtml");
58 savedToken = stateCache.saveSerializedView(facesContext, 1);
59 firstSavedToken = savedToken;
60 }
61 finally
62 {
63 tearDownRequest();
64 }
65
66 try
67 {
68 setupRequest();
69
70 Object value = stateCache.restoreSerializedView(facesContext, "view1.xhtml", savedToken);
71
72 Assert.assertEquals(1, value);
73
74 facesContext.getViewRoot().setViewId("view2.xhtml");
75 savedToken = stateCache.saveSerializedView(facesContext, 2);
76 }
77 finally
78 {
79 tearDownRequest();
80 }
81
82 try
83 {
84 setupRequest();
85
86 Object value = stateCache.restoreSerializedView(facesContext, "view2.xhtml", savedToken);
87
88 Assert.assertEquals(2, value);
89
90 facesContext.getViewRoot().setViewId("view2.xhtml");
91 savedToken = stateCache.saveSerializedView(facesContext, 3);
92 }
93 finally
94 {
95 tearDownRequest();
96 }
97
98 try
99 {
100 setupRequest();
101
102 Object value = stateCache.restoreSerializedView(facesContext, "view1.xhtml", firstSavedToken);
103
104
105 Assert.assertNull(value);
106 }
107 finally
108 {
109 tearDownRequest();
110 }
111 }
112
113 @Test
114 public void testSaveRestoreStateWrongViewId() throws Exception
115 {
116 servletContext.addInitParameter(StateManager.STATE_SAVING_METHOD_PARAM_NAME, StateManager.STATE_SAVING_METHOD_SERVER);
117
118
119 setupRequest();
120 StateCache stateCache = new ClientSideStateCacheImpl();
121 tearDownRequest();
122
123 Object savedToken;
124 Object firstSavedToken;
125
126 try
127 {
128 setupRequest();
129
130 facesContext.getViewRoot().setViewId("/view1.xhtml");
131 savedToken = stateCache.saveSerializedView(facesContext, 1);
132 firstSavedToken = savedToken;
133 }
134 finally
135 {
136 tearDownRequest();
137 }
138
139 try
140 {
141 setupRequest();
142
143
144
145
146
147 Object value = stateCache.restoreSerializedView(facesContext, "/view2.xhtml", firstSavedToken);
148
149 Assert.assertNull(value);
150 }
151 finally
152 {
153 tearDownRequest();
154 }
155
156 try
157 {
158 setupRequest();
159
160
161 Object value = stateCache.restoreSerializedView(facesContext, "/view1.xhtml", firstSavedToken);
162
163 Assert.assertEquals(1, value);
164 }
165 finally
166 {
167 tearDownRequest();
168 }
169
170 }
171
172 @Test
173 public void testNonExistingViewId() throws Exception
174 {
175 servletContext.addInitParameter(StateManager.STATE_SAVING_METHOD_PARAM_NAME, StateManager.STATE_SAVING_METHOD_SERVER);
176 servletContext.addInitParameter("org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION", "5");
177 servletContext.addInitParameter("org.apache.myfaces.NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION", "2");
178
179
180 servletContext.addInitParameter("faces.PROJECT_STAGE", "Production");
181
182 try
183 {
184
185 setupRequest();
186
187
188 facesContext.getViewRoot().setViewId(null);
189
190 StateCache stateCache = new ServerSideStateCacheImpl();
191 Object savedToken = stateCache.saveSerializedView(facesContext, 1);
192
193 }
194 finally
195 {
196 tearDownRequest();
197 }
198
199 }
200
201 public void tryStateKeySerialization() throws Exception
202 {
203
204 setupRequest();
205 StateCache stateCache = new ServerSideStateCacheImpl();
206 tearDownRequest();
207
208 Object savedToken;
209 Object firstSavedToken;
210
211 try
212 {
213 setupRequest();
214 facesContext.getViewRoot().setViewId("view1.xhtml");
215 savedToken = stateCache.saveSerializedView(facesContext, 1);
216 firstSavedToken = savedToken;
217
218 for (Map.Entry<String, Object> entry : facesContext.getExternalContext().getSessionMap().entrySet())
219 {
220 ByteArrayOutputStream baos = new ByteArrayOutputStream(128);
221 ObjectOutputStream oos = new ObjectOutputStream(baos);
222 oos.writeObject(entry.getValue());
223 oos.flush();
224 baos.flush();
225 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
226 ObjectInputStream ois = new ObjectInputStream(bais);
227 Object blorg = ois.readObject();
228 }
229 }
230 finally
231 {
232 tearDownRequest();
233 }
234 }
235
236 @Test
237 public void testStateKeySerialization1() throws Exception
238 {
239 servletContext.addInitParameter(StateManager.STATE_SAVING_METHOD_PARAM_NAME, StateManager.STATE_SAVING_METHOD_SERVER);
240 servletContext.addInitParameter("org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION", "5");
241 servletContext.addInitParameter("org.apache.myfaces.NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION", "2");
242 servletContext.addInitParameter(ProjectStage.PROJECT_STAGE_PARAM_NAME, ProjectStage.Production.toString());
243
244 tryStateKeySerialization();
245 }
246
247 @Test
248 public void testStateKeySerialization2() throws Exception
249 {
250 servletContext.addInitParameter(StateManager.STATE_SAVING_METHOD_PARAM_NAME, StateManager.STATE_SAVING_METHOD_SERVER);
251 servletContext.addInitParameter("org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION", "5");
252 servletContext.addInitParameter("org.apache.myfaces.NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION", "2");
253 servletContext.addInitParameter(ProjectStage.PROJECT_STAGE_PARAM_NAME, ProjectStage.Production.toString());
254 servletContext.addInitParameter("org.apache.myfaces.RANDOM_KEY_IN_VIEW_STATE_SESSION_TOKEN", "random");
255
256 tryStateKeySerialization();
257 }
258
259 @Test
260 public void testStateKeySerialization3() throws Exception
261 {
262 servletContext.addInitParameter(StateManager.STATE_SAVING_METHOD_PARAM_NAME, StateManager.STATE_SAVING_METHOD_SERVER);
263 servletContext.addInitParameter("org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION", "5");
264 servletContext.addInitParameter("org.apache.myfaces.NUMBER_OF_SEQUENTIAL_VIEWS_IN_SESSION", "2");
265 servletContext.addInitParameter(ProjectStage.PROJECT_STAGE_PARAM_NAME, ProjectStage.Development.toString());
266
267 tryStateKeySerialization();
268 }
269
270 }