1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.terracotta.servlet;
16
17 import java.io.IOException;
18 import java.io.PrintWriter;
19
20 import javax.servlet.ServletException;
21 import javax.servlet.http.HttpServlet;
22 import javax.servlet.http.HttpServletRequest;
23 import javax.servlet.http.HttpServletResponse;
24 import javax.servlet.http.HttpSession;
25
26 import org.mortbay.jetty.HttpMethods;
27 import org.mortbay.jetty.client.ContentExchange;
28 import org.mortbay.jetty.client.HttpClient;
29
30
31
32
33 public class SessionMigrationTest
34 {
35 public static void main(String[] args) throws Exception
36 {
37 new SessionMigrationTest().testSessionMigration();
38 }
39
40 public void testSessionMigration() throws Exception
41 {
42 String contextPath = "";
43 String servletMapping = "/server";
44 int port1 = 8080;
45 TerracottaJettyServer server1 = new TerracottaJettyServer(port1);
46 server1.addContext(contextPath).addServlet(TestServlet.class, servletMapping);
47 server1.start();
48 try
49 {
50 int port2 = 8181;
51 TerracottaJettyServer server2 = new TerracottaJettyServer(port2);
52 server2.addContext(contextPath).addServlet(TestServlet.class, servletMapping);
53 server2.start();
54 try
55 {
56 HttpClient client = new HttpClient();
57 client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
58 client.start();
59 try
60 {
61
62 int value = 1;
63 ContentExchange exchange1 = new ContentExchange(true);
64 exchange1.setMethod(HttpMethods.POST);
65 exchange1.setURL("http://localhost:" + port1 + contextPath + servletMapping + "?action=set&value=" + value);
66 client.send(exchange1);
67 exchange1.waitForDone();
68 assert exchange1.getResponseStatus() == HttpServletResponse.SC_OK;
69 String sessionCookie = exchange1.getResponseFields().getStringField("Set-Cookie");
70 assert sessionCookie != null;
71
72
73
74 ContentExchange exchange2 = new ContentExchange(true);
75 exchange2.setMethod(HttpMethods.GET);
76 exchange2.setURL("http://localhost:" + port2 + contextPath + servletMapping + "?action=get");
77 exchange2.getRequestFields().add("Cookie", sessionCookie);
78 client.send(exchange2);
79 exchange2.waitForDone();
80 assert exchange2.getResponseStatus() == HttpServletResponse.SC_OK;
81 String response = exchange2.getResponseContent();
82 assert response.trim().equals(String.valueOf(value));
83 }
84 finally
85 {
86 client.stop();
87 }
88 }
89 finally
90 {
91 server2.stop();
92 }
93 }
94 finally
95 {
96 server1.stop();
97 }
98 }
99
100 public static class TestServlet extends HttpServlet
101 {
102 @Override
103 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
104 {
105 doPost(request, response);
106 }
107
108 @Override
109 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
110 {
111 HttpSession session = request.getSession(false);
112 if (session == null) session = request.getSession(true);
113
114 String action = request.getParameter("action");
115 if ("set".equals(action))
116 {
117 int value = Integer.parseInt(request.getParameter("value"));
118 session.setAttribute("value", value);
119 PrintWriter writer = response.getWriter();
120 writer.println(value);
121 writer.flush();
122 }
123 else if ("get".equals(action))
124 {
125 int value = (Integer)session.getAttribute("value");
126 PrintWriter writer = response.getWriter();
127 writer.println(value);
128 writer.flush();
129 }
130 }
131 }
132 }