2 // ========================================================================
3 // Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
4 // ------------------------------------------------------------------------
5 // All rights reserved. This program and the accompanying materials
6 // are made available under the terms of the Eclipse Public License v1.0
7 // and Apache License v2.0 which accompanies this distribution.
9 // The Eclipse Public License is available at
10 // http://www.eclipse.org/legal/epl-v10.html
12 // The Apache License v2.0 is available at
13 // http://www.opensource.org/licenses/apache2.0.php
15 // You may elect to redistribute this code under either of these licenses.
16 // ========================================================================
19 package org.eclipse.jetty.servlet;
21 import java.net.InetAddress;
22 import java.nio.ByteBuffer;
23 import java.util.EnumSet;
24 import java.util.Enumeration;
26 import java.util.concurrent.TimeUnit;
28 import javax.servlet.DispatcherType;
29 import javax.servlet.Filter;
30 import javax.servlet.Servlet;
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;
43 public class ServletTester extends ContainerLifeCycle
45 private static final Logger LOG = Log.getLogger(ServletTester.class);
47 private final Server _server=new Server();
48 private final LocalConnector _connector=new LocalConnector(_server);
49 private final ServletContextHandler _context;
51 public Server getServer()
56 public LocalConnector getConnector()
61 public void setVirtualHosts(String[] vhosts)
63 _context.setVirtualHosts(vhosts);
66 public void addVirtualHosts(String[] virtualHosts)
68 _context.addVirtualHosts(virtualHosts);
71 public ServletHolder addServlet(String className, String pathSpec)
73 return _context.addServlet(className,pathSpec);
76 public ServletHolder addServlet(Class<? extends Servlet> servlet, String pathSpec)
78 return _context.addServlet(servlet,pathSpec);
81 public void addServlet(ServletHolder servlet, String pathSpec)
83 _context.addServlet(servlet,pathSpec);
86 public void addFilter(FilterHolder holder, String pathSpec, EnumSet<DispatcherType> dispatches)
88 _context.addFilter(holder,pathSpec,dispatches);
91 public FilterHolder addFilter(Class<? extends Filter> filterClass, String pathSpec, EnumSet<DispatcherType> dispatches)
93 return _context.addFilter(filterClass,pathSpec,dispatches);
96 public FilterHolder addFilter(String filterClass, String pathSpec, EnumSet<DispatcherType> dispatches)
98 return _context.addFilter(filterClass,pathSpec,dispatches);
101 public Object getAttribute(String name)
103 return _context.getAttribute(name);
106 public Enumeration<String> getAttributeNames()
108 return _context.getAttributeNames();
111 public Attributes getAttributes()
113 return _context.getAttributes();
116 public String getContextPath()
118 return _context.getContextPath();
121 public String getInitParameter(String name)
123 return _context.getInitParameter(name);
126 public String setInitParameter(String name, String value)
128 return _context.setInitParameter(name,value);
131 public Enumeration<String> getInitParameterNames()
133 return _context.getInitParameterNames();
136 public Map<String, String> getInitParams()
138 return _context.getInitParams();
141 public void removeAttribute(String name)
143 _context.removeAttribute(name);
146 public void setAttribute(String name, Object value)
148 _context.setAttribute(name,value);
151 public void setContextPath(String contextPath)
153 _context.setContextPath(contextPath);
156 public Resource getBaseResource()
158 return _context.getBaseResource();
161 public String getResourceBase()
163 return _context.getResourceBase();
166 public void setResourceBase(String resourceBase)
168 _context.setResourceBase(resourceBase);
171 public ServletTester()
173 this("/",ServletContextHandler.SECURITY|ServletContextHandler.SESSIONS);
176 public ServletTester(String ctxPath)
178 this(ctxPath,ServletContextHandler.SECURITY|ServletContextHandler.SESSIONS);
181 public ServletTester(String contextPath,int options)
183 _context=new ServletContextHandler(_server,contextPath,options);
184 _server.setConnectors(new Connector[]{_connector});
188 public ServletContextHandler getContext()
193 public String getResponses(String request) throws Exception
195 if (LOG.isDebugEnabled())
197 LOG.debug("Request: {}",request);
199 return _connector.getResponses(request);
202 public String getResponses(String request, long idleFor,TimeUnit units) throws Exception
204 if (LOG.isDebugEnabled())
206 LOG.debug("Request: {}",request);
208 return _connector.getResponses(request, idleFor, units);
211 public ByteBuffer getResponses(ByteBuffer request) throws Exception
213 if (LOG.isDebugEnabled())
215 LOG.debug("Request (Buffer): {}",BufferUtil.toUTF8String(request));
217 return _connector.getResponses(request);
220 public ByteBuffer getResponses(ByteBuffer requestsBuffer,long idleFor,TimeUnit units) throws Exception
222 if (LOG.isDebugEnabled())
224 LOG.debug("Requests (Buffer): {}",BufferUtil.toUTF8String(requestsBuffer));
226 return _connector.getResponses(requestsBuffer, idleFor, units);
229 /** Create a port based connector.
230 * This methods adds a port connector to the server
231 * @return A URL to access the server via the connector.
234 public String createConnector(boolean localhost) throws Exception
236 ServerConnector connector = new ServerConnector(_server);
238 connector.setHost("127.0.0.1");
239 _server.addConnector(connector);
240 if (_server.isStarted())
245 return "http://"+(localhost?"127.0.0.1":
246 InetAddress.getLocalHost().getHostAddress()
247 )+":"+connector.getLocalPort();
250 public LocalConnector createLocalConnector()
252 LocalConnector connector = new LocalConnector(_server);
253 _server.addConnector(connector);