1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.servlet;
20
21 import java.net.InetAddress;
22 import java.nio.ByteBuffer;
23 import java.util.EnumSet;
24 import java.util.Enumeration;
25 import java.util.Map;
26 import java.util.concurrent.TimeUnit;
27
28 import javax.servlet.DispatcherType;
29 import javax.servlet.Filter;
30 import javax.servlet.Servlet;
31
32 import org.eclipse.jetty.server.Connector;
33 import org.eclipse.jetty.server.LocalConnector;
34 import org.eclipse.jetty.server.Server;
35 import org.eclipse.jetty.server.ServerConnector;
36 import org.eclipse.jetty.util.Attributes;
37 import org.eclipse.jetty.util.BufferUtil;
38 import org.eclipse.jetty.util.component.ContainerLifeCycle;
39 import org.eclipse.jetty.util.log.Log;
40 import org.eclipse.jetty.util.log.Logger;
41 import org.eclipse.jetty.util.resource.Resource;
42
43 public class ServletTester extends ContainerLifeCycle
44 {
45 private static final Logger LOG = Log.getLogger(ServletTester.class);
46
47 private final Server _server=new Server();
48 private final LocalConnector _connector=new LocalConnector(_server);
49 private final ServletContextHandler _context;
50
51 public Server getServer()
52 {
53 return _server;
54 }
55
56 public LocalConnector getConnector()
57 {
58 return _connector;
59 }
60
61 public void setVirtualHosts(String[] vhosts)
62 {
63 _context.setVirtualHosts(vhosts);
64 }
65
66 public void addVirtualHosts(String[] virtualHosts)
67 {
68 _context.addVirtualHosts(virtualHosts);
69 }
70
71 public ServletHolder addServlet(String className, String pathSpec)
72 {
73 return _context.addServlet(className,pathSpec);
74 }
75
76 public ServletHolder addServlet(Class<? extends Servlet> servlet, String pathSpec)
77 {
78 return _context.addServlet(servlet,pathSpec);
79 }
80
81 public void addServlet(ServletHolder servlet, String pathSpec)
82 {
83 _context.addServlet(servlet,pathSpec);
84 }
85
86 public void addFilter(FilterHolder holder, String pathSpec, EnumSet<DispatcherType> dispatches)
87 {
88 _context.addFilter(holder,pathSpec,dispatches);
89 }
90
91 public FilterHolder addFilter(Class<? extends Filter> filterClass, String pathSpec, EnumSet<DispatcherType> dispatches)
92 {
93 return _context.addFilter(filterClass,pathSpec,dispatches);
94 }
95
96 public FilterHolder addFilter(String filterClass, String pathSpec, EnumSet<DispatcherType> dispatches)
97 {
98 return _context.addFilter(filterClass,pathSpec,dispatches);
99 }
100
101 public Object getAttribute(String name)
102 {
103 return _context.getAttribute(name);
104 }
105
106 public Enumeration<String> getAttributeNames()
107 {
108 return _context.getAttributeNames();
109 }
110
111 public Attributes getAttributes()
112 {
113 return _context.getAttributes();
114 }
115
116 public String getContextPath()
117 {
118 return _context.getContextPath();
119 }
120
121 public String getInitParameter(String name)
122 {
123 return _context.getInitParameter(name);
124 }
125
126 public String setInitParameter(String name, String value)
127 {
128 return _context.setInitParameter(name,value);
129 }
130
131 public Enumeration<String> getInitParameterNames()
132 {
133 return _context.getInitParameterNames();
134 }
135
136 public Map<String, String> getInitParams()
137 {
138 return _context.getInitParams();
139 }
140
141 public void removeAttribute(String name)
142 {
143 _context.removeAttribute(name);
144 }
145
146 public void setAttribute(String name, Object value)
147 {
148 _context.setAttribute(name,value);
149 }
150
151 public void setContextPath(String contextPath)
152 {
153 _context.setContextPath(contextPath);
154 }
155
156 public Resource getBaseResource()
157 {
158 return _context.getBaseResource();
159 }
160
161 public String getResourceBase()
162 {
163 return _context.getResourceBase();
164 }
165
166 public void setResourceBase(String resourceBase)
167 {
168 _context.setResourceBase(resourceBase);
169 }
170
171 public ServletTester()
172 {
173 this("/",ServletContextHandler.SECURITY|ServletContextHandler.SESSIONS);
174 }
175
176 public ServletTester(String ctxPath)
177 {
178 this(ctxPath,ServletContextHandler.SECURITY|ServletContextHandler.SESSIONS);
179 }
180
181 public ServletTester(String contextPath,int options)
182 {
183 _context=new ServletContextHandler(_server,contextPath,options);
184 _server.setConnectors(new Connector[]{_connector});
185 addBean(_server);
186 }
187
188 public ServletContextHandler getContext()
189 {
190 return _context;
191 }
192
193 public String getResponses(String request) throws Exception
194 {
195 if (LOG.isDebugEnabled())
196 {
197 LOG.debug("Request: {}",request);
198 }
199 return _connector.getResponses(request);
200 }
201
202 public String getResponses(String request, long idleFor,TimeUnit units) throws Exception
203 {
204 if (LOG.isDebugEnabled())
205 {
206 LOG.debug("Request: {}",request);
207 }
208 return _connector.getResponses(request, idleFor, units);
209 }
210
211 public ByteBuffer getResponses(ByteBuffer request) throws Exception
212 {
213 if (LOG.isDebugEnabled())
214 {
215 LOG.debug("Request (Buffer): {}",BufferUtil.toUTF8String(request));
216 }
217 return _connector.getResponses(request);
218 }
219
220 public ByteBuffer getResponses(ByteBuffer requestsBuffer,long idleFor,TimeUnit units) throws Exception
221 {
222 if (LOG.isDebugEnabled())
223 {
224 LOG.debug("Requests (Buffer): {}",BufferUtil.toUTF8String(requestsBuffer));
225 }
226 return _connector.getResponses(requestsBuffer, idleFor, units);
227 }
228
229
230
231
232
233
234 public String createConnector(boolean localhost) throws Exception
235 {
236 ServerConnector connector = new ServerConnector(_server);
237 if (localhost)
238 connector.setHost("127.0.0.1");
239 _server.addConnector(connector);
240 if (_server.isStarted())
241 connector.start();
242 else
243 connector.open();
244
245 return "http://"+(localhost?"127.0.0.1":
246 InetAddress.getLocalHost().getHostAddress()
247 )+":"+connector.getLocalPort();
248 }
249
250 public LocalConnector createLocalConnector()
251 {
252 LocalConnector connector = new LocalConnector(_server);
253 _server.addConnector(connector);
254 return connector;
255 }
256
257
258
259 }