1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.eclipse.jetty.server.session;
21
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertTrue;
25 import static org.junit.Assert.assertNotNull;
26
27 import java.io.File;
28 import java.io.FileOutputStream;
29 import java.io.IOException;
30 import java.io.InputStream;
31 import java.lang.reflect.Proxy;
32 import java.net.URL;
33 import java.net.URLClassLoader;
34 import java.util.jar.JarFile;
35
36 import javax.servlet.ServletException;
37 import javax.servlet.http.HttpServlet;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
40 import javax.servlet.http.HttpSession;
41
42 import org.eclipse.jetty.client.HttpClient;
43 import org.eclipse.jetty.client.api.ContentResponse;
44 import org.eclipse.jetty.client.api.Request;
45 import org.eclipse.jetty.server.handler.ContextHandler;
46 import org.eclipse.jetty.servlet.ServletContextHandler;
47 import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
48 import org.eclipse.jetty.util.IO;
49 import org.eclipse.jetty.util.resource.JarResource;
50 import org.junit.Test;
51
52
53
54
55
56
57 public abstract class AbstractProxySerializationTest
58 {
59 public abstract AbstractTestServer createServer(int port, int max, int scavenge);
60
61 public abstract void customizeContext (ServletContextHandler c);
62
63
64
65
66
67
68 public void pause(int msec)
69 {
70 try
71 {
72 Thread.sleep(msec);
73 }
74 catch (InterruptedException e)
75 {
76 e.printStackTrace();
77 }
78 }
79
80 @Test
81 public void testProxySerialization() throws Exception
82 {
83 String contextPath = "";
84 String servletMapping = "/server";
85 int scavengePeriod = 10;
86 AbstractTestServer server = createServer(0, 20, scavengePeriod);
87 ServletContextHandler context = server.addContext(contextPath);
88
89 InputStream is = this.getClass().getClassLoader().getResourceAsStream("proxy-serialization.jar");
90
91 File testDir = MavenTestingUtils.getTargetTestingDir("proxy-serialization");
92 testDir.mkdirs();
93
94 File extractedJar = new File (testDir, "proxy-serialization.jar");
95 extractedJar.createNewFile();
96 IO.copy(is, new FileOutputStream(extractedJar));
97
98
99 URLClassLoader loader = new URLClassLoader(new URL[] {extractedJar.toURI().toURL()}, Thread.currentThread().getContextClassLoader());
100 context.setClassLoader(loader);
101 context.addServlet("TestServlet", servletMapping);
102 customizeContext(context);
103
104 try
105 {
106 server.start();
107 int port=server.getPort();
108 HttpClient client = new HttpClient();
109 client.start();
110 try
111 {
112 ContentResponse response = client.GET("http://localhost:" + port + contextPath + servletMapping + "?action=create");
113 assertEquals(HttpServletResponse.SC_OK,response.getStatus());
114 String sessionCookie = response.getHeaders().getStringField("Set-Cookie");
115 assertTrue(sessionCookie != null);
116
117 sessionCookie = sessionCookie.replaceFirst("(\\W)(P|p)ath=", "$1\\$Path=");
118
119
120 context.stop();
121
122
123 context.setClassLoader(loader);
124 context.addServlet("TestServlet", servletMapping);
125
126
127 context.start();
128
129
130 Request request = client.newRequest("http://localhost:" + port + contextPath + servletMapping + "?action=test");
131 request.header("Cookie", sessionCookie);
132 response = request.send();
133 assertEquals(HttpServletResponse.SC_OK,response.getStatus());
134 }
135 finally
136 {
137 client.stop();
138 }
139 }
140 finally
141 {
142 server.stop();
143 }
144
145 }
146 }