1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.server.session;
20
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertTrue;
23
24 import java.io.IOException;
25 import java.io.PrintWriter;
26
27 import javax.servlet.ServletException;
28 import javax.servlet.http.HttpServlet;
29 import javax.servlet.http.HttpServletRequest;
30 import javax.servlet.http.HttpServletResponse;
31 import javax.servlet.http.HttpSession;
32
33 import org.eclipse.jetty.client.HttpClient;
34 import org.eclipse.jetty.client.api.ContentResponse;
35 import org.eclipse.jetty.client.api.Request;
36 import org.junit.Test;
37
38
39
40
41 public abstract class AbstractSessionMigrationTest
42 {
43 public abstract AbstractTestServer createServer (int port);
44
45 @Test
46 public void testSessionMigration() throws Exception
47 {
48 String contextPath = "";
49 String servletMapping = "/server";
50 AbstractTestServer server1 = createServer(0);
51 server1.addContext(contextPath).addServlet(TestServlet.class, servletMapping);
52
53 try
54 {
55 server1.start();
56 int port1=server1.getPort();
57
58 AbstractTestServer server2 = createServer(0);
59 server2.addContext(contextPath).addServlet(TestServlet.class, servletMapping);
60
61 try
62 {
63 server2.start();
64 int port2=server2.getPort();
65
66 HttpClient client = new HttpClient();
67 client.start();
68 try
69 {
70
71 int value = 1;
72 Request request1 = client.POST("http://localhost:" + port1 + contextPath + servletMapping + "?action=set&value=" + value);
73 ContentResponse response1 = request1.send();
74 assertEquals(HttpServletResponse.SC_OK,response1.getStatus());
75 String sessionCookie = response1.getHeaders().get("Set-Cookie");
76 assertTrue(sessionCookie != null);
77
78 sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
79
80
81
82 Request request2 = client.newRequest("http://localhost:" + port2 + contextPath + servletMapping + "?action=get");
83 request2.header("Cookie", sessionCookie);
84 ContentResponse response2 = request2.send();
85 assertEquals(HttpServletResponse.SC_OK,response2.getStatus());
86 String response = response2.getContentAsString();
87 assertEquals(response.trim(),String.valueOf(value)); }
88 finally
89 {
90 client.stop();
91 }
92 }
93 finally
94 {
95 server2.stop();
96 }
97 }
98 finally
99 {
100 server1.stop();
101 }
102 }
103
104 public static class TestServlet extends HttpServlet
105 {
106 @Override
107 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
108 {
109 doPost(request, response);
110 }
111
112 @Override
113 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
114 {
115 HttpSession session = request.getSession(false);
116
117 String action = request.getParameter("action");
118 if ("set".equals(action))
119 {
120 if (session == null) session = request.getSession(true);
121 int value = Integer.parseInt(request.getParameter("value"));
122 session.setAttribute("value", value);
123 PrintWriter writer = response.getWriter();
124 writer.println(value);
125 writer.flush();
126 }
127 else if ("get".equals(action))
128 {
129 int value = (Integer)session.getAttribute("value");
130 int x = session.getMaxInactiveInterval();
131 assertTrue(x > 0);
132 PrintWriter writer = response.getWriter();
133 writer.println(value);
134 writer.flush();
135 }
136 }
137 }
138 }