|
Jetty example source code file (HttpExchangeTest.java)
The Jetty HttpExchangeTest.java source code// ======================================================================== // Copyright 2006-2007 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ======================================================================== package org.mortbay.jetty.client; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Date; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import junit.framework.TestCase; import org.mortbay.io.Buffer; import org.mortbay.io.ByteArrayBuffer; import org.mortbay.jetty.Connector; import org.mortbay.jetty.EofException; import org.mortbay.jetty.HttpConnection; import org.mortbay.jetty.HttpMethods; import org.mortbay.jetty.Request; import org.mortbay.jetty.Server; import org.mortbay.jetty.handler.AbstractHandler; import org.mortbay.jetty.nio.SelectChannelConnector; /** * Functional testing for HttpExchange. * * @author Matthew Purland * @author Greg Wilkins */ public class HttpExchangeTest extends TestCase { private Server _server; private int _port; private HttpClient _httpClient; protected void setUp() throws Exception { startServer(); _httpClient=new HttpClient(); _httpClient.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL); _httpClient.setMaxConnectionsPerAddress(2); _httpClient.start(); } protected void tearDown() throws Exception { stopServer(); _httpClient.stop(); } public void xtestPerf() throws Exception { sender(1); Thread.sleep(200); sender(10); Thread.sleep(200); sender(100); Thread.sleep(200); sender(1000); Thread.sleep(200); sender(10000); } /** * Test sending data through the exchange. * * @throws IOException */ public void sender(final int nb) throws Exception { final CountDownLatch latch=new CountDownLatch(nb); long l0=System.currentTimeMillis(); for (int i=0; i<nb; i++) { final int n=i; if (n%1000==0) { Thread.sleep(200); } HttpExchange httpExchange=new HttpExchange() { protected void onRequestCommitted() { // System.err.println("Request committed"); } protected void onResponseStatus(Buffer version, int status, Buffer reason) { // System.err.println("Response Status: " + version+" "+status+" "+reason); } protected void onResponseHeader(Buffer name, Buffer value) { // System.err.println("Response header: " + name + " = " + value); } protected void onResponseContent(Buffer content) { // System.err.println("Response content:" + content); } protected void onResponseComplete() { // System.err.println("Response completed "+n); latch.countDown(); } }; httpExchange.setURL("http://localhost:"+_port+"/"); httpExchange.addRequestHeader("arbitrary","value"); _httpClient.send(httpExchange); } long last=latch.getCount(); while(last>0) { // System.err.println("waiting for "+last+" sent "+(System.currentTimeMillis()-l0)/1000 + "s ago ..."); latch.await(5,TimeUnit.SECONDS); long next=latch.getCount(); if (last==next) break; last=next; } // System.err.println("missed "+latch.getCount()+" sent "+(System.currentTimeMillis()-l0)/1000 + "s ago."); assertEquals(0,latch.getCount()); long l1=System.currentTimeMillis(); } public void testPostWithContentExchange() throws Exception { for (int i=0;i<20;i++) { HttpExchange.ContentExchange httpExchange=new HttpExchange.ContentExchange(); httpExchange.setURL("http://localhost:"+_port+"/"); httpExchange.setMethod(HttpMethods.POST); httpExchange.setRequestContent(new ByteArrayBuffer("<hello />")); _httpClient.send(httpExchange); httpExchange.waitForStatus(HttpExchange.STATUS_COMPLETED); String result=httpExchange.getResponseContent(); assertEquals("i="+i,"<hello />",result); Thread.sleep(5); } } public void testGetWithContentExchange() throws Exception { for (int i=0;i<20;i++) { HttpExchange.ContentExchange httpExchange=new HttpExchange.ContentExchange(); httpExchange.setURL("http://localhost:"+_port+"/?i="+i); httpExchange.setMethod(HttpMethods.GET); _httpClient.send(httpExchange); httpExchange.waitForStatus(HttpExchange.STATUS_COMPLETED); String result=httpExchange.getResponseContent(); assertEquals("i="+i,0,result.indexOf("<hello>")); assertEquals("i="+i,result.length()-10,result.indexOf("</hello>")); Thread.sleep(5); } } public static void copyStream(InputStream in, OutputStream out) { try { byte[] buffer=new byte[1024]; int len; while ((len=in.read(buffer))>=0) { out.write(buffer,0,len); } } catch (EofException e) { System.err.println(e); } catch (IOException e) { e.printStackTrace(); } } private void startServer() throws Exception { _server=new Server(); _server.setGracefulShutdown(500); Connector connector=new SelectChannelConnector(); connector.setPort(0); _server.setConnectors(new Connector[] { connector }); _server.setHandler(new AbstractHandler() { public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException { Request base_request=(request instanceof Request)?(Request)request:HttpConnection.getCurrentConnection().getRequest(); base_request.setHandled(true); response.setStatus(200); if (request.getMethod().equalsIgnoreCase("GET")) { response.getOutputStream().println("<hello>"); for (int i=0; i<100; i++) { response.getOutputStream().println(" <world>"+i+" |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.