@Test
public void testTwoForks() {

  /*
   * Setup the pipeline of operation processors
   */
  List<List<OperationProcessor>> forks = new ArrayList<List<OperationProcessor>>();
  List<OperationProcessor> fork1 = new ArrayList<OperationProcessor>();
  fork1.add(new OperationProcessor(new DummyOperationFactory()));
  forks.add(fork1);
  List<OperationProcessor> fork2 = new ArrayList<OperationProcessor>();
  fork2.add(new OperationProcessor(new DummyOperationFactory()));
  forks.add(fork2);
  ForkOperation op = new ForkOperation(forks);
  /*
   * Create thread that supplies input events
   */
  Queue<InternalEvent> inputQueue = new Queue<InternalEvent>();
  supply(2, inputQueue);
  /*
   * Process
   */
  Stream<InternalEvent> input = inputQueue.stream();
  Stream<InternalEvent> output = op.getOutputStream(input);
  List<String> actual = output.map(InternalEvent::getEventString).collect(Collectors.toList());
  List<String> expected = Arrays.asList("0", "1", "0", "1");
  assertEquals(4, actual.size());
  assertTrue(expected.containsAll(actual));
}