KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > server > appserver > unit > ServerHopCookieRewriteTest


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

4 package com.tctest.server.appserver.unit;
5
6 import org.apache.commons.httpclient.HttpClient;
7
8 import com.tc.test.server.appserver.unit.AbstractAppServerTestCase;
9 import com.tc.test.server.util.HttpUtil;
10
11 import java.io.IOException JavaDoc;
12 import java.io.PrintWriter JavaDoc;
13 import java.net.URL JavaDoc;
14
15 import javax.servlet.http.HttpServlet JavaDoc;
16 import javax.servlet.http.HttpServletRequest JavaDoc;
17 import javax.servlet.http.HttpServletResponse JavaDoc;
18 import javax.servlet.http.HttpSession JavaDoc;
19
20 public final class ServerHopCookieRewriteTest extends AbstractAppServerTestCase {
21
22   public void testSessions() throws Exception JavaDoc {
23
24     startDsoServer();
25
26     HttpClient client = HttpUtil.createHttpClient();
27
28     int port0 = startAppServer(true).serverPort();
29     int port1 = startAppServer(true).serverPort();
30
31     URL JavaDoc url0 = new URL JavaDoc(createUrl(port0, ServerHopCookieRewriteTest.DsoPingPongServlet.class) + "?server=0");
32     URL JavaDoc url1 = new URL JavaDoc(createUrl(port1, ServerHopCookieRewriteTest.DsoPingPongServlet.class) + "?server=1");
33     URL JavaDoc url2 = new URL JavaDoc(createUrl(port0, ServerHopCookieRewriteTest.DsoPingPongServlet.class) + "?server=2");
34     assertEquals("OK", HttpUtil.getResponseBody(url0, client));
35     assertEquals("OK", HttpUtil.getResponseBody(url1, client));
36     assertEquals("OK", HttpUtil.getResponseBody(url2, client));
37   }
38
39   public static final class DsoPingPongServlet extends HttpServlet JavaDoc {
40
41     private static final String JavaDoc ATTR_NAME = "test-attribute";
42     private static final String JavaDoc SESS_ID = "session-id";
43
44     public void doGet(HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws IOException JavaDoc {
45       HttpSession JavaDoc session = request.getSession(true);
46       response.setContentType("text/html");
47       PrintWriter JavaDoc out = response.getWriter();
48
49       String JavaDoc serverParam = request.getParameter("server");
50       if ("0".equals(serverParam)) {
51         hit0(request, session, out);
52       } else if ("1".equals(serverParam)) {
53         hit1(request, session, out);
54       } else if ("2".equals(serverParam)) {
55         hit2(request, session, out);
56       } else {
57         out.print("unknown value for server param: " + serverParam);
58       }
59     }
60
61     private void hit1(HttpServletRequest JavaDoc req, HttpSession JavaDoc session, PrintWriter JavaDoc out) {
62       if (session.isNew()) {
63         out.print("session is new for server 1; sessionId=" + session.getId());
64       } else {
65         String JavaDoc value = (String JavaDoc) session.getAttribute(ATTR_NAME);
66         if (value == null) {
67           out.print("attribute is null");
68         } else {
69           if (!value.equals("0")) {
70             out.print("unexpected value: " + value);
71           }
72           final String JavaDoc oldKey = getKey((String JavaDoc) session.getAttribute(SESS_ID));
73           final String JavaDoc newKey = getKey(session.getId());
74           final String JavaDoc oldServerId = getServerId((String JavaDoc) session.getAttribute(SESS_ID));
75           final String JavaDoc newServerId = getServerId(session.getId());
76           if (!session.getId().equals(req.getRequestedSessionId()) && newKey.equals(oldKey)
77               && !newServerId.equals(oldServerId)) {
78             out.print("OK");
79           } else {
80             out.print("oldKey=" + oldKey + ",newKey=" + newKey + ",oldServerId=" + oldServerId + ",newServerId="
81                       + newServerId);
82           }
83         }
84       }
85     }
86
87     private String JavaDoc getServerId(String JavaDoc s) {
88       if (s == null || s.trim().length() == 0 || s.indexOf("!") == -1) return null;
89       return s.substring(s.indexOf("!") + 1);
90     }
91
92     private String JavaDoc getKey(String JavaDoc s) {
93       if (s == null || s.trim().length() == 0 || s.indexOf("!") == -1) return null;
94       return s.substring(0, s.indexOf("!"));
95     }
96
97     private void hit2(HttpServletRequest JavaDoc req, HttpSession JavaDoc session, PrintWriter JavaDoc out) {
98       if (session.isNew()) {
99         out.print("session is new for server 2; sessionId=" + session.getId());
100         return;
101       }
102
103       String JavaDoc value = (String JavaDoc) session.getAttribute(ATTR_NAME);
104       if (value == null) {
105         out.print("missing attribute");
106       }
107       value = (String JavaDoc) session.getAttribute(SESS_ID);
108       if (!session.getId().equals(req.getRequestedSessionId()) && session.getId().equals(value)) {
109         out.print("OK");
110       } else {
111         out.print("expected=" + session.getId() + ",got=" + value);
112       }
113     }
114
115     private void hit0(HttpServletRequest JavaDoc req, HttpSession JavaDoc session, PrintWriter JavaDoc out) {
116       if (!session.isNew()) {
117         out.print("session is not new for server 0; sessionId=" + session.getId());
118         return;
119       }
120
121       String JavaDoc value = (String JavaDoc) session.getAttribute(ATTR_NAME);
122       if (!session.getId().equals(req.getRequestedSessionId()) && value == null) {
123         out.print("OK");
124         session.setAttribute(ATTR_NAME, "0");
125         session.setAttribute(SESS_ID, session.getId());
126       } else {
127         out.print("attribute already exists: " + value);
128       }
129     }
130   }
131 }
132
Popular Tags