You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2014/05/11 16:09:31 UTC
svn commit: r1593793 [2/2] - in /httpcomponents/httpcore/trunk:
httpcore-nio/src/main/java/org/apache/http/nio/protocol/
httpcore-nio/src/test/java/org/apache/http/nio/integration/
httpcore-nio/src/test/java/org/apache/http/nio/protocol/ httpcore-nio/s...
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java?rev=1593793&r1=1593792&r2=1593793&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncService.java Sun May 11 14:09:30 2014
@@ -146,8 +146,6 @@ public class TestHttpAsyncService {
this.protocolHandler.closed(this.conn);
- Assert.assertEquals(MessageState.READY, state.getRequestState());
- Assert.assertEquals(MessageState.READY, state.getResponseState());
Mockito.verify(this.requestConsumer).close();
Mockito.verify(this.responseProducer).close();
Mockito.verify(this.cancellable).cancel();
@@ -304,8 +302,8 @@ public class TestHttpAsyncService {
this.protocolHandler.requestReceived(this.conn);
- Assert.assertEquals(MessageState.COMPLETED, state.getRequestState());
- Assert.assertEquals(MessageState.INIT, state.getResponseState());
+ Assert.assertEquals(MessageState.READY, state.getRequestState());
+ Assert.assertEquals(MessageState.READY, state.getResponseState());
final Incoming incoming = state.getIncoming();
Assert.assertNull(incoming);
@@ -320,11 +318,14 @@ public class TestHttpAsyncService {
Mockito.verify(this.requestConsumer).requestReceived(request);
Mockito.verify(this.requestConsumer).requestCompleted(exchangeContext);
- Mockito.verify(this.requestHandler).handle(
- Mockito.eq(data),
- Mockito.any(HttpAsyncExchange.class),
- Mockito.eq(exchangeContext));
- Assert.assertTrue(state.getPipeline().isEmpty());
+ Mockito.verify(this.conn).requestOutput();
+
+ final PipelineEntry entry = state.getPipeline().poll();
+ Assert.assertNotNull(entry);
+ Assert.assertSame(request, entry.getRequest());
+ Assert.assertSame(requestHandler, entry.getHandler());
+ Assert.assertNotNull(entry.getResult());
+ Assert.assertNull(entry.getException());
}
@Test
@@ -344,7 +345,7 @@ public class TestHttpAsyncService {
this.protocolHandler.requestReceived(this.conn);
- Assert.assertEquals(MessageState.COMPLETED, state.getRequestState());
+ Assert.assertEquals(MessageState.READY, state.getRequestState());
Assert.assertEquals(MessageState.INIT, state.getResponseState());
final Incoming incoming = state.getIncoming();
@@ -389,7 +390,7 @@ public class TestHttpAsyncService {
this.protocolHandler.requestReceived(this.conn);
- Assert.assertEquals(MessageState.COMPLETED, state.getRequestState());
+ Assert.assertEquals(MessageState.READY, state.getRequestState());
Assert.assertEquals(MessageState.READY, state.getResponseState());
final Incoming incoming = state.getIncoming();
@@ -752,15 +753,19 @@ public class TestHttpAsyncService {
this.protocolHandler.inputReady(conn, this.decoder);
- Assert.assertEquals(MessageState.COMPLETED, state.getRequestState());
- Assert.assertEquals(MessageState.INIT, state.getResponseState());
+ Assert.assertEquals(MessageState.READY, state.getRequestState());
+ Assert.assertEquals(MessageState.READY, state.getResponseState());
Mockito.verify(this.requestConsumer).consumeContent(this.decoder, this.conn);
Mockito.verify(this.requestConsumer).requestCompleted(exchangeContext);
- Mockito.verify(this.requestHandler).handle(
- Mockito.eq(data),
- Mockito.any(HttpAsyncExchange.class),
- Mockito.eq(exchangeContext));
+ Mockito.verify(this.conn).requestOutput();
+
+ final PipelineEntry entry = state.getPipeline().poll();
+ Assert.assertNotNull(entry);
+ Assert.assertSame(request, entry.getRequest());
+ Assert.assertSame(requestHandler, entry.getHandler());
+ Assert.assertNotNull(entry.getResult());
+ Assert.assertNull(entry.getException());
}
@Test
@@ -780,19 +785,19 @@ public class TestHttpAsyncService {
this.protocolHandler.inputReady(conn, this.decoder);
- Assert.assertEquals(MessageState.COMPLETED, state.getRequestState());
- Assert.assertEquals(MessageState.INIT, state.getResponseState());
- final Outgoing outgoing = state.getOutgoing();
- Assert.assertNotNull(outgoing);
- Assert.assertNotNull(outgoing.getProducer());
+ Assert.assertEquals(MessageState.READY, state.getRequestState());
+ Assert.assertEquals(MessageState.READY, state.getResponseState());
Mockito.verify(this.requestConsumer).consumeContent(this.decoder, this.conn);
Mockito.verify(this.requestConsumer).requestCompleted(exchangeContext);
Mockito.verify(this.conn).requestOutput();
- Mockito.verify(this.requestHandler, Mockito.never()).handle(
- Mockito.any(),
- Mockito.any(HttpAsyncExchange.class),
- Mockito.eq(exchangeContext));
+
+ final PipelineEntry entry = state.getPipeline().poll();
+ Assert.assertNotNull(entry);
+ Assert.assertSame(request, entry.getRequest());
+ Assert.assertSame(requestHandler, entry.getHandler());
+ Assert.assertNull(entry.getResult());
+ Assert.assertNotNull(entry.getException());
}
@Test
@@ -808,6 +813,7 @@ public class TestHttpAsyncService {
final Outgoing outgoing = new Outgoing(
request, response, this.responseProducer, exchangeContext);
state.setOutgoing(outgoing);
+ state.setResponseState(MessageState.INIT);
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
Mockito.when(this.responseProducer.generateResponse()).thenReturn(response);
@@ -837,6 +843,7 @@ public class TestHttpAsyncService {
final HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK");
final Outgoing outgoing = new Outgoing(
request, response, this.responseProducer, exchangeContext);
+ response.setEntity(new NStringEntity("stuff"));
state.setOutgoing(outgoing);
final Queue<PipelineEntry> pipeline = state.getPipeline();
@@ -854,13 +861,11 @@ public class TestHttpAsyncService {
this.protocolHandler.responseReady(this.conn);
- Assert.assertEquals(MessageState.READY, state.getResponseState());
+ Assert.assertEquals(MessageState.BODY_STREAM, state.getResponseState());
Mockito.verify(this.httpProcessor).process(response, exchangeContext);
+ Mockito.verify(this.conn).suspendOutput();
Mockito.verify(this.conn).submitResponse(response);
- Mockito.verify(this.responseProducer).responseCompleted(exchangeContext);
- Mockito.verify(this.conn).requestInput();
- Mockito.verify(this.conn, Mockito.never()).suspendOutput();
Mockito.verify(this.conn, Mockito.never()).close();
}
@@ -877,6 +882,7 @@ public class TestHttpAsyncService {
final Outgoing outgoing = new Outgoing(
request, response, this.responseProducer, exchangeContext);
state.setOutgoing(outgoing);
+ state.setResponseState(MessageState.INIT);
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
Mockito.when(this.responseProducer.generateResponse()).thenReturn(response);
@@ -905,6 +911,7 @@ public class TestHttpAsyncService {
final Outgoing outgoing = new Outgoing(
request, response, this.responseProducer, exchangeContext);
state.setOutgoing(outgoing);
+ state.setResponseState(MessageState.INIT);
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
response.setEntity(new NStringEntity("stuff"));
@@ -935,6 +942,7 @@ public class TestHttpAsyncService {
final Outgoing outgoing = new Outgoing(
request, response, this.responseProducer, exchangeContext);
state.setOutgoing(outgoing);
+ state.setResponseState(MessageState.INIT);
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
response.setEntity(new NStringEntity("stuff"));
@@ -966,6 +974,7 @@ public class TestHttpAsyncService {
final Outgoing outgoing = new Outgoing(
request, response, this.responseProducer, exchangeContext);
state.setOutgoing(outgoing);
+ state.setResponseState(MessageState.INIT);
this.connContext.setAttribute(HttpAsyncService.HTTP_EXCHANGE_STATE, state);
response.setEntity(new NStringEntity("stuff"));
@@ -1063,8 +1072,8 @@ public class TestHttpAsyncService {
Assert.assertEquals(MessageState.READY, state.getResponseState());
Assert.assertNull(state.getOutgoing());
- Mockito.verify(conn).getContext();
- Mockito.verifyNoMoreInteractions(requestHandler, conn);
+ Mockito.verify(conn).suspendOutput();
+ Mockito.verifyNoMoreInteractions(requestHandler);
}
@Test
@@ -1137,7 +1146,7 @@ public class TestHttpAsyncService {
request, this.requestHandler, this.requestConsumer, exchangeContext);
state.setIncoming(incoming);
state.setRequestState(MessageState.COMPLETED);
- state.setResponseState(MessageState.READY);
+ state.setResponseState(MessageState.INIT);
final HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 112, "Something stupid");
final Outgoing outgoing = new Outgoing(
request, response, this.responseProducer, exchangeContext);
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/HttpClientNio.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/HttpClientNio.java?rev=1593793&r1=1593792&r2=1593793&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/HttpClientNio.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/testserver/HttpClientNio.java Sun May 11 14:09:30 2014
@@ -29,6 +29,8 @@ package org.apache.http.nio.testserver;
import java.io.IOException;
import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
@@ -37,7 +39,6 @@ import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.HttpResponse;
-import org.apache.http.concurrent.BasicFuture;
import org.apache.http.concurrent.FutureCallback;
import org.apache.http.config.ConnectionConfig;
import org.apache.http.impl.nio.DefaultHttpClientIODispatch;
@@ -62,8 +63,8 @@ import org.apache.http.nio.reactor.IORea
import org.apache.http.nio.reactor.IOReactorStatus;
import org.apache.http.nio.reactor.IOSession;
import org.apache.http.nio.reactor.SessionRequest;
-import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
+import org.apache.http.protocol.HttpCoreContext;
import org.apache.http.protocol.HttpProcessor;
import org.apache.http.protocol.ImmutableHttpProcessor;
import org.apache.http.protocol.RequestConnControl;
@@ -138,49 +139,18 @@ public class HttpClientNio {
final HttpAsyncResponseConsumer<T> responseConsumer,
final HttpContext context,
final FutureCallback<T> callback) {
- final HttpHost target = requestProducer.getTarget();
- final BasicFuture<T> future = new BasicFuture<T>(callback);
- this.connpool.lease(target, null, this.timeout, TimeUnit.MILLISECONDS,
- new FutureCallback<BasicNIOPoolEntry>() {
-
- @Override
- public void completed(final BasicNIOPoolEntry result) {
- executor.execute(
- requestProducer, responseConsumer,
- result, connpool,
- context != null ? context : new BasicHttpContext(),
- new FutureCallback<T>() {
-
- @Override
- public void completed(final T result) {
- future.completed(result);
- }
-
- @Override
- public void failed(final Exception ex) {
- future.failed(ex);
- }
-
- @Override
- public void cancelled() {
- future.cancel();
- }
-
- });
- }
-
- @Override
- public void failed(final Exception ex) {
- future.failed(ex);
- }
-
- @Override
- public void cancelled() {
- future.cancel();
- }
+ return executor.execute(requestProducer, responseConsumer, this.connpool,
+ context != null ? context : HttpCoreContext.create(), callback);
+ }
- });
- return future;
+ public <T> Future<List<T>> executePipelined(
+ final HttpHost target,
+ final List<HttpAsyncRequestProducer> requestProducers,
+ final List<HttpAsyncResponseConsumer<T>> responseConsumers,
+ final HttpContext context,
+ final FutureCallback<List<T>> callback) {
+ return executor.executePipelined(target, requestProducers, responseConsumers, this.connpool,
+ context != null ? context : HttpCoreContext.create(), callback);
}
public Future<HttpResponse> execute(
@@ -191,10 +161,27 @@ public class HttpClientNio {
return execute(
new BasicAsyncRequestProducer(target, request),
new BasicAsyncResponseConsumer(),
- context != null ? context : new BasicHttpContext(),
+ context != null ? context : HttpCoreContext.create(),
callback);
}
+ public Future<List<HttpResponse>> executePipelined(
+ final HttpHost target,
+ final List<HttpRequest> requests,
+ final HttpContext context,
+ final FutureCallback<List<HttpResponse>> callback) {
+ final List<HttpAsyncRequestProducer> requestProducers =
+ new ArrayList<HttpAsyncRequestProducer>(requests.size());
+ final List<HttpAsyncResponseConsumer<HttpResponse>> responseConsumers =
+ new ArrayList<HttpAsyncResponseConsumer<HttpResponse>>(requests.size());
+ for (HttpRequest request: requests) {
+ requestProducers.add(new BasicAsyncRequestProducer(target, request));
+ responseConsumers.add(new BasicAsyncResponseConsumer());
+ }
+ return executor.executePipelined(target, requestProducers, responseConsumers, this.connpool,
+ context != null ? context : HttpCoreContext.create(), callback);
+ }
+
public Future<HttpResponse> execute(
final HttpHost target,
final HttpRequest request,
@@ -202,12 +189,25 @@ public class HttpClientNio {
return execute(target, request, context, null);
}
+ public Future<List<HttpResponse>> executePipelined(
+ final HttpHost target,
+ final List<HttpRequest> requests,
+ final HttpContext context) {
+ return executePipelined(target, requests, context, null);
+ }
+
public Future<HttpResponse> execute(
final HttpHost target,
final HttpRequest request) {
return execute(target, request, null, null);
}
+ public Future<List<HttpResponse>> executePipelined(
+ final HttpHost target,
+ final HttpRequest... requests) {
+ return executePipelined(target, Arrays.asList(requests), null, null);
+ }
+
public void setExceptionHandler(final IOReactorExceptionHandler exceptionHandler) {
this.ioReactor.setExceptionHandler(exceptionHandler);
}
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/util/Args.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/util/Args.java?rev=1593793&r1=1593792&r2=1593793&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/util/Args.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/util/Args.java Sun May 11 14:09:30 2014
@@ -43,6 +43,12 @@ public class Args {
}
}
+ public static void check(final boolean expression, final String message, final Object arg) {
+ if (!expression) {
+ throw new IllegalArgumentException(String.format(message, arg));
+ }
+ }
+
public static <T> T notNull(final T argument, final String name) {
if (argument == null) {
throw new IllegalArgumentException(name + " may not be null");
Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/util/Asserts.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/util/Asserts.java?rev=1593793&r1=1593792&r2=1593793&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/util/Asserts.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/util/Asserts.java Sun May 11 14:09:30 2014
@@ -41,6 +41,12 @@ public class Asserts {
}
}
+ public static void check(final boolean expression, final String message, final Object arg) {
+ if (!expression) {
+ throw new IllegalStateException(String.format(message, arg));
+ }
+ }
+
public static void notNull(final Object object, final String name) {
if (object == null) {
throw new IllegalStateException(name + " is null");