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