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
26 import javax.servlet.ServletException;
27 import javax.servlet.http.HttpServlet;
28 import javax.servlet.http.HttpServletRequest;
29 import javax.servlet.http.HttpServletResponse;
30 import javax.servlet.http.HttpSession;
31
32 import org.eclipse.jetty.client.HttpClient;
33 import org.eclipse.jetty.client.api.ContentResponse;
34 import org.eclipse.jetty.client.api.Request;
35 import org.eclipse.jetty.servlet.ServletContextHandler;
36 import org.junit.Test;
37
38
39
40
41 public abstract class AbstractNewSessionTest
42 {
43 public abstract AbstractTestServer createServer(int port, int max, int scavenge);
44
45 public void pause(int scavenge)
46 {
47 try
48 {
49 Thread.sleep(scavenge * 2500L);
50 }
51 catch (InterruptedException e)
52 {
53 e.printStackTrace();
54 }
55 }
56
57 @Test
58 public void testNewSession() throws Exception
59 {
60 String servletMapping = "/server";
61 int scavengePeriod = 3;
62 AbstractTestServer server = createServer(0, 1, scavengePeriod);
63 ServletContextHandler context = server.addContext("/");
64 context.addServlet(TestServlet.class, servletMapping);
65 String contextPath = "";
66
67 try
68 {
69 server.start();
70 int port=server.getPort();
71 HttpClient client = new HttpClient();
72 client.start();
73 try
74 {
75 ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
76 assertEquals(HttpServletResponse.SC_OK,response.getStatus());
77 String sessionCookie = response.getHeaders().get("Set-Cookie");
78 assertTrue(sessionCookie != null);
79
80 sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
81
82
83 pause(scavengePeriod);
84
85
86
87 Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=old-create");
88 request.header("Cookie", sessionCookie);
89 response = request.send();
90 assertEquals(HttpServletResponse.SC_OK,response.getStatus());
91 }
92 finally
93 {
94 client.stop();
95 }
96 }
97 finally
98 {
99 server.stop();
100 }
101
102 }
103 public static class TestServlet extends HttpServlet
104 {
105 @Override
106 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
107 {
108 String action = request.getParameter("action");
109 if ("create".equals(action))
110 {
111 HttpSession session = request.getSession(true);
112 assertTrue(session.isNew());
113 }
114 else if ("old-create".equals(action))
115 {
116 request.getSession(true);
117 }
118 else
119 {
120 assertTrue(false);
121 }
122 }
123 }
124 }