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