Revision 66bd7445 test/ganeti.jqueue_unittest.py

b/test/ganeti.jqueue_unittest.py
565 565

  
566 566
      self._GenericCheckJob(job)
567 567

  
568
      # Finished jobs can't be processed any further
569
      self.assertRaises(errors.ProgrammerError,
570
                        jqueue._JobProcessor(queue, opexec, job))
568
      # Calling the processor on a finished job should be a no-op
569
      self.assertTrue(jqueue._JobProcessor(queue, opexec, job)())
570
      self.assertRaises(IndexError, queue.GetNextUpdate)
571 571

  
572 572
  def testOpcodeError(self):
573 573
    queue = _FakeQueueForProc()
......
643 643

  
644 644
      self._GenericCheckJob(job)
645 645

  
646
      # Finished jobs can't be processed any further
647
      self.assertRaises(errors.ProgrammerError,
648
                        jqueue._JobProcessor(queue, opexec, job))
646
      # Calling the processor on a finished job should be a no-op
647
      self.assertTrue(jqueue._JobProcessor(queue, opexec, job)())
648
      self.assertRaises(IndexError, queue.GetNextUpdate)
649 649

  
650 650
  def testCancelWhileInQueue(self):
651 651
    queue = _FakeQueueForProc()
......
665 665

  
666 666
    self.assertRaises(IndexError, queue.GetNextUpdate)
667 667

  
668
    self.assertFalse(job.start_timestamp)
669
    self.assertTrue(job.end_timestamp)
668 670
    self.assert_(compat.all(op.status == constants.OP_STATUS_CANCELED
669 671
                            for op in job.ops))
670 672

  
673
    # Serialize to check for differences
674
    before_proc = job.Serialize()
675

  
676
    # Simulate processor called in workerpool
671 677
    opexec = _FakeExecOpCodeForProc(queue, None, None)
672 678
    self.assert_(jqueue._JobProcessor(queue, opexec, job)())
673 679

  
......
675 681
    self.assertEqual(job.CalcStatus(), constants.JOB_STATUS_CANCELED)
676 682
    self.assertEqual(job.GetInfo(["status"]), [constants.JOB_STATUS_CANCELED])
677 683
    self.assertFalse(job.start_timestamp)
678
    self.assert_(job.end_timestamp)
684
    self.assertTrue(job.end_timestamp)
679 685
    self.assertFalse(compat.any(op.start_timestamp or op.end_timestamp
680 686
                                for op in job.ops))
681 687
    self.assertEqual(job.GetInfo(["opstatus", "opresult"]),
682 688
                     [[constants.OP_STATUS_CANCELED for _ in job.ops],
683 689
                      ["Job canceled by request" for _ in job.ops]])
684 690

  
691
    # Must not have changed or written
692
    self.assertEqual(before_proc, job.Serialize())
693
    self.assertRaises(IndexError, queue.GetNextUpdate)
694

  
685 695
  def testCancelWhileWaitlockInQueue(self):
686 696
    queue = _FakeQueueForProc()
687 697

  
......
903 913

  
904 914
    for remaining in reversed(range(len(job.ops) - successcount)):
905 915
      result = jqueue._JobProcessor(queue, opexec, job)()
916
      self.assertEqual(queue.GetNextUpdate(), (job, True))
917
      self.assertEqual(queue.GetNextUpdate(), (job, True))
918
      self.assertEqual(queue.GetNextUpdate(), (job, True))
919
      self.assertRaises(IndexError, queue.GetNextUpdate)
906 920

  
907 921
      if remaining == 0:
908 922
        # Last opcode
......
913 927

  
914 928
      self.assertEqual(job.CalcStatus(), constants.JOB_STATUS_QUEUED)
915 929

  
930
    self.assertRaises(IndexError, queue.GetNextUpdate)
916 931
    self.assertEqual(job.CalcStatus(), constants.JOB_STATUS_SUCCESS)
917 932
    self.assertEqual(job.GetInfo(["status"]), [constants.JOB_STATUS_SUCCESS])
918 933
    self.assertEqual(job.GetInfo(["opresult"]),
......
924 939

  
925 940
    self._GenericCheckJob(job)
926 941

  
927
    # Finished jobs can't be processed any further
928
    self.assertRaises(errors.ProgrammerError,
929
                      jqueue._JobProcessor(queue, opexec, job))
942
    # Calling the processor on a finished job should be a no-op
943
    self.assertTrue(jqueue._JobProcessor(queue, opexec, job)())
944
    self.assertRaises(IndexError, queue.GetNextUpdate)
930 945

  
931 946
    # ... also after being restored
932 947
    job2 = jqueue._QueuedJob.Restore(queue, job.Serialize())
933
    self.assertRaises(errors.ProgrammerError,
934
                      jqueue._JobProcessor(queue, opexec, job2))
948
    self.assertTrue(jqueue._JobProcessor(queue, opexec, job2)())
949
    self.assertRaises(IndexError, queue.GetNextUpdate)
935 950

  
936 951
  def testProcessorOnRunningJob(self):
937 952
    ops = [opcodes.OpTestDummy(result="result", fail=False)]
......
1293 1308
    self.assert_(compat.all(op.start_timestamp and op.end_timestamp
1294 1309
                            for op in job.ops))
1295 1310

  
1296
    # Finished jobs can't be processed any further
1297
    self.assertRaises(errors.ProgrammerError,
1298
                      jqueue._JobProcessor(self.queue, opexec, job))
1311
    # Calling the processor on a finished job should be a no-op
1312
    self.assertTrue(jqueue._JobProcessor(self.queue, opexec, job)())
1313
    self.assertRaises(IndexError, self.queue.GetNextUpdate)
1299 1314

  
1300 1315

  
1301 1316
if __name__ == "__main__":

Also available in: Unified diff