public void testJobDispatcher() {
   final MultipleNodeExecutorFactory factory = Mockito.mock(MultipleNodeExecutorFactory.class);
   final MultipleNodeExecutorTuner tuner = new MultipleNodeExecutorTuner(factory);
   final JobDispatcher dispatcher = Mockito.mock(JobDispatcher.class);
   final Map<String, Collection<Capability>> capabilities =
       new HashMap<String, Collection<Capability>>();
   Mockito.when(dispatcher.getAllCapabilities()).thenReturn(capabilities);
   tuner.setJobDispatcher(dispatcher);
   tuner.run();
   Mockito.verifyZeroInteractions(factory);
   capabilities.put("A", Arrays.asList(Capability.instanceOf("Foo")));
   capabilities.put("B", Arrays.asList(Capability.instanceOf("Bar")));
   tuner.run();
   Mockito.verifyZeroInteractions(factory);
   capabilities.put(
       "A",
       Arrays.asList(
           Capability.instanceOf("Foo"),
           Capability.parameterInstanceOf(PlatformCapabilities.NODE_COUNT, 10d)));
   capabilities.put(
       "B",
       Arrays.asList(
           Capability.instanceOf("Bar"),
           Capability.parameterInstanceOf(PlatformCapabilities.NODE_COUNT, 4d)));
   tuner.run();
   Mockito.verify(factory, Mockito.times(1)).setMaximumConcurrency(7);
   Mockito.verify(factory, Mockito.times(1)).invalidateCache();
   Mockito.when(factory.getMaximumConcurrency()).thenReturn(7);
   tuner.run();
   Mockito.verify(factory, Mockito.times(1)).setMaximumConcurrency(7);
   Mockito.verify(factory, Mockito.times(1)).invalidateCache();
 }
 private static MultipleNodeExecutorFactory multipleNodeExecutorFactoryOneJob() {
   final MultipleNodeExecutorFactory factory = new MultipleNodeExecutorFactory();
   factory.afterPropertiesSet();
   return factory;
 }
 private static MultipleNodeExecutorFactory multipleNodeExecutorFactoryManyJobs() {
   final MultipleNodeExecutorFactory factory = multipleNodeExecutorFactoryOneJob();
   factory.setMaximumJobItems(JOB_SIZE / 10);
   return factory;
 }