1e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/* 2e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * contributor license agreements. See the NOTICE file distributed with 4e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * this work for additional information regarding copyright ownership. 5e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * (the "License"); you may not use this file except in compliance with 7e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * the License. You may obtain a copy of the License at 8e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * 9e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * 11e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Unless required by applicable law or agreed to in writing, software 12e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * See the License for the specific language governing permissions and 15e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * limitations under the License. 16e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 17e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 18e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespackage tests.support; 19e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 20e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.IOException; 21e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.InputStream; 22e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 23e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/* 24e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport javax.servlet.ServletException; 25e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport javax.servlet.http.HttpServlet; 26e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport javax.servlet.http.HttpServletRequest; 27e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport javax.servlet.http.HttpServletResponse; 28e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 29e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport org.mortbay.jetty.HttpConnection; 30e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport org.mortbay.jetty.Request; 31e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport org.mortbay.jetty.Server; 32e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport org.mortbay.jetty.handler.AbstractHandler; 33e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport org.mortbay.jetty.handler.ResourceHandler; 34e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport org.mortbay.jetty.servlet.Context; 35e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport org.mortbay.jetty.servlet.ServletHolder; 36e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes*/ 37e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 38e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespublic class Support_Jetty { 39e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /* 40e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static Server DEFAULT_SERVER = null; 41e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 42e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static int DEFAULT_PORT = 0; 43e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 44e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static Server DEFAULT_SERVLET = null; 45e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 46e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static int DEFAULT_SERVLET_PORT = 0; 47e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 48e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static Server SERVER = null; 49e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 50e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static int PORT = 0; 51e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 52e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes static { 53e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes Runtime.getRuntime().addShutdownHook(new Thread() { 54e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public void run() { 55e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes try { 56e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes stopDefaultServer(); 57e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes stopServer(); 58e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes stopDefaultServlet(); 59e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } catch (Exception e) { 60e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes e.printStackTrace(); 61e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 62e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 63e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes }); 64e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 65e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 66e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes private static class HYDefaultServlet extends HttpServlet 67e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes { 68e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes private static final long serialVersionUID = -7650071946216123835L; 69e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 70e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 71e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes { 72e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes InputStream in = request.getInputStream(); 73e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes int i; 74e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes StringBuilder s = new StringBuilder(); 75e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes while((i = in.read())!=-1){ 76e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes s.append((char)i); 77e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 78e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes response.setContentType("text/html"); 79e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes response.setStatus(HttpServletResponse.SC_OK); 80e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes response.getWriter().print(s); 81e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 82e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 83e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 84e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes private static class HYDefaultHandler extends AbstractHandler 85e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes { 86e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException 87e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes { 88e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes Request base_request = (request instanceof Request) ? (Request)request:HttpConnection.getCurrentConnection().getRequest(); 89e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes base_request.setHandled(true); 90e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes response.setContentType("text/html"); 91e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes response.addDateHeader("Date", System.currentTimeMillis()); 92e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes response.addDateHeader("Last-Modified", Support_Configuration.URLConnectionLastModified); 93e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes response.setStatus(HttpServletResponse.SC_OK); 94e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes response.getWriter().print("<h1>Hello OneHandler</h1>"); 95e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 96e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 97e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes*/ 98e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static int startDefaultHttpServer() throws Exception{ 99e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /* 100e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (DEFAULT_SERVER != null){ 101e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return DEFAULT_PORT; 102e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 103e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_SERVER = new Server(0); 104e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_SERVER.setHandler(new HYDefaultHandler()); 105e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes Context context = new Context(DEFAULT_SERVER,"/",Context.SESSIONS); 106e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes context.addServlet(new ServletHolder(new HYDefaultServlet()), "/servlet"); 107e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_SERVER.start(); 108e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_PORT = DEFAULT_SERVER.getConnectors()[0].getLocalPort(); 109e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return DEFAULT_PORT; 110e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 111e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return -1; 112e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 113e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 114e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static int startDefaultServlet() throws Exception{ 115e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /* 116e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (DEFAULT_SERVLET != null){ 117e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return DEFAULT_SERVLET_PORT; 118e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 119e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_SERVLET = new Server(0); 120e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes Context context = new Context(DEFAULT_SERVLET,"/",Context.SESSIONS); 121e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes context.addServlet(new ServletHolder(new HYDefaultServlet()), "/*"); 122e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_SERVLET.start(); 123e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_SERVLET_PORT = DEFAULT_SERVLET.getConnectors()[0].getLocalPort(); 124e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return DEFAULT_SERVLET_PORT; 125e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 126e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return -1; 127e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 128e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 129e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public static int startHttpServerWithDocRoot(String root) throws Exception { 130e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /* 131e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (SERVER != null) { 132e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes SERVER.stop(); 133e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes SERVER = null; 134e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 135e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes SERVER = new Server(0); 136e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes ResourceHandler resource_handler = new ResourceHandler(); 137e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes resource_handler.setResourceBase(root); 138e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes SERVER.setHandler(resource_handler); 139e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes SERVER.start(); 140e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes PORT = SERVER.getConnectors()[0].getLocalPort(); 141e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return PORT; 142e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 143e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return -1; 144e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 145e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 146e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes private static void stopDefaultServer() throws Exception { 147e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /* 148e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (DEFAULT_SERVER != null) { 149e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_SERVER.stop(); 150e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_SERVER = null; 151e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 152e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 153e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 154e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 155e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes private static void stopServer() throws Exception { 156e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /* 157e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (SERVER != null) { 158e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes SERVER.stop(); 159e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes SERVER = null; 160e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 161e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 162e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 163e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 164e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes private static void stopDefaultServlet() throws Exception { 165e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /* 166e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (DEFAULT_SERVLET != null) { 167e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_SERVLET.stop(); 168e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes DEFAULT_SERVLET = null; 169e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 170e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 171e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 172e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes} 173