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.client.ContentExchange;
25 import org.eclipse.jetty.client.HttpClient;
26 import org.eclipse.jetty.http.HttpMethods;
27 import org.eclipse.jetty.servlet.ServletContextHandler;
28 import org.junit.Test;
29
30
31
32
33 public abstract class AbstractNewSessionTest
34 {
35 public abstract AbstractTestServer createServer(int port, int max, int scavenge);
36
37 public void pause(int scavenge)
38 {
39 try
40 {
41 Thread.sleep(scavenge * 2500L);
42 }
43 catch (InterruptedException e)
44 {
45 e.printStackTrace();
46 }
47 }
48
49 @Test
50 public void testNewSession() throws Exception
51 {
52 Random random = new Random(System.nanoTime());
53
54 String contextPath = "";
55 String servletMapping = "/server";
56 int port = random.nextInt(50000) + 10000;
57 int scavengePeriod = 3;
58 AbstractTestServer server = createServer(port, 1, scavengePeriod);
59 ServletContextHandler context = server.addContext(contextPath);
60 context.addServlet(TestServlet.class, servletMapping);
61 server.start();
62 try
63 {
64 HttpClient client = new HttpClient();
65 client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
66 client.start();
67 try
68 {
69 ContentExchange exchange = new ContentExchange(true);
70 exchange.setMethod(HttpMethods.GET);
71 exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=create");
72 client.send(exchange);
73 exchange.waitForDone();
74 assert exchange.getResponseStatus() == HttpServletResponse.SC_OK;
75 String sessionCookie = exchange.getResponseFields().getStringField("Set-Cookie");
76 assert sessionCookie != null;
77
78 sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
79
80
81 pause(scavengePeriod);
82
83
84
85 exchange = new ContentExchange(true);
86 exchange.setMethod(HttpMethods.GET);
87 exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=old-create");
88 exchange.getRequestFields().add("Cookie", sessionCookie);
89 client.send(exchange);
90 exchange.waitForDone();
91 assert exchange.getResponseStatus() == HttpServletResponse.SC_OK;
92 }
93 finally
94 {
95 client.stop();
96 }
97 }
98 finally
99 {
100 server.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 String action = request.getParameter("action");
110 if ("create".equals(action))
111 {
112 request.getSession(true);
113 }
114 else if ("old-create".equals(action))
115 {
116 request.getSession(true);
117 }
118 else
119 {
120 assert false;
121 }
122 }
123 }
124 }