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 import javax.servlet.http.HttpSession;
24
25 import org.eclipse.jetty.client.ContentExchange;
26 import org.eclipse.jetty.client.HttpClient;
27 import org.eclipse.jetty.http.HttpMethods;
28 import org.junit.Test;
29 import static org.junit.Assert.assertEquals;
30 import static org.junit.Assert.assertTrue;
31
32
33
34
35
36 public abstract class AbstractReentrantRequestSessionTest
37 {
38 public abstract AbstractTestServer createServer(int port);
39
40 @Test
41 public void testReentrantRequestSession() throws Exception
42 {
43 String contextPath = "";
44 String servletMapping = "/server";
45 AbstractTestServer server = createServer(0);
46 server.addContext(contextPath).addServlet(TestServlet.class, servletMapping);
47 server.start();
48 int port = server.getPort();
49 try
50 {
51 HttpClient client = new HttpClient();
52 client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
53 client.start();
54 try
55 {
56 ContentExchange exchange = new ContentExchange(true);
57 exchange.setMethod(HttpMethods.GET);
58 exchange.setURL("http://localhost:" + port + contextPath + servletMapping + "?action=reenter&port=" + port + "&path=" + contextPath + servletMapping);
59 client.send(exchange);
60 exchange.waitForDone();
61 assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
62 }
63 finally
64 {
65 client.stop();
66 }
67 }
68 finally
69 {
70 server.stop();
71 }
72 }
73
74 public static class TestServlet extends HttpServlet
75 {
76 @Override
77 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
78 {
79 doPost(request, response);
80 }
81
82 @Override
83 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
84 {
85 HttpSession session = request.getSession(false);
86 if (session == null) session = request.getSession(true);
87
88 String action = request.getParameter("action");
89 if ("reenter".equals(action))
90 {
91 int port = Integer.parseInt(request.getParameter("port"));
92 String path = request.getParameter("path");
93
94
95
96
97 try
98 {
99 HttpClient client = new HttpClient();
100 client.setConnectorType(HttpClient.CONNECTOR_SOCKET);
101 client.start();
102 try
103 {
104 ContentExchange exchange = new ContentExchange(true);
105 exchange.setMethod(HttpMethods.GET);
106 exchange.setURL("http://localhost:" + port + path + "?action=none");
107 client.send(exchange);
108 exchange.waitForDone();
109 assertEquals(HttpServletResponse.SC_OK,exchange.getResponseStatus());
110 }
111 finally
112 {
113 client.stop();
114 }
115 }
116 catch (Exception x)
117 {
118 throw new ServletException(x);
119 }
120 }
121 else
122 {
123
124 }
125 }
126 }
127 }