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 2013/06/11 20:14:10 UTC

svn commit: r1491891 - /httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestFutureRequestExecutionService.java

Author: olegk
Date: Tue Jun 11 18:14:10 2013
New Revision: 1491891

URL: http://svn.apache.org/r1491891
Log:
Fixed race condition in TestFutureRequestExecutionService#shouldExecuteMultipleCallsAndCallback

Modified:
    httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestFutureRequestExecutionService.java

Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestFutureRequestExecutionService.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestFutureRequestExecutionService.java?rev=1491891&r1=1491890&r2=1491891&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestFutureRequestExecutionService.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestFutureRequestExecutionService.java Tue Jun 11 18:14:10 2013
@@ -39,7 +39,6 @@ import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
 
 import junit.framework.Assert;
 
@@ -126,7 +125,7 @@ public class TestFutureRequestExecutionS
     }
 
     @Test
-    public void shouldExecuteMultipleCalls() throws InterruptedException, ExecutionException {
+    public void shouldExecuteMultipleCalls() throws Exception {
         final int reqNo = 100;
         final Queue<Future<Boolean>> tasks = new LinkedList<Future<Boolean>>();
         for(int i = 0; i < reqNo; i++) {
@@ -142,31 +141,28 @@ public class TestFutureRequestExecutionS
     }
 
     @Test
-    public void shouldExecuteMultipleCallsAndCallback() throws InterruptedException {
+    public void shouldExecuteMultipleCallsAndCallback() throws Exception {
         final int reqNo = 100;
+        final Queue<Future<Boolean>> tasks = new LinkedList<Future<Boolean>>();
         final CountDownLatch latch = new CountDownLatch(reqNo);
-        final CountingCallback callback = new CountingCallback(latch);
         for(int i = 0; i < reqNo; i++) {
-            httpAsyncClientWithFuture.execute(
+            final Future<Boolean> task = httpAsyncClientWithFuture.execute(
                     new HttpGet(uri), HttpClientContext.create(),
-                    new OkidokiHandler(), callback);
+                    new OkidokiHandler(), new CountingCallback(latch));
+            tasks.add(task);
+        }
+        Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
+        for (final Future<Boolean> task : tasks) {
+            final Boolean b = task.get();
+            Assert.assertNotNull(b);
+            Assert.assertTrue("request should have returned OK", b.booleanValue());
         }
-        latch.await(10, TimeUnit.SECONDS);
-
-        Assert.assertEquals(100, callback.completed.get());
-        Assert.assertEquals(0, callback.cancelled.get());
-        Assert.assertEquals(0, callback.failed.get());
     }
 
-
     private final class CountingCallback implements FutureCallback<Boolean> {
 
         private final CountDownLatch latch;
 
-        AtomicInteger failed = new AtomicInteger(0);
-        AtomicInteger cancelled = new AtomicInteger(0);
-        AtomicInteger completed = new AtomicInteger(0);
-
         CountingCallback(final CountDownLatch latch) {
             super();
             this.latch = latch;
@@ -174,17 +170,14 @@ public class TestFutureRequestExecutionS
 
         public void failed(final Exception ex) {
             latch.countDown();
-            failed.incrementAndGet();
         }
 
         public void completed(final Boolean result) {
             latch.countDown();
-            completed.incrementAndGet();
         }
 
         public void cancelled() {
             latch.countDown();
-            cancelled.incrementAndGet();
         }
     }