package org.javaee7.jms.send.receive.mdb;
import org.junit.Test;
import static org.junit.Assert.*;
import java.lang.reflect.Method;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
*
* @author Patrik Dudits
*/
public class ReceptionSynchronizerTest {
@Test
public void testWaiting() throws NoSuchMethodException, InterruptedException {
final ReceptionSynchronizer cut = new ReceptionSynchronizer();
ScheduledExecutorService pool = Executors.newScheduledThreadPool(1);
final Method method = ReceptionSynchronizerTest.class.getDeclaredMethod("testWaiting");
long startTime = System.currentTimeMillis();
pool.schedule(new Runnable() {
@Override
public void run() {
cut.registerInvocation(method);
}
}, 1, TimeUnit.SECONDS);
ReceptionSynchronizer.waitFor(ReceptionSynchronizerTest.class, "testWaiting");
long waitTime = System.currentTimeMillis()-startTime;
assertTrue("Waited more than 950ms", waitTime > 950);
assertTrue("Waited no longer than 1050ms", waitTime < 1050);
}
}