View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2014 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.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
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     /** 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.
232      * @throws Exception
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 }