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