This is an automated email from the ASF dual-hosted git repository.

dkulp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit ced2110c9c5f3d6c38ebd8eb3ff97e16af7eefaf
Author: Daniel Kulp <dk...@apache.org>
AuthorDate: Wed Oct 18 12:29:36 2017 -0400

    Fix randomly failing test
---
 .../cxf/workqueue/AutomaticWorkQueueImpl.java      | 21 +++++---------
 .../cxf/workqueue/AutomaticWorkQueueTest.java      | 33 +++++++++++++++-------
 2 files changed, 30 insertions(+), 24 deletions(-)

diff --git 
a/core/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java 
b/core/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java
index 3de1618..af4cc52 100644
--- a/core/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java
+++ b/core/src/main/java/org/apache/cxf/workqueue/AutomaticWorkQueueImpl.java
@@ -211,22 +211,15 @@ public class AutomaticWorkQueueImpl implements 
AutomaticWorkQueue {
             }
             mainLock = l;
 
+
             try {
-                //java 5/6
-                addWorkerMethod = 
ThreadPoolExecutor.class.getDeclaredMethod("addIfUnderMaximumPoolSize",
-                                                                             
Runnable.class);
-                addWorkerArgs = new Object[] {null};
-            } catch (Throwable t) {
-                try {
-                    //java 7
-                    addWorkerMethod = 
ThreadPoolExecutor.class.getDeclaredMethod("addWorker",
-                                                                               
  Runnable.class, Boolean.TYPE);
-                    addWorkerArgs = new Object[] {null, Boolean.FALSE};
-                } catch (Throwable t2) {
-                    //nothing we cando
-                }
+                //java 7
+                addWorkerMethod = 
ThreadPoolExecutor.class.getDeclaredMethod("addWorker",
+                                                                             
Runnable.class, Boolean.TYPE);
+                addWorkerArgs = new Object[] {null, Boolean.FALSE};
+            } catch (Throwable t2) {
+                //nothing we cando
             }
-
         }
         return executor;
     }
diff --git 
a/core/src/test/java/org/apache/cxf/workqueue/AutomaticWorkQueueTest.java 
b/core/src/test/java/org/apache/cxf/workqueue/AutomaticWorkQueueTest.java
index 4ce358d..92c7434 100644
--- a/core/src/test/java/org/apache/cxf/workqueue/AutomaticWorkQueueTest.java
+++ b/core/src/test/java/org/apache/cxf/workqueue/AutomaticWorkQueueTest.java
@@ -143,6 +143,15 @@ public class AutomaticWorkQueueTest extends Assert {
         assertEquals(0, workqueue.getSize());
     }
 
+    int numRunning(BlockingWorkItem[] workItems) {
+        int count = 0;
+        for (BlockingWorkItem item : workItems) {
+            if (item.isRunning()) {
+                count++;
+            }
+        }
+        return count;
+    }
     @Test
     public void testEnqueueImmediate() {
         workqueue = new AutomaticWorkQueueImpl(DEFAULT_MAX_QUEUE_SIZE, 
INITIAL_SIZE,
@@ -180,8 +189,10 @@ public class AutomaticWorkQueueTest extends Assert {
             }
 
             int max = 0;
-            while (workqueue.getActiveCount() < DEFAULT_HIGH_WATER_MARK
-                && workqueue.getSize() > 0
+            int numRun = numRunning(workItems);
+            while ((workqueue.getActiveCount() < DEFAULT_HIGH_WATER_MARK 
+                    || numRun < DEFAULT_HIGH_WATER_MARK 
+                    || workqueue.getSize() > 0)
                 && max < 10) {
                 try {
                     //wait up to a second for all the threads to start and 
grab items
@@ -190,7 +201,10 @@ public class AutomaticWorkQueueTest extends Assert {
                 } catch (InterruptedException ex) {
                     // ignore
                 }
-            }           
+                numRun = numRunning(workItems);
+            }
+            numRun = numRunning(workItems);
+            assertEquals(DEFAULT_HIGH_WATER_MARK, numRun);
 
             for (int i = 0; i < DEFAULT_MAX_QUEUE_SIZE; i++) {
                 fillers[i] = new BlockingWorkItem();
@@ -201,13 +215,6 @@ public class AutomaticWorkQueueTest extends Assert {
                 }
             }
 
-            // give threads a chance to start executing the work items
-            try {
-                Thread.sleep(250);
-            } catch (InterruptedException ex) {
-                // ignore
-            }
-
             assertTrue(workqueue.toString(), workqueue.isFull());
             assertEquals(workqueue.toString(), DEFAULT_HIGH_WATER_MARK, 
workqueue.getPoolSize());
             assertEquals(workqueue.toString(), DEFAULT_HIGH_WATER_MARK, 
workqueue.getActiveCount());
@@ -465,9 +472,12 @@ public class AutomaticWorkQueueTest extends Assert {
     }
 
     public class BlockingWorkItem implements Runnable {
+        volatile boolean running;
+        
         private boolean unblocked;
 
         public void run() {
+            running = true;
             synchronized (this) {
                 while (!unblocked) {
                     try {
@@ -479,6 +489,9 @@ public class AutomaticWorkQueueTest extends Assert {
             }
         }
 
+        boolean isRunning() {
+            return running;
+        }
         void unblock() {
             synchronized (this) {
                 unblocked = true;

-- 
To stop receiving notification emails like this one, please contact
"commits@cxf.apache.org" <commits@cxf.apache.org>.

Reply via email to