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