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>.