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 2017/12/29 10:21:56 UTC

httpcomponents-client git commit: HTTPCLIENT-1805: added test case for request submission from a response callback

Repository: httpcomponents-client
Updated Branches:
  refs/heads/master 749b02ac0 -> 13acc440e


HTTPCLIENT-1805: added test case for request submission from a response callback


Project: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/commit/13acc440
Tree: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/tree/13acc440
Diff: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/diff/13acc440

Branch: refs/heads/master
Commit: 13acc440ed009332068ff24538a06d1cae73a5a4
Parents: 749b02a
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Fri Dec 29 11:21:27 2017 +0100
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Fri Dec 29 11:21:27 2017 +0100

----------------------------------------------------------------------
 .../AbstractHttpAsyncFundamentalsTest.java      | 64 ++++++++++++++++++++
 1 file changed, 64 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/13acc440/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncFundamentalsTest.java
----------------------------------------------------------------------
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncFundamentalsTest.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncFundamentalsTest.java
index 73c7409..dc8839a 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncFundamentalsTest.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncFundamentalsTest.java
@@ -29,13 +29,19 @@ package org.apache.hc.client5.testing.async;
 import java.util.LinkedList;
 import java.util.Queue;
 import java.util.Random;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.hc.client5.http.async.methods.AsyncRequestBuilder;
 import org.apache.hc.client5.http.async.methods.SimpleHttpRequest;
 import org.apache.hc.client5.http.async.methods.SimpleHttpResponse;
 import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient;
 import org.apache.hc.client5.http.protocol.HttpClientContext;
+import org.apache.hc.core5.concurrent.FutureCallback;
 import org.apache.hc.core5.http.ContentType;
 import org.apache.hc.core5.http.HttpHost;
 import org.apache.hc.core5.http.HttpResponse;
@@ -133,4 +139,62 @@ public abstract class AbstractHttpAsyncFundamentalsTest<T extends CloseableHttpA
         }
     }
 
+    @Test
+    public void testRequestExecutionFromCallback() throws Exception {
+        final HttpHost target = start();
+        final int requestNum = 50;
+        final AtomicInteger count = new AtomicInteger(requestNum);
+        final Queue<SimpleHttpResponse> resultQueue = new ConcurrentLinkedQueue<>();
+        final CountDownLatch countDownLatch = new CountDownLatch(requestNum);
+
+        final FutureCallback<SimpleHttpResponse> callback = new FutureCallback<SimpleHttpResponse>() {
+
+            @Override
+            public void completed(final SimpleHttpResponse result) {
+                try {
+                    resultQueue.add(result);
+                    if (count.decrementAndGet() > 0) {
+                        httpclient.execute(SimpleHttpRequest.get(target, "/random/2048"), this);
+                    }
+                } finally {
+                    countDownLatch.countDown();
+                }
+            }
+
+            @Override
+            public void failed(final Exception ex) {
+                countDownLatch.countDown();
+            }
+
+            @Override
+            public void cancelled() {
+                countDownLatch.countDown();
+            }
+        };
+
+        final int threadNum = 5;
+        final ExecutorService executorService = Executors.newFixedThreadPool(threadNum);
+        for (int i = 0; i < threadNum; i++) {
+            executorService.execute(new Runnable() {
+
+                @Override
+                public void run() {
+                    httpclient.execute(SimpleHttpRequest.get(target, "/random/2048"), callback);
+                }
+
+            });
+        }
+
+        Assert.assertThat(countDownLatch.await(TIMEOUT.getDuration(), TIMEOUT.getTimeUnit()), CoreMatchers.equalTo(true));
+
+        for (;;) {
+            final SimpleHttpResponse response = resultQueue.poll();
+            if (response == null) {
+                break;
+            } else {
+                Assert.assertThat(response.getCode(), CoreMatchers.equalTo(200));
+            }
+        }
+    }
+
 }
\ No newline at end of file