public void testWatchedJob_prepareRetryJob_split_one() {
   final Queue<DispatchableJob> dispatched = new LinkedList<DispatchableJob>();
   final JobDispatcher dispatcher =
       new JobDispatcher() {
         @Override
         protected void dispatchJobImpl(final DispatchableJob job) {
           dispatched.add(job);
         }
       };
   final CalculationJob job =
       new CalculationJob(
           createJobSpecification(),
           0,
           null,
           Arrays.asList(JOB_ITEM_A, JOB_ITEM_AB),
           CacheSelectHint.privateValues(Arrays.asList(VS_A)));
   final JobResultReceiver receiver = Mockito.mock(JobResultReceiver.class);
   final StandardJob standard = new StandardJob(dispatcher, job, receiver);
   final WatchedJob watched = new WatchedJob.Whole(standard, job, receiver);
   final DispatchableJob split = watched.prepareRetryJob(null);
   final CalculationJob job1 = split.getJob();
   assertEquals(job1.getJobItems(), Arrays.asList(JOB_ITEM_A));
   assertFalse(job1.getCacheSelectHint().isPrivateValue(VS_A));
   final CalculationJobResult result1 =
       new CalculationJobResult(
           job1.getSpecification(), 0, Arrays.asList(CalculationJobResultItem.success()), "Test");
   split.getResultReceiver(result1).resultReceived(result1);
   Mockito.verifyZeroInteractions(receiver);
   assertEquals(dispatched.size(), 1);
   final DispatchableJob next = dispatched.poll();
   final CalculationJob job2 = next.getJob();
   assertEquals(job2.getJobItems(), Arrays.asList(JOB_ITEM_AB));
   assertFalse(job2.getCacheSelectHint().isPrivateValue(VS_A));
   final CalculationJobResult result2 =
       new CalculationJobResult(
           job2.getSpecification(),
           0,
           Arrays.asList(CalculationJobResultItem.failure("Foo", "Bar")),
           "Test");
   next.getResultReceiver(result2).resultReceived(result2);
   Mockito.verify(receiver)
       .resultReceived(
           new CalculationJobResult(
               job.getSpecification(),
               0,
               Arrays.asList(
                   CalculationJobResultItem.success(),
                   CalculationJobResultItem.failure("Foo", "Bar")),
               "Test"));
   assertTrue(job1.getSpecification().getJobId() != job2.getSpecification().getJobId());
   assertTrue(job2.getSpecification().getJobId() == job.getSpecification().getJobId());
 }
 public void testStandardJob_createWatchedJob_noTail() {
   final JobDispatcher dispatcher = new JobDispatcher();
   final CalculationJob job =
       new CalculationJob(
           createJobSpecification(),
           0,
           null,
           Arrays.asList(JOB_ITEM_AB, JOB_ITEM_BC),
           CacheSelectHint.allShared());
   final StandardJob standard =
       new StandardJob(dispatcher, job, Mockito.mock(JobResultReceiver.class));
   final WatchedJob watched = standard.createWatchedJob();
   assertTrue(watched instanceof WatchedJob.Whole);
   watched.getJob().equals(job);
 }
 public void testWatchedJob_prepareRetryJob_singleItem() {
   final JobDispatcher dispatcher = new JobDispatcher();
   final FunctionBlacklistMaintainer blacklist = Mockito.mock(FunctionBlacklistMaintainer.class);
   dispatcher.setFunctionBlacklistMaintainer(blacklist);
   final CalculationJob job =
       new CalculationJob(
           createJobSpecification(),
           0,
           null,
           Arrays.asList(JOB_ITEM_A),
           CacheSelectHint.allShared());
   final JobResultReceiver receiver = Mockito.mock(JobResultReceiver.class);
   final StandardJob standard = new StandardJob(dispatcher, job, receiver);
   final WatchedJob watched = new WatchedJob.Whole(standard, job, receiver);
   watched.prepareRetryJob(null);
   Mockito.verify(blacklist).failedJobItem(JOB_ITEM_A);
 }
 public void testStandardJob_createWatchedJob_rewrite() {
   final JobDispatcher dispatcher = new JobDispatcher();
   final CalculationJob job1 =
       new CalculationJob(
           createJobSpecification(),
           0,
           null,
           Arrays.asList(JOB_ITEM_AB),
           CacheSelectHint.privateValues(Arrays.asList(VS_B)));
   final CalculationJob job2 =
       new CalculationJob(
           createJobSpecification(),
           0,
           new long[] {job1.getSpecification().getJobId()},
           Arrays.asList(JOB_ITEM_BC),
           CacheSelectHint.privateValues(Arrays.asList(VS_B)));
   job1.addTail(job2);
   final StandardJob standard =
       new StandardJob(dispatcher, job1, Mockito.mock(JobResultReceiver.class));
   final WatchedJob watched = standard.createWatchedJob();
   assertTrue(watched instanceof WholeWatchedJob);
   assertFalse(watched.getJob().getCacheSelectHint().isPrivateValue(VS_B));
   assertNull(watched.getJob().getTail());
 }