package com.webpieces.executors;
import org.junit.Assert;
import org.junit.Test;
import com.webpieces.executors.SerializedSessionExecutor;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
public class TestSessionExec {
@Test
public void testSameSession() {
StubExecutor exec1 = new StubExecutor();
StubExecutor exec2 = new StubExecutor();
List<Executor> executors = new ArrayList<>();
executors.add(exec1);
executors.add(exec2);
SerializedSessionExecutor executor = new SerializedSessionExecutor(executors);
TestRunnable r = new TestRunnable("5");
TestRunnable r2 = new TestRunnable("5");
executor.execute(r);
executor.execute(r2);
simulateRunnable(exec1);
Assert.assertTrue(r.isWasRun());
Assert.assertFalse(r2.isWasRun());
simulateRunnable(exec1);
Assert.assertTrue(r2.isWasRun());
}
@Test
public void testDifferentSessions() {
StubExecutor exec1 = new StubExecutor();
StubExecutor exec2 = new StubExecutor();
List<Executor> executors = new ArrayList<>();
executors.add(exec1);
executors.add(exec2);
SerializedSessionExecutor executor = new SerializedSessionExecutor(executors);
TestRunnable r = new TestRunnable("5");
TestRunnable r2 = new TestRunnable("4");
executor.execute(r);
executor.execute(r2);
simulateRunnable(exec1);
simulateRunnable(exec2);
Assert.assertTrue(r.isWasRun());
Assert.assertTrue(r2.isWasRun());
}
@Test
public void testMix() {
StubExecutor exec1 = new StubExecutor();
StubExecutor exec2 = new StubExecutor();
List<Executor> executors = new ArrayList<>();
executors.add(exec1);
executors.add(exec2);
SerializedSessionExecutor executor = new SerializedSessionExecutor(executors);
TestRunnable r = new TestRunnable("5");
TestRunnable r2 = new TestRunnable("4");
TestRunnable r3 = new TestRunnable("5");
executor.execute(r);
executor.execute(r2);
executor.execute(r3);
simulateRunnable(exec1);
simulateRunnable(exec2);
Assert.assertTrue(r.isWasRun());
Assert.assertTrue(r2.isWasRun());
Assert.assertFalse(r3.isWasRun());
simulateRunnable(exec1);
Assert.assertTrue(r2.isWasRun());
}
private void simulateRunnable(StubExecutor exec1) {
List<Runnable> runnables = exec1.getRunnables();
Assert.assertEquals(1, runnables.size());
runnables.get(0).run();
}
}