public void testStatisticsDecayRate() {
   final MultipleNodeExecutorTuner tuner =
       new MultipleNodeExecutorTuner(Mockito.mock(MultipleNodeExecutorFactory.class));
   assertEquals(tuner.getStatisticsDecayRate(), 0.1d);
   tuner.setStatisticsDecayRate(0.9d);
   assertEquals(tuner.getStatisticsDecayRate(), 0.9d);
 }
 public void testStatisticsKeepAlive() {
   final MultipleNodeExecutorTuner tuner =
       new MultipleNodeExecutorTuner(Mockito.mock(MultipleNodeExecutorFactory.class));
   assertEquals(tuner.getStatisticsKeepAlive(), 300);
   tuner.setStatisticsKeepAlive(60);
   assertEquals(tuner.getStatisticsKeepAlive(), 60);
 }
 public void testJobDispatchStatistics() {
   final MultipleNodeExecutorFactory factory = Mockito.mock(MultipleNodeExecutorFactory.class);
   final MultipleNodeExecutorTuner tuner = new MultipleNodeExecutorTuner(factory);
   final AtomicLong age = new AtomicLong();
   final TotallingNodeStatisticsGatherer stats =
       new TotallingNodeStatisticsGatherer() {
         @Override
         public void dropStatisticsBefore(final Instant limit) {
           assertEquals(age.getAndSet(Instant.now().getEpochSecond() - limit.getEpochSecond()), 0);
         }
       };
   tuner.setJobDispatchStatistics(stats);
   tuner.run();
   assertTrue(age.get() >= 300);
 }
 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();
 }