353623 Added new methods to HttpExchange
This commit is contained in:
parent
e620f43663
commit
103d7a87c2
|
@ -1,4 +1,5 @@
|
||||||
jetty-7.5.0-SNAPSHOT
|
jetty-7.5.0-SNAPSHOT
|
||||||
|
+ 353623 Added new methods to HttpExchange
|
||||||
+ 353624 HttpURI accepts java.net.URI object in constructor
|
+ 353624 HttpURI accepts java.net.URI object in constructor
|
||||||
+ 354080 ServletContextHandler allows to replace any subordinate handler when restarted
|
+ 354080 ServletContextHandler allows to replace any subordinate handler when restarted
|
||||||
|
|
||||||
|
|
|
@ -675,7 +675,7 @@ public class HttpDestination implements Dumpable
|
||||||
setMethod(HttpMethods.CONNECT);
|
setMethod(HttpMethods.CONNECT);
|
||||||
setVersion(exchange.getVersion());
|
setVersion(exchange.getVersion());
|
||||||
String serverHostAndPort = serverAddress.toString();
|
String serverHostAndPort = serverAddress.toString();
|
||||||
setURI(serverHostAndPort);
|
setRequestURI(serverHostAndPort);
|
||||||
addRequestHeader(HttpHeaders.HOST, serverHostAndPort);
|
addRequestHeader(HttpHeaders.HOST, serverHostAndPort);
|
||||||
addRequestHeader(HttpHeaders.PROXY_CONNECTION, "keep-alive");
|
addRequestHeader(HttpHeaders.PROXY_CONNECTION, "keep-alive");
|
||||||
addRequestHeader(HttpHeaders.USER_AGENT, "Jetty-Client");
|
addRequestHeader(HttpHeaders.USER_AGENT, "Jetty-Client");
|
||||||
|
|
|
@ -15,6 +15,7 @@ package org.eclipse.jetty.client;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.net.URI;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import org.eclipse.jetty.client.security.SecurityListener;
|
import org.eclipse.jetty.client.security.SecurityListener;
|
||||||
|
@ -37,8 +38,8 @@ import org.eclipse.jetty.util.thread.Timeout;
|
||||||
*
|
*
|
||||||
* This object encapsulates:
|
* This object encapsulates:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>The HTTP server address, see {@link #setAddress(Address)} or {@link #setURL(String)})
|
* <li>The HTTP server address, see {@link #setAddress(Address)}, or {@link #setURI(URI)}, or {@link #setURL(String)})
|
||||||
* <li>The HTTP request method, URI and HTTP version (see {@link #setMethod(String)}, {@link #setURI(String)}, and {@link #setVersion(int)}
|
* <li>The HTTP request method, URI and HTTP version (see {@link #setMethod(String)}, {@link #setRequestURI(String)}, and {@link #setVersion(int)})
|
||||||
* <li>The request headers (see {@link #addRequestHeader(String, String)} or {@link #setRequestHeader(String, String)})
|
* <li>The request headers (see {@link #addRequestHeader(String, String)} or {@link #setRequestHeader(String, String)})
|
||||||
* <li>The request content (see {@link #setRequestContent(Buffer)} or {@link #setRequestContentSource(InputStream)})
|
* <li>The request content (see {@link #setRequestContent(Buffer)} or {@link #setRequestContentSource(InputStream)})
|
||||||
* <li>The status of the exchange (see {@link #getStatus()})
|
* <li>The status of the exchange (see {@link #getStatus()})
|
||||||
|
@ -391,33 +392,11 @@ public class HttpExchange
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param url Including protocol, host and port
|
* @param url an absolute URL (for example 'http://localhost/foo/bar?a=1')
|
||||||
*/
|
*/
|
||||||
public void setURL(String url)
|
public void setURL(String url)
|
||||||
{
|
{
|
||||||
HttpURI uri = new HttpURI(url);
|
setURI(URI.create(url));
|
||||||
String scheme = uri.getScheme();
|
|
||||||
if (scheme != null)
|
|
||||||
{
|
|
||||||
if (HttpSchemes.HTTP.equalsIgnoreCase(scheme))
|
|
||||||
setScheme(HttpSchemes.HTTP_BUFFER);
|
|
||||||
else if (HttpSchemes.HTTPS.equalsIgnoreCase(scheme))
|
|
||||||
setScheme(HttpSchemes.HTTPS_BUFFER);
|
|
||||||
else
|
|
||||||
setScheme(new ByteArrayBuffer(scheme));
|
|
||||||
}
|
|
||||||
|
|
||||||
int port = uri.getPort();
|
|
||||||
if (port <= 0)
|
|
||||||
port = "https".equalsIgnoreCase(scheme)?443:80;
|
|
||||||
|
|
||||||
setAddress(new Address(uri.getHost(),port));
|
|
||||||
|
|
||||||
String completePath = uri.getCompletePath();
|
|
||||||
if (completePath == null)
|
|
||||||
completePath = "/";
|
|
||||||
|
|
||||||
setURI(completePath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -457,6 +436,22 @@ public class HttpExchange
|
||||||
_scheme = scheme;
|
_scheme = scheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param scheme the scheme of the URL (for example 'http')
|
||||||
|
*/
|
||||||
|
public void setScheme(String scheme)
|
||||||
|
{
|
||||||
|
if (scheme != null)
|
||||||
|
{
|
||||||
|
if (HttpSchemes.HTTP.equalsIgnoreCase(scheme))
|
||||||
|
setScheme(HttpSchemes.HTTP_BUFFER);
|
||||||
|
else if (HttpSchemes.HTTPS.equalsIgnoreCase(scheme))
|
||||||
|
setScheme(HttpSchemes.HTTPS_BUFFER);
|
||||||
|
else
|
||||||
|
setScheme(new ByteArrayBuffer(scheme));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the scheme of the URL
|
* @return the scheme of the URL
|
||||||
*/
|
*/
|
||||||
|
@ -511,21 +506,82 @@ public class HttpExchange
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the path of the URL
|
* @return request URI
|
||||||
|
* @see #getRequestURI()
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public String getURI()
|
public String getURI()
|
||||||
|
{
|
||||||
|
return getRequestURI();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return request URI
|
||||||
|
*/
|
||||||
|
public String getRequestURI()
|
||||||
{
|
{
|
||||||
return _uri;
|
return _uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param uri the path of the URL (for example '/foo/bar?a=1')
|
* Set the request URI
|
||||||
|
*
|
||||||
|
* @param uri new request URI
|
||||||
|
* @see #setRequestURI(String)
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public void setURI(String uri)
|
public void setURI(String uri)
|
||||||
|
{
|
||||||
|
setRequestURI(uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the request URI
|
||||||
|
*
|
||||||
|
* Per RFC 2616 sec5, Request-URI = "*" | absoluteURI | abs_path | authority<br/>
|
||||||
|
* where:<br/><br/>
|
||||||
|
* "*" - request applies to server itself<br/>
|
||||||
|
* absoluteURI - required for proxy requests, e.g. http://localhost:8080/context<br/>
|
||||||
|
* (this form is generated automatically by HttpClient)<br/>
|
||||||
|
* abs_path - used for most methods, e.g. /context<br/>
|
||||||
|
* authority - used for CONNECT method only, e.g. localhost:8080<br/>
|
||||||
|
* <br/>
|
||||||
|
* For complete definition of URI components, see RFC 2396 sec3.<br/>
|
||||||
|
*
|
||||||
|
* @param uri new request URI
|
||||||
|
*/
|
||||||
|
public void setRequestURI(String uri)
|
||||||
{
|
{
|
||||||
_uri = uri;
|
_uri = uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/**
|
||||||
|
* @param uri an absolute URI (for example 'http://localhost/foo/bar?a=1')
|
||||||
|
*/
|
||||||
|
public void setURI(URI uri)
|
||||||
|
{
|
||||||
|
if (!uri.isAbsolute())
|
||||||
|
throw new IllegalArgumentException("!Absolute URI: "+uri);
|
||||||
|
|
||||||
|
if (uri.isOpaque())
|
||||||
|
throw new IllegalArgumentException("Opaque URI: "+uri);
|
||||||
|
|
||||||
|
String scheme = uri.getScheme();
|
||||||
|
int port = uri.getPort();
|
||||||
|
if (port <= 0)
|
||||||
|
port = "https".equalsIgnoreCase(scheme)?443:80;
|
||||||
|
|
||||||
|
setScheme(scheme);
|
||||||
|
setAddress(new Address(uri.getHost(),port));
|
||||||
|
|
||||||
|
HttpURI httpUri = new HttpURI(uri);
|
||||||
|
String completePath = httpUri.getCompletePath();
|
||||||
|
setRequestURI(completePath==null ? "/" : completePath);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the specified request header
|
* Adds the specified request header
|
||||||
* @param name the header name
|
* @param name the header name
|
||||||
|
|
|
@ -112,7 +112,7 @@ public class RedirectListener extends HttpEventListenerWrapper
|
||||||
if (_location.indexOf("://")>0)
|
if (_location.indexOf("://")>0)
|
||||||
_exchange.setURL(_location);
|
_exchange.setURL(_location);
|
||||||
else
|
else
|
||||||
_exchange.setURI(_location);
|
_exchange.setRequestURI(_location);
|
||||||
|
|
||||||
// destination may have changed
|
// destination may have changed
|
||||||
HttpDestination destination=_destination.getHttpClient().getDestination(_exchange.getAddress(),HttpSchemes.HTTPS.equals(String.valueOf(_exchange.getScheme())));
|
HttpDestination destination=_destination.getHttpClient().getDestination(_exchange.getAddress(),HttpSchemes.HTTPS.equals(String.valueOf(_exchange.getScheme())));
|
||||||
|
|
|
@ -253,7 +253,7 @@ public class WebdavListener extends HttpEventListenerWrapper
|
||||||
propfindExchange.setScheme( _exchange.getScheme() );
|
propfindExchange.setScheme( _exchange.getScheme() );
|
||||||
propfindExchange.setEventListener( new SecurityListener( _destination, propfindExchange ) );
|
propfindExchange.setEventListener( new SecurityListener( _destination, propfindExchange ) );
|
||||||
propfindExchange.setConfigureListeners( false );
|
propfindExchange.setConfigureListeners( false );
|
||||||
propfindExchange.setURI( uri );
|
propfindExchange.setRequestURI( uri );
|
||||||
|
|
||||||
_destination.send( propfindExchange );
|
_destination.send( propfindExchange );
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ public class WebdavListener extends HttpEventListenerWrapper
|
||||||
mkcolExchange.setScheme( _exchange.getScheme() );
|
mkcolExchange.setScheme( _exchange.getScheme() );
|
||||||
mkcolExchange.setEventListener( new SecurityListener( _destination, mkcolExchange ) );
|
mkcolExchange.setEventListener( new SecurityListener( _destination, mkcolExchange ) );
|
||||||
mkcolExchange.setConfigureListeners( false );
|
mkcolExchange.setConfigureListeners( false );
|
||||||
mkcolExchange.setURI( uri );
|
mkcolExchange.setRequestURI( uri );
|
||||||
|
|
||||||
_destination.send( mkcolExchange );
|
_destination.send( mkcolExchange );
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ public class WebdavListener extends HttpEventListenerWrapper
|
||||||
supportedExchange.setScheme( _exchange.getScheme() );
|
supportedExchange.setScheme( _exchange.getScheme() );
|
||||||
supportedExchange.setEventListener( new SecurityListener( _destination, supportedExchange ) );
|
supportedExchange.setEventListener( new SecurityListener( _destination, supportedExchange ) );
|
||||||
supportedExchange.setConfigureListeners( false );
|
supportedExchange.setConfigureListeners( false );
|
||||||
supportedExchange.setURI( _exchange.getURI() );
|
supportedExchange.setRequestURI( _exchange.getURI() );
|
||||||
|
|
||||||
_destination.send( supportedExchange );
|
_destination.send( supportedExchange );
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ public abstract class AbstractConnectionTest
|
||||||
CountDownLatch latch = new CountDownLatch(1);
|
CountDownLatch latch = new CountDownLatch(1);
|
||||||
HttpExchange exchange = new ConnectionExchange(latch);
|
HttpExchange exchange = new ConnectionExchange(latch);
|
||||||
exchange.setAddress(new Address("localhost", port));
|
exchange.setAddress(new Address("localhost", port));
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
httpClient.send(exchange);
|
httpClient.send(exchange);
|
||||||
|
|
||||||
Socket remote = serverSocket.accept();
|
Socket remote = serverSocket.accept();
|
||||||
|
@ -109,7 +109,7 @@ public abstract class AbstractConnectionTest
|
||||||
CountDownLatch latch = new CountDownLatch(1);
|
CountDownLatch latch = new CountDownLatch(1);
|
||||||
HttpExchange exchange = new ConnectionExchange(latch);
|
HttpExchange exchange = new ConnectionExchange(latch);
|
||||||
exchange.setAddress(new Address("localhost", port));
|
exchange.setAddress(new Address("localhost", port));
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
httpClient.send(exchange);
|
httpClient.send(exchange);
|
||||||
|
|
||||||
boolean passed = latch.await(4000, TimeUnit.MILLISECONDS);
|
boolean passed = latch.await(4000, TimeUnit.MILLISECONDS);
|
||||||
|
@ -158,7 +158,7 @@ public abstract class AbstractConnectionTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
exchange.setAddress(new Address("localhost", port));
|
exchange.setAddress(new Address("localhost", port));
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
exchanges[i] = exchange;
|
exchanges[i] = exchange;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,7 +189,7 @@ public abstract class AbstractConnectionTest
|
||||||
HttpExchange exchange = new ConnectionExchange(latch);
|
HttpExchange exchange = new ConnectionExchange(latch);
|
||||||
// Using a IP address has a different behavior than using a host name
|
// Using a IP address has a different behavior than using a host name
|
||||||
exchange.setAddress(new Address("127.0.0.1", 1));
|
exchange.setAddress(new Address("127.0.0.1", 1));
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
httpClient.send(exchange);
|
httpClient.send(exchange);
|
||||||
|
|
||||||
boolean passed = latch.await(connectTimeout * 2L, TimeUnit.MILLISECONDS);
|
boolean passed = latch.await(connectTimeout * 2L, TimeUnit.MILLISECONDS);
|
||||||
|
@ -218,7 +218,7 @@ public abstract class AbstractConnectionTest
|
||||||
{
|
{
|
||||||
HttpExchange exchange = new ConnectionExchange();
|
HttpExchange exchange = new ConnectionExchange();
|
||||||
exchange.setAddress(new Address("localhost", port));
|
exchange.setAddress(new Address("localhost", port));
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
HttpDestination dest = httpClient.getDestination(new Address("localhost", port),false);
|
HttpDestination dest = httpClient.getDestination(new Address("localhost", port),false);
|
||||||
|
|
||||||
httpClient.send(exchange);
|
httpClient.send(exchange);
|
||||||
|
@ -236,7 +236,7 @@ public abstract class AbstractConnectionTest
|
||||||
|
|
||||||
exchange = new ConnectionExchange();
|
exchange = new ConnectionExchange();
|
||||||
exchange.setAddress(new Address("localhost", port));
|
exchange.setAddress(new Address("localhost", port));
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
|
|
||||||
httpClient.send(exchange);
|
httpClient.send(exchange);
|
||||||
s.getInputStream().read(buf);
|
s.getInputStream().read(buf);
|
||||||
|
|
|
@ -84,7 +84,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
|
|
||||||
getHttpClient().send(exchange);
|
getHttpClient().send(exchange);
|
||||||
// Cancelling here is wrong and makes the test fail spuriously
|
// Cancelling here is wrong and makes the test fail spuriously
|
||||||
|
@ -122,7 +122,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
|
|
||||||
getHttpClient().send(exchange);
|
getHttpClient().send(exchange);
|
||||||
// Cancelling here is wrong and makes the test fail spuriously
|
// Cancelling here is wrong and makes the test fail spuriously
|
||||||
|
@ -152,7 +152,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
|
|
||||||
getHttpClient().send(exchange);
|
getHttpClient().send(exchange);
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
|
|
||||||
getHttpClient().send(exchange);
|
getHttpClient().send(exchange);
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
|
|
||||||
getHttpClient().send(exchange);
|
getHttpClient().send(exchange);
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
|
|
||||||
getHttpClient().send(exchange);
|
getHttpClient().send(exchange);
|
||||||
|
|
||||||
|
@ -252,7 +252,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
|
|
||||||
getHttpClient().send(exchange);
|
getHttpClient().send(exchange);
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/?action=body");
|
exchange.setRequestURI("/?action=body");
|
||||||
|
|
||||||
getHttpClient().send(exchange);
|
getHttpClient().send(exchange);
|
||||||
|
|
||||||
|
@ -302,7 +302,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/");
|
exchange.setRequestURI("/");
|
||||||
|
|
||||||
getHttpClient().send(exchange);
|
getHttpClient().send(exchange);
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
((StdErrLog)Log.getLog()).setHideStacks(!Log.isDebugEnabled());
|
((StdErrLog)Log.getLog()).setHideStacks(!Log.isDebugEnabled());
|
||||||
TestHttpExchange exchange = new TestHttpExchange();
|
TestHttpExchange exchange = new TestHttpExchange();
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/?action=throw");
|
exchange.setRequestURI("/?action=throw");
|
||||||
|
|
||||||
getHttpClient().send(exchange);
|
getHttpClient().send(exchange);
|
||||||
|
|
||||||
|
@ -349,7 +349,7 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
|
|
||||||
TestHttpExchange exchange = new TestHttpExchange();
|
TestHttpExchange exchange = new TestHttpExchange();
|
||||||
exchange.setAddress(newAddress());
|
exchange.setAddress(newAddress());
|
||||||
exchange.setURI("/?action=wait5000");
|
exchange.setRequestURI("/?action=wait5000");
|
||||||
|
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
httpClient.send(exchange);
|
httpClient.send(exchange);
|
||||||
|
|
|
@ -18,7 +18,7 @@ public class AsyncSslHttpExchangeTest extends SslHttpExchangeTest
|
||||||
@Override
|
@Override
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
_scheme="https://";
|
_scheme="https";
|
||||||
startServer();
|
startServer();
|
||||||
_httpClient=new HttpClient();
|
_httpClient=new HttpClient();
|
||||||
_httpClient.setIdleTimeout(2000);
|
_httpClient.setIdleTimeout(2000);
|
||||||
|
|
|
@ -23,7 +23,7 @@ public class ExternalKeyStoreAsyncSslHttpExchangeTest extends SslHttpExchangeTes
|
||||||
@Override
|
@Override
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
_scheme = "https://";
|
_scheme = "https";
|
||||||
startServer();
|
startServer();
|
||||||
_httpClient = new HttpClient();
|
_httpClient = new HttpClient();
|
||||||
_httpClient.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL);
|
_httpClient.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL);
|
||||||
|
|
|
@ -16,12 +16,15 @@ package org.eclipse.jetty.client;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.junit.matchers.JUnitMatchers.containsString;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import java.net.URI;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
@ -32,8 +35,10 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import org.eclipse.jetty.client.security.ProxyAuthorization;
|
import org.eclipse.jetty.client.security.ProxyAuthorization;
|
||||||
|
import org.eclipse.jetty.http.HttpFields;
|
||||||
import org.eclipse.jetty.http.HttpHeaders;
|
import org.eclipse.jetty.http.HttpHeaders;
|
||||||
import org.eclipse.jetty.http.HttpMethods;
|
import org.eclipse.jetty.http.HttpMethods;
|
||||||
|
import org.eclipse.jetty.http.HttpStatus;
|
||||||
import org.eclipse.jetty.io.Buffer;
|
import org.eclipse.jetty.io.Buffer;
|
||||||
import org.eclipse.jetty.io.ByteArrayBuffer;
|
import org.eclipse.jetty.io.ByteArrayBuffer;
|
||||||
import org.eclipse.jetty.io.Connection;
|
import org.eclipse.jetty.io.Connection;
|
||||||
|
@ -58,7 +63,7 @@ import org.junit.Test;
|
||||||
public class HttpExchangeTest
|
public class HttpExchangeTest
|
||||||
{
|
{
|
||||||
protected int _maxConnectionsPerAddress = 2;
|
protected int _maxConnectionsPerAddress = 2;
|
||||||
protected String _scheme = "http://";
|
protected String _scheme = "http";
|
||||||
protected Server _server;
|
protected Server _server;
|
||||||
protected int _port;
|
protected int _port;
|
||||||
protected HttpClient _httpClient;
|
protected HttpClient _httpClient;
|
||||||
|
@ -233,7 +238,7 @@ public class HttpExchangeTest
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
httpExchange[n].setURL(_scheme+"localhost:"+_port+"/"+n);
|
httpExchange[n].setURL(_scheme+"://localhost:"+_port+"/"+n);
|
||||||
httpExchange[n].addRequestHeader("arbitrary","value");
|
httpExchange[n].addRequestHeader("arbitrary","value");
|
||||||
if (close)
|
if (close)
|
||||||
httpExchange[n].setRequestHeader("Connection","close");
|
httpExchange[n].setRequestHeader("Connection","close");
|
||||||
|
@ -261,8 +266,7 @@ public class HttpExchangeTest
|
||||||
for (int i=0;i<20;i++)
|
for (int i=0;i<20;i++)
|
||||||
{
|
{
|
||||||
ContentExchange httpExchange=new ContentExchange();
|
ContentExchange httpExchange=new ContentExchange();
|
||||||
//httpExchange.setURL(_scheme+"localhost:"+_port+"/");
|
httpExchange.setURI(new URI(_scheme, null, "localhost", _port, null, null, null));
|
||||||
httpExchange.setURL(_scheme+"localhost:"+_port);
|
|
||||||
httpExchange.setMethod(HttpMethods.POST);
|
httpExchange.setMethod(HttpMethods.POST);
|
||||||
httpExchange.setRequestContent(new ByteArrayBuffer("<hello />"));
|
httpExchange.setRequestContent(new ByteArrayBuffer("<hello />"));
|
||||||
_httpClient.send(httpExchange);
|
_httpClient.send(httpExchange);
|
||||||
|
@ -281,7 +285,7 @@ public class HttpExchangeTest
|
||||||
for (int i=0;i<10;i++)
|
for (int i=0;i<10;i++)
|
||||||
{
|
{
|
||||||
ContentExchange httpExchange=new ContentExchange();
|
ContentExchange httpExchange=new ContentExchange();
|
||||||
httpExchange.setURL(_scheme+"localhost:"+_port+"/?i="+i);
|
httpExchange.setURI(new URI(_scheme, null, "localhost", _port, "/", "i="+i, null));
|
||||||
httpExchange.setMethod(HttpMethods.GET);
|
httpExchange.setMethod(HttpMethods.GET);
|
||||||
_httpClient.send(httpExchange);
|
_httpClient.send(httpExchange);
|
||||||
int status = httpExchange.waitForDone();
|
int status = httpExchange.waitForDone();
|
||||||
|
@ -301,7 +305,7 @@ public class HttpExchangeTest
|
||||||
for (int i=0;i<10;i++)
|
for (int i=0;i<10;i++)
|
||||||
{
|
{
|
||||||
ContentExchange httpExchange=new ContentExchange();
|
ContentExchange httpExchange=new ContentExchange();
|
||||||
httpExchange.setURL(_scheme+"localhost:"+_port+"/?i="+i);
|
httpExchange.setURL(_scheme+"://localhost:"+_port+"/?i="+i);
|
||||||
httpExchange.setMethod(HttpMethods.GET);
|
httpExchange.setMethod(HttpMethods.GET);
|
||||||
_httpClient.send(httpExchange);
|
_httpClient.send(httpExchange);
|
||||||
int status = httpExchange.waitForDone();
|
int status = httpExchange.waitForDone();
|
||||||
|
@ -348,7 +352,7 @@ public class HttpExchangeTest
|
||||||
throwable.set(x);
|
throwable.set(x);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
httpExchange.setURL(_scheme+"localhost:"+_port+"/");
|
httpExchange.setURL(_scheme+"://localhost:"+_port+"/");
|
||||||
httpExchange.setMethod("SLEEP");
|
httpExchange.setMethod("SLEEP");
|
||||||
_httpClient.send(httpExchange);
|
_httpClient.send(httpExchange);
|
||||||
new Thread()
|
new Thread()
|
||||||
|
@ -387,7 +391,7 @@ public class HttpExchangeTest
|
||||||
niobuf.put(bytes);
|
niobuf.put(bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
httpExchange.setURL(_scheme+"localhost:"+_port+"/");
|
httpExchange.setURL(_scheme+"://localhost:"+_port+"/");
|
||||||
httpExchange.setMethod(HttpMethods.POST);
|
httpExchange.setMethod(HttpMethods.POST);
|
||||||
httpExchange.setRequestContentType("application/data");
|
httpExchange.setRequestContentType("application/data");
|
||||||
httpExchange.setRequestContent(babuf);
|
httpExchange.setRequestContent(babuf);
|
||||||
|
@ -400,7 +404,7 @@ public class HttpExchangeTest
|
||||||
assertEquals(babuf.length(),result.length());
|
assertEquals(babuf.length(),result.length());
|
||||||
|
|
||||||
httpExchange.reset();
|
httpExchange.reset();
|
||||||
httpExchange.setURL(_scheme+"localhost:"+_port+"/");
|
httpExchange.setURL(_scheme+"://localhost:"+_port+"/");
|
||||||
httpExchange.setMethod(HttpMethods.POST);
|
httpExchange.setMethod(HttpMethods.POST);
|
||||||
httpExchange.setRequestContentType("application/data");
|
httpExchange.setRequestContentType("application/data");
|
||||||
httpExchange.setRequestContent(niobuf);
|
httpExchange.setRequestContent(niobuf);
|
||||||
|
@ -419,8 +423,7 @@ public class HttpExchangeTest
|
||||||
{
|
{
|
||||||
|
|
||||||
};
|
};
|
||||||
//httpExchange.setURL(_scheme+"localhost:"+_port+"/");
|
httpExchange.setURL(_scheme+"://localhost:"+_port);
|
||||||
httpExchange.setURL(_scheme+"localhost:"+_port);
|
|
||||||
httpExchange.setMethod(HttpMethods.POST);
|
httpExchange.setMethod(HttpMethods.POST);
|
||||||
|
|
||||||
final String data="012345678901234567890123456789012345678901234567890123456789";
|
final String data="012345678901234567890123456789012345678901234567890123456789";
|
||||||
|
@ -478,7 +481,7 @@ public class HttpExchangeTest
|
||||||
@Test
|
@Test
|
||||||
public void testProxy() throws Exception
|
public void testProxy() throws Exception
|
||||||
{
|
{
|
||||||
if (_scheme.equals("https://"))
|
if (_scheme.equals("https"))
|
||||||
return;
|
return;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -488,7 +491,7 @@ public class HttpExchangeTest
|
||||||
ContentExchange httpExchange=new ContentExchange();
|
ContentExchange httpExchange=new ContentExchange();
|
||||||
httpExchange.setAddress(new Address("jetty.eclipse.org",8080));
|
httpExchange.setAddress(new Address("jetty.eclipse.org",8080));
|
||||||
httpExchange.setMethod(HttpMethods.GET);
|
httpExchange.setMethod(HttpMethods.GET);
|
||||||
httpExchange.setURI("/jetty-6");
|
httpExchange.setRequestURI("/jetty-6");
|
||||||
_httpClient.send(httpExchange);
|
_httpClient.send(httpExchange);
|
||||||
int status = httpExchange.waitForDone();
|
int status = httpExchange.waitForDone();
|
||||||
//httpExchange.waitForStatus(HttpExchange.STATUS_COMPLETED);
|
//httpExchange.waitForStatus(HttpExchange.STATUS_COMPLETED);
|
||||||
|
@ -509,14 +512,14 @@ public class HttpExchangeTest
|
||||||
@Test
|
@Test
|
||||||
public void testReserveConnections () throws Exception
|
public void testReserveConnections () throws Exception
|
||||||
{
|
{
|
||||||
final HttpDestination destination = _httpClient.getDestination (new Address("localhost", _port), _scheme.equalsIgnoreCase("https://"));
|
final HttpDestination destination = _httpClient.getDestination (new Address("localhost", _port), _scheme.equalsIgnoreCase("https"));
|
||||||
final org.eclipse.jetty.client.HttpConnection[] connections = new org.eclipse.jetty.client.HttpConnection[_maxConnectionsPerAddress];
|
final org.eclipse.jetty.client.HttpConnection[] connections = new org.eclipse.jetty.client.HttpConnection[_maxConnectionsPerAddress];
|
||||||
for (int i=0; i < _maxConnectionsPerAddress; i++)
|
for (int i=0; i < _maxConnectionsPerAddress; i++)
|
||||||
{
|
{
|
||||||
connections[i] = destination.reserveConnection(200);
|
connections[i] = destination.reserveConnection(200);
|
||||||
assertNotNull(connections[i]);
|
assertNotNull(connections[i]);
|
||||||
HttpExchange ex = new ContentExchange();
|
HttpExchange ex = new ContentExchange();
|
||||||
ex.setURL(_scheme+"localhost:"+_port+"/?i="+i);
|
ex.setURL(_scheme+"://localhost:"+_port+"/?i="+i);
|
||||||
ex.setMethod(HttpMethods.GET);
|
ex.setMethod(HttpMethods.GET);
|
||||||
connections[i].send(ex);
|
connections[i].send(ex);
|
||||||
}
|
}
|
||||||
|
@ -534,6 +537,35 @@ public class HttpExchangeTest
|
||||||
assertNotNull(c);
|
assertNotNull(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testOptionsWithExchange() throws Exception
|
||||||
|
{
|
||||||
|
ContentExchange httpExchange = new ContentExchange(true);
|
||||||
|
httpExchange.setURL(_scheme+"://localhost:"+_port);
|
||||||
|
httpExchange.setRequestURI("*");
|
||||||
|
httpExchange.setMethod(HttpMethods.OPTIONS);
|
||||||
|
httpExchange.setRequestHeader("Connection","close");
|
||||||
|
_httpClient.send(httpExchange);
|
||||||
|
|
||||||
|
int state = httpExchange.waitForDone();
|
||||||
|
assertEquals(HttpExchange.STATUS_COMPLETED, state);
|
||||||
|
assertEquals(HttpStatus.OK_200,httpExchange.getResponseStatus());
|
||||||
|
|
||||||
|
HttpFields headers = httpExchange.getResponseFields();
|
||||||
|
assertTrue("Response contains Allow header", headers.containsKey("Allow"));
|
||||||
|
|
||||||
|
String allow = headers.getStringField("Allow");
|
||||||
|
String expectedMethods[] =
|
||||||
|
{ "GET", "HEAD", "POST", "PUT", "DELETE", "MOVE", "OPTIONS", "TRACE" };
|
||||||
|
for (String expectedMethod : expectedMethods)
|
||||||
|
{
|
||||||
|
assertThat(allow,containsString(expectedMethod));
|
||||||
|
}
|
||||||
|
|
||||||
|
assertTrue("Response contains Content-Length header", headers.containsKey("Content-Length"));
|
||||||
|
assertEquals("Content-Length header value", 0, headers.getLongField("Content-Length"));
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
public static void copyStream(InputStream in, OutputStream out)
|
public static void copyStream(InputStream in, OutputStream out)
|
||||||
{
|
{
|
||||||
|
@ -600,6 +632,14 @@ public class HttpExchangeTest
|
||||||
}
|
}
|
||||||
response.getOutputStream().println("</hello>");
|
response.getOutputStream().println("</hello>");
|
||||||
}
|
}
|
||||||
|
else if (request.getMethod().equalsIgnoreCase("OPTIONS"))
|
||||||
|
{
|
||||||
|
if ("*".equals(target))
|
||||||
|
{
|
||||||
|
response.setContentLength(0);
|
||||||
|
response.setHeader("Allow","GET,HEAD,POST,PUT,DELETE,MOVE,OPTIONS,TRACE");
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (request.getMethod().equalsIgnoreCase("SLEEP"))
|
else if (request.getMethod().equalsIgnoreCase("SLEEP"))
|
||||||
{
|
{
|
||||||
Thread.sleep(10000);
|
Thread.sleep(10000);
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class SslHttpExchangeTest extends HttpExchangeTest
|
||||||
@Override
|
@Override
|
||||||
public void setUp() throws Exception
|
public void setUp() throws Exception
|
||||||
{
|
{
|
||||||
_scheme="https://";
|
_scheme="https";
|
||||||
startServer();
|
startServer();
|
||||||
_httpClient=new HttpClient();
|
_httpClient=new HttpClient();
|
||||||
_httpClient.setIdleTimeout(2000);
|
_httpClient.setIdleTimeout(2000);
|
||||||
|
|
Loading…
Reference in New Issue