package org.eclipse.jetty.server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.net.Socket;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.HandlerWrapper;
import org.eclipse.jetty.toolchain.test.Stress;
import org.eclipse.jetty.util.IO;
import org.junit.AfterClass;
public class HttpServerTestFixture
{ // Useful constants
protected static final long PAUSE=10L;
protected static final int LOOPS=Stress.isEnabled()?250:50;
protected static final String HOST="localhost";
protected static Server _server;
protected static Connector _connector;
protected String _scheme="http";
protected Socket newSocket(String host,int port) throws Exception
{
Socket socket = new Socket(host,port);
socket.setSoTimeout(10000);
socket.setTcpNoDelay(true);
socket.setSoLinger(false,0);
return socket;
}
protected static void startServer(Connector connector) throws Exception
{
_server = new Server();
_connector = connector;
_server.addConnector(_connector);
_server.setHandler(new HandlerWrapper());
_server.start();
}
@AfterClass
public static void stopServer() throws Exception
{
_server.stop();
_server.join();
}
protected void configureServer(Handler handler) throws Exception
{
HandlerWrapper current = (HandlerWrapper)_server.getHandler();
current.stop();
current.setHandler(handler);
current.start();
}
protected static class EchoHandler extends AbstractHandler
{
boolean musthavecontent=true;
public EchoHandler()
{}
public EchoHandler(boolean content)
{
musthavecontent=false;
}
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
baseRequest.setHandled(true);
if (request.getContentType()!=null)
response.setContentType(request.getContentType());
if (request.getParameter("charset")!=null)
response.setCharacterEncoding(request.getParameter("charset"));
else if (request.getCharacterEncoding()!=null)
response.setCharacterEncoding(request.getCharacterEncoding());
PrintWriter writer=response.getWriter();
int count=0;
BufferedReader reader=request.getReader();
if (request.getContentLength()!=0)
{
String line;
while ((line=reader.readLine())!=null)
{
writer.print(line);
writer.print("\n");
count+=line.length();
}
}
if (count==0)
{
if (musthavecontent)
throw new IllegalStateException("no input recieved");
writer.println("No content");
}
// just to be difficult
reader.close();
writer.close();
if (reader.read()>=0)
throw new IllegalStateException("Not closed");
}
}
protected static class HelloWorldHandler extends AbstractHandler
{
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
baseRequest.setHandled(true);
response.setStatus(200);
response.getOutputStream().print("Hello world\r\n");
}
}
protected static class DataHandler extends AbstractHandler
{
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
baseRequest.setHandled(true);
response.setStatus(200);
InputStream in = request.getInputStream();
String input=IO.toString(in);
String tmp = request.getParameter("writes");
int writes=Integer.parseInt(tmp==null?"10":tmp);
tmp = request.getParameter("block");
int block=Integer.parseInt(tmp==null?"10":tmp);
String encoding=request.getParameter("encoding");
String chars=request.getParameter("chars");
String data = "\u0a870123456789A\u0a87CDEFGHIJKLMNOPQRSTUVWXYZ\u0250bcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
while (data.length()<block)
data+=data;
String chunk = (input+data).substring(0,block);
response.setContentType("text/plain");
if (encoding==null)
{
byte[] bytes=chunk.getBytes("ISO-8859-1");
OutputStream out=response.getOutputStream();
for (int i=0;i<writes;i++)
{
out.write(bytes);
}
}
else if ("true".equals(chars))
{
response.setCharacterEncoding(encoding);
Writer out=response.getWriter();
char[] c=chunk.toCharArray();
for (int i=0;i<writes;i++)
{
out.write(c);
}
}
else
{
response.setCharacterEncoding(encoding);
Writer out=response.getWriter();
for (int i=0;i<writes;i++)
{
out.write(chunk);
}
}
}
}
public final static HostnameVerifier __hostnameverifier = new HostnameVerifier()
{
public boolean verify(String hostname, SSLSession session)
{
return true;
}
};
}