/**
*
*/
package org.ovirt.engine.core.utils.thread;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
public class LatchedRunnableWrapperTest {
private AtomicInteger counter;
private interface RunnableCreator {
Runnable createRunnable();
}
private class DummyRunnable implements Runnable {
public DummyRunnable() {
}
@Override
public void run() {
counter.incrementAndGet();
}
}
@Before
public void setup() {
counter = new AtomicInteger();
}
/**
*
*/
@Test
public void latchedRunnableWrapperTest() {
final int threadsNumber = 100;
runThreads(threadsNumber, new RunnableCreator() {
@Override
public Runnable createRunnable() {
return new DummyRunnable();
}
});
assertEquals(threadsNumber, counter.intValue());
}
private void runThreads(final int threadsNumber, RunnableCreator runnableCreator) {
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(threadsNumber);
CountDownLatch latch = new CountDownLatch(threadsNumber);
for (int index = 0; index < threadsNumber; index++) {
fixedThreadPool.execute(new LatchedRunnableWrapper(runnableCreator.createRunnable(), latch));
}
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}