package org.jbehave.eclipse.util; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; import java.util.Random; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; import org.jbehave.eclipse.util.MonitoredExecutor; import org.junit.Before; import org.junit.Test; public class MonitoredExecutorTest { private MonitoredExecutor group; @Before public void setUp () { group = new MonitoredExecutor(Executors.newFixedThreadPool(4)); } @Test public void usecase () throws InterruptedException { final int NB = 100; final int NB_TASKS = 15; final AtomicInteger counter = new AtomicInteger(); for(int i=0;i<NB;i++) { final int iRef = i; group.execute(new Runnable () { public void run() { for(int i=0;i<NB_TASKS;i++) { group.execute(new Task(iRef+"-"+i, counter)); } } }); } group.awaitCompletion(); assertThat(counter.get(), equalTo(NB*NB_TASKS)); } private Random random = new Random(13L); class Task implements Runnable { final AtomicInteger counter; final String id; private Task(String id, AtomicInteger counter) { super(); this.id = id; this.counter = counter; } public void run() { try { Thread.sleep(random.nextInt(17)); counter.incrementAndGet(); } catch (InterruptedException e) { e.printStackTrace(); } } } }