1 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 ; 12 import java.io.PrintWriter ; 13 import java.net.URL ; 14 15 import javax.servlet.http.HttpServlet ; 16 import javax.servlet.http.HttpServletRequest ; 17 import javax.servlet.http.HttpServletResponse ; 18 import javax.servlet.http.HttpSession ; 19 20 public final class ServerHopCookieRewriteTest extends AbstractAppServerTestCase { 21 22 public void testSessions() throws Exception { 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 url0 = new URL (createUrl(port0, ServerHopCookieRewriteTest.DsoPingPongServlet.class) + "?server=0"); 32 URL url1 = new URL (createUrl(port1, ServerHopCookieRewriteTest.DsoPingPongServlet.class) + "?server=1"); 33 URL url2 = new URL (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 { 40 41 private static final String ATTR_NAME = "test-attribute"; 42 private static final String SESS_ID = "session-id"; 43 44 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 45 HttpSession session = request.getSession(true); 46 response.setContentType("text/html"); 47 PrintWriter out = response.getWriter(); 48 49 String 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 req, HttpSession session, PrintWriter out) { 62 if (session.isNew()) { 63 out.print("session is new for server 1; sessionId=" + session.getId()); 64 } else { 65 String value = (String ) 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 oldKey = getKey((String ) session.getAttribute(SESS_ID)); 73 final String newKey = getKey(session.getId()); 74 final String oldServerId = getServerId((String ) session.getAttribute(SESS_ID)); 75 final String 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 getServerId(String 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 getKey(String 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 req, HttpSession session, PrintWriter out) { 98 if (session.isNew()) { 99 out.print("session is new for server 2; sessionId=" + session.getId()); 100 return; 101 } 102 103 String value = (String ) session.getAttribute(ATTR_NAME); 104 if (value == null) { 105 out.print("missing attribute"); 106 } 107 value = (String ) 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 req, HttpSession session, PrintWriter out) { 116 if (!session.isNew()) { 117 out.print("session is not new for server 0; sessionId=" + session.getId()); 118 return; 119 } 120 121 String value = (String ) 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 |