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*/
988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    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
1148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    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