1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.jetty.server.session;
15
16 import java.io.IOException;
17 import java.util.Random;
18
19 import javax.servlet.ServletException;
20 import javax.servlet.http.HttpServlet;
21 import javax.servlet.http.HttpServletRequest;
22 import javax.servlet.http.HttpServletResponse;
23
24 import org.eclipse.jetty.http.HttpMethods;
25 import org.eclipse.jetty.servlet.ServletContextHandler;
26 import org.eclipse.jetty.client.ContentExchange;
27 import org.eclipse.jetty.client.HttpClient;
28 import org.testng.annotations.Test;
29
30
31
32
33
34
35
36 public abstract class AbstractNewSessionTest
37 {
38 public abstract AbstractTestServer createServer(int port, int max, int scavenge);
39
40 public void pause(int scavenge)
41 {
42 try
43 {
44 Thread.sleep(scavenge * 2500L);
45 }
46 catch (InterruptedException e)
47 {
48 e.printStackTrace();
49 }
50 }
51 @Test
52 public void testNewSession() throws Exception
53 {
54 Random random = new Random(System.nanoTime());
55
56 String contextPath = "";
57 String servletMapping = "/server";
58 int port = random.nextInt(50000) + 10000;
59 int scavengePeriod = 3;
60 AbstractTestServer server = createServer(port, 1, scavengePeriod);
61 ServletContextHandler context = server.addContext(contextPath);
62 context.addServlet(TestServlet.class, servletMapping);
63 server.start();
64 try
65 {
66 HttpClient client = new HttpClient();
67 client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
68 client.start();
69 try
70 {
71 ContentExchange exchange = new ContentExchange(true);
72 exchange.setMethod(HttpMethods.GET);
73 exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=create");
74 client.send(exchange);
75 exchange.waitForDone();
76 assert exchange.getResponseStatus() == HttpServletResponse.SC_OK;
77 String sessionCookie = exchange.getResponseFields().getStringField("Set-Cookie");
78 assert sessionCookie != null;
79
80 sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
81
82
83 pause(scavengePeriod);
84
85
86
87 exchange = new ContentExchange(true);
88 exchange.setMethod(HttpMethods.GET);
89 exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=old-create");
90 exchange.getRequestFields().add("Cookie", sessionCookie);
91 client.send(exchange);
92 exchange.waitForDone();
93 assert exchange.getResponseStatus() == HttpServletResponse.SC_OK;
94 }
95 finally
96 {
97 client.stop();
98 }
99 }
100 finally
101 {
102 server.stop();
103 }
104
105 }
106 public static class TestServlet extends HttpServlet
107 {
108 @Override
109 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
110 {
111 String action = request.getParameter("action");
112 if ("create".equals(action))
113 {
114 request.getSession(true);
115 }
116 else if ("old-create".equals(action))
117 {
118 request.getSession(true);
119 }
120 else
121 {
122 assert false;
123 }
124 }
125 }
126 }