package org.webpieces.util.futures;
import org.junit.Assert;
import org.junit.Test;
import org.webpieces.util.threading.SessionExecutor;
import org.webpieces.util.threading.SessionExecutorImpl;
public class TestSessionExecutor {
private ExecutorSimulator mockExec = new ExecutorSimulator();
private SessionExecutor sessionExecutor = new SessionExecutorImpl(mockExec);
@Test
public void testBasic() {
ComparableRunnable run1 = new ComparableRunnable();
ComparableRunnable run2 = new ComparableRunnable();
ComparableRunnable run3 = new ComparableRunnable();
sessionExecutor.execute("a", run1);
sessionExecutor.execute("a", run2);
sessionExecutor.execute("b", run3);
Assert.assertFalse(run1.wasRun);
Assert.assertFalse(run2.wasRun);
Assert.assertFalse(run3.wasRun);
mockExec.runRunnables();
Assert.assertTrue(run1.wasRun);
Assert.assertFalse(run2.wasRun);
Assert.assertTrue(run3.wasRun);
mockExec.runRunnables();
Assert.assertTrue(run2.wasRun);
ComparableRunnable run4 = new ComparableRunnable();
sessionExecutor.execute("a", run4);
Assert.assertFalse(run4.wasRun);
mockExec.runRunnables();
Assert.assertTrue(run4.wasRun);
}
@Test
public void testQueued() {
ComparableRunnable run1 = new ComparableRunnable();
ComparableRunnable run2 = new ComparableRunnable();
ComparableRunnable run3 = new ComparableRunnable();
sessionExecutor.execute("a", run1);
sessionExecutor.execute("a", run2);
sessionExecutor.execute("a", run3);
Assert.assertFalse(run1.wasRun);
Assert.assertFalse(run2.wasRun);
Assert.assertFalse(run3.wasRun);
mockExec.runRunnables();
Assert.assertTrue(run1.wasRun);
Assert.assertFalse(run2.wasRun);
Assert.assertFalse(run3.wasRun);
mockExec.runRunnables();
Assert.assertTrue(run2.wasRun);
Assert.assertFalse(run3.wasRun);
mockExec.runRunnables();
Assert.assertTrue(run3.wasRun);
}
}