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");